找回密码
 立即注册
查看: 229|回复: 2

STC8H8K32U控制板 IO输入问题

[复制链接]

47

主题

153

回帖

812

积分

高级会员

积分
812
发表于 2026-4-6 07:05:21 | 显示全部楼层 |阅读模式
工控板.jpg

做了一块STC8H8K32U控制板
P3.3-P3.7 P4.1-P4.4 P2.0-P2.5
共16个IO做输入信号
手上只有3.3K  0805贴片排阻
做输入24V光耦12脚开启限流,
然后通电调试发现无法开启光耦,
输出到芯片IO只有1.2V左右,
然后重新更换成0603  2K的贴片电阻,
后来想到使用高阻输入,
再把IO口高级配置,
电阻上拉,施密特触发,
数字输入。
现在想用P3.2打开一个LED
用3.3或3.4关闭LED
实验下来P3.2输入低电平可以打开LED
但是3.3或3.4没有给低电平
却把LED关闭了

买的联想电脑给我F功能键搞成热键了
仿真都不能 柳八爷真让人糟心




按键高低电平多次检测

               for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_1)                     //输入端口低电平
                  {
                  Key_ValAdd();                  //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_1)               //输入端口高电平
                  {                              //
                  Key_Clear();                   //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                 /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(1);
                  OUT_1=0;
                  }
                }
//P3.2低电平开LED
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_3)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_3)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(2);
                  OUT_1=1;
                  }
                 }
//P3.3低电平关LED

回复

使用道具 举报 送花

47

主题

153

回帖

812

积分

高级会员

积分
812
 楼主| 发表于 2026-4-6 08:27:06 | 显示全部楼层
   初始化端口
                        void IO_int()
                          {
                           P_SW2 |= 0x80;  //扩展寄存器(XFR)访问使能
                           P0M1 = 0x00;   P0M0 = 0x00;   //设置为推挽输出
               P1M1 = 0x00;   P1M0 = 0x03;   //设置为准双向口
               P2M1 = 0x3F;   P2M0 = 0x00;   //设置为准双向口
                           P2PU &=~0x3f;  P2IE |= 0x3f;  //
               P2=0X3F;                      //00 11 1111拉高
                           P2NCS &= ~0x3F;
               P3M1 = 0xFC;   P3M0 = 0x00;   //P3.2-P3.7高阻输入
               P3PU &=~0xfc;  P3IE |= 0xfc;
                           P3NCS &= ~0xfc;
               P3=0XFC;             //1111 1100
               P4M1 = 0x1E;   P4M0 = 0x00;     //
               P4PU &= ~0x1e; P4IE |= 0x1e;
                           P4NCS &= ~0x1E;
               P4=0X1E;                          // 0001 1110
               P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
               }
回复

使用道具 举报 送花

47

主题

153

回帖

812

积分

高级会员

积分
812
 楼主| 发表于 2026-4-7 08:16:43 | 显示全部楼层
一大早还是改成双向口 似乎好了,
IO口测量5V电压 上次折腾来折腾去就是不行。


/******************************************/
              #include     "stc8h.h"       //包含此头文件后,不需要再包含"reg51.h"头文件
              #include     "stdio.h"
              #include     "intrins.h"
              #define      high 1
              #define      low 0
              #define      OPEN 1
              #define      OFF 0
              typedef        unsigned char    u8;
              typedef        unsigned int        u16;
              typedef        unsigned long    u32;
              sbit         OLED_SCL=P2^7;         //
              sbit         OLED_SDA=P2^6;         //
              sbit         OUT_A=P6^0;             //
              sbit         OUT_B=P6^1;             //
              sbit         OUT_C=P6^2;             //
              sbit         OUT_D=P6^3;             //
              sbit         Motora_Ina1=P1^0;     // 电机前信号
              sbit         Motora_Ina2=P1^1;     //    电机前信号
              sbit         Motorb_Ina1=P1^4;     //    电机后信号
              sbit         Motorb_Ina2=P1^5;     //    电机后信号
              sbit         INT_1=P3^2;             // 自动启动  
              sbit         INT_2=P3^3;             // 开模信号     
              sbit         INT_3=P3^4;             //    机械手到位
              sbit         INT_4=P3^5;             //    气缸前到位
              sbit         INT_5=P3^6;             //    气缸后到位
              sbit         INT_6=P3^7;             //    气缸前退停
              sbit         INT_7=P4^1;             //    气缸后退停
              sbit         INT_8=P4^2;             //    电机前到位
              sbit         INT_9=P4^3;             //    电机后到位
              sbit         INT_10=P4^4;             //    电机前退停
              sbit         INT_11=P2^0;             //    电机后退停
              sbit         INT_12=P2^1;             //    手动气缸进
              sbit         INT_13=P2^2;             //    手动气缸退
              sbit         INT_14=P2^3;             //    手动电机进
              sbit         INT_15=P2^4;             //    手动电机退
              sbit         INT_16=P2^5;             //
//输入信号
              sbit         OUT_1=P0^6;             // 气缸前进
              sbit         OUT_2=P0^4;             //    气缸前退
              sbit         OUT_3=P0^3;             //    气缸后进
              sbit         OUT_4=P0^2;             //    气缸后退
              sbit         OUT_5=P0^1;             //
              sbit         OUT_6=P0^0;             //
              sbit         OUT_7=P4^6;             // 警报
              sbit         OUT_8=P4^5;             //    动作完成
//输出信号
              sbit         KEY_1=P1^7;             //
              sbit         KEY_2=P1^6;             //
              sbit         KEY_3=P1^3;             //
              sbit         KEY_4=P5^4;             //
              sbit         KEY_5=P4^0;             //
              sbit         KEY_6=P4^7;             //
              sbit         KEY_7=P0^5;             //
              sbit         KEY_8=P0^7;             //
//按键
              u8           Counter;                 //步进计数器
              u8           kcounter,kstatus;     //按键计数标志 按键状态标志
              #define MAIN_Fosc        24000000UL
u8 code show1[]=
{
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",0*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"1",1*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",2*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*"3",3*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/*"4",4*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*"5",5*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/*"6",6*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*"7",7*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",8*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,/*"9",9*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x1F,0x01,0x01,0x01,0x01,0x1F,0x00,/*"A",10*/
0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,/*"D",11*/
0x08,0xF8,0x00,0xF8,0x00,0xF8,0x08,0x00,0x00,0x03,0x3E,0x01,0x3E,0x03,0x00,0x00,/*"W",12*/
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,/*"O",13*/
0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,/*"N",14*/
};   
u8 code show2[]=
{
0x08,0x08,0x08,0x08,0x88,0x78,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
0x20,0x10,0x48,0x46,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x40,0x00,/*"左",0*/
0x08,0x08,0x08,0x08,0xC8,0x38,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
0x08,0x04,0x02,0x01,0xFF,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xFF,0x00,0x00,0x00,/*"右",1*/
0x80,0x60,0xF8,0x07,0x00,0x04,0x74,0x54,0x55,0x56,0x54,0x54,0x74,0x04,0x00,0x00,
0x00,0x00,0xFF,0x00,0x03,0x01,0x05,0x45,0x85,0x7D,0x05,0x05,0x05,0x01,0x03,0x00,/*"停",2*/
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"止",3*/
0x00,0x00,0x00,0xFC,0x44,0x44,0x44,0x45,0x46,0x44,0x44,0x44,0x44,0x7C,0x00,0x00,
0x40,0x20,0x18,0x07,0x00,0xFC,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFC,0x00,0x00,/*"启",4*/
0x40,0x44,0xC4,0x44,0x44,0x44,0x40,0x10,0x10,0xFF,0x10,0x10,0x10,0xF0,0x00,0x00,
0x10,0x3C,0x13,0x10,0x14,0xB8,0x40,0x30,0x0E,0x01,0x40,0x80,0x40,0x3F,0x00,0x00,/*"动",5*/
0x00,0x04,0x84,0x84,0x94,0xE4,0x85,0x86,0x84,0xC4,0xB4,0x84,0x84,0x84,0x80,0x00,
0x80,0x60,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"产",6*/
0x20,0x20,0x20,0xBE,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBE,0x20,0x20,0x20,0x00,
0x00,0x80,0x80,0xAF,0xAA,0xAA,0xAA,0xFF,0xAA,0xAA,0xAA,0xAF,0x80,0x80,0x00,0x00,/*"量",7*/
0x40,0x40,0x42,0xCC,0x00,0x80,0x88,0x88,0xFF,0x88,0x88,0xFF,0x88,0x88,0x80,0x00,
0x00,0x40,0x20,0x1F,0x20,0x40,0x50,0x4C,0x43,0x40,0x40,0x5F,0x40,0x40,0x40,0x00,/*"进",8*/
0x40,0x40,0x42,0xCC,0x00,0x00,0xFF,0x49,0x49,0xC9,0x49,0x49,0x7F,0x80,0x00,0x00,
0x00,0x40,0x20,0x1F,0x20,0x40,0x5F,0x48,0x44,0x40,0x41,0x42,0x45,0x58,0x40,0x00,/*"退",9*/
0x00,0x00,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x04,0xFC,0x00,0x00,0x00,
0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,/*"刀",10*/
0x00,0x10,0x88,0xC4,0x33,0x40,0x48,0x48,0x48,0x7F,0x48,0xC8,0x48,0x48,0x40,0x00,
0x02,0x01,0x00,0xFF,0x00,0x02,0x0A,0x32,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x00,/*"待",11*/
0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,
0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x78,0x00,/*"机",12*/
};
//==========================================================================
              void  delay_ms(u8 ms)
              {
               u16 i;
               do
               {
                i=MAIN_Fosc/1000;
                while(--i);
               }
               while(--ms);
              }
/************按键计数器状态寄存器归零************/
              void key_reset()
              {
              kcounter=0;                        //计数器归零
              kstatus=0;                         //状态计数器归零
              }
/************按键计数器状态寄存器加一************/
              void Key_ValAdd()
              {
              kcounter++;                        //按键计数器加一
              kstatus++;                         //按键状态标志加一
              }
/***********按键计数器加一状态寄存器归零*********/
              void Key_Clear()
              {
              kcounter++;                        //按键计数器加一
              kstatus=0;                         //按键状态标志归零
              }
/*************Pin Define***************/
             void  Oled_delay(u16 ms)
              {
              u16 i,j;
              for(i=0;i<ms;i++)
              for(j=0;j<20;j++);
              }
/*************Pin Define***************/
              void      Initial_LY096BG30();
              void      Delay_50ms(u16 Del_50ms);
              void      fill_picture(u8 fill_Data);
              void      IIC_Start();
              void      IIC_Stop();
              void      Write_IIC_Command(u8 IIC_Command);
              void      Write_IIC_Data(u8 IIC_Data);
              bit       Write_IIC_Byte(u8 IIC_Byte);
/*******************IIC Start******************/
              void IIC_Start()
              {
               OLED_SCL=high;
               Oled_delay(2);
               OLED_SDA=high;
               Oled_delay(2);
               OLED_SDA=low;
               Oled_delay(2);
               OLED_SCL=low;
              }
/*************IIC Stop*************************/
              void IIC_Stop()
              {
              OLED_SDA=low;
              Oled_delay(2);
              OLED_SCL=high;
              Oled_delay(2);
              OLED_SDA=high;
              }
/*****************IIC Write byte***************/
              bit Write_IIC_Byte(u8 IIC_Byte)
              {
              unsigned char i;
               bit Ack_Bit;                      //应答信号
               for(i=0;i<8;i++)        
               {
               if(IIC_Byte & 0x80)               //1?0?
               OLED_SDA=high;
               else
               OLED_SDA=low;
               OLED_SCL=high;
               Oled_delay(2);
               OLED_SCL=low;
               IIC_Byte<<=1;                     //loop
               }
              OLED_SDA=high;                     //释放IIC SDA总线为主器件接收从器件产生应答信号   
              Oled_delay(2);
              OLED_SCL=high;                     //第9个时钟周期
              Oled_delay(2);
              Ack_Bit=OLED_SDA;                  //读取应答信号
              OLED_SCL=low;
              return Ack_Bit;   
              }  
/*************IIC Write Command*****************/
              void Write_IIC_Command(u8 IIC_Command)
              {
              IIC_Start();
              Write_IIC_Byte(0x78);              //Slave address,SA0=0
              Write_IIC_Byte(0x00);              //write command
              Write_IIC_Byte(IIC_Command);
              IIC_Stop();
              }
/****************IIC Write Data*****************/
              void Write_IIC_Data(u8 IIC_Data)
              {
              IIC_Start();
              Write_IIC_Byte(0x78);            
              Write_IIC_Byte(0x40);              //write data
              Write_IIC_Byte(IIC_Data);
              IIC_Stop();
              }
/***********************Initial code*********************/
              void  Initial_LY096BG30()
              {
              Write_IIC_Command(0xAE);   //display off
              Write_IIC_Command(0x20);     //Set Memory Addressing Mode   
              Write_IIC_Command(0x10);     //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
              Write_IIC_Command(0xb0);     //Set Page Start Address for Page Addressing Mode,0-7
              Write_IIC_Command(0xc8);      //Set COM Output Scan Direction
              Write_IIC_Command(0x00);   //---set low column address
              Write_IIC_Command(0x10);   //---set high column address
              Write_IIC_Command(0x40);   //--set start line address
              Write_IIC_Command(0x81);   //--set contrast control register
              Write_IIC_Command(0x7f);
              Write_IIC_Command(0xa1);   //--set segment re-map 0 to 127
              Write_IIC_Command(0xa6);   //--set normal display
              Write_IIC_Command(0xa8);   //--set multiplex ratio(1 to 64)
              Write_IIC_Command(0x3F);   //
              Write_IIC_Command(0xa4);   //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
              Write_IIC_Command(0xd3);   //-set display offset
              Write_IIC_Command(0x00);   //-not offset
              Write_IIC_Command(0xd5);   //--set display clock divide ratio/oscillator frequency
              Write_IIC_Command(0xf0);   //--set divide ratio
              Write_IIC_Command(0xd9);   //--set pre-charge period
              Write_IIC_Command(0x22);   //
              Write_IIC_Command(0xda);   //--set com pins hardware configuration
              Write_IIC_Command(0x12);
              Write_IIC_Command(0xdb);   //--set vcomh
              Write_IIC_Command(0x20);   //0x20,0.77xVcc
              Write_IIC_Command(0x8d);   //--set DC-DC enable
              Write_IIC_Command(0x14);   //
              Write_IIC_Command(0xaf);   //--turn on oled panel
             }
/***************设置参数显示******************/
               void dis_Val1(u8 s)
               {
               u8 x,y;
               u16 i=0;
               u8 A1,A2,A3;
               A1=s/100;
               A2=(s-A1*100)/10;
               A3=s-A1*100-A2*10;
               for(y=0;y<2;y++)                  //百位显示
               {
               Write_IIC_Command((u8)(0XB4+y));        //纵向页    1011
               Write_IIC_Command(0X00);            //横向离左部边缘开始的距离
               Write_IIC_Command(0X10);          //横向第四个字
                for(x=0;x<8;x++)                 //横向像素
                {
                Write_IIC_Data(show1[x+y*8+A1*16]);     //0--A字符表
                }
                for(x=0;x<8;x++)                 //横向像素
                {
                Write_IIC_Data(show1[x+y*8+A2*16]);
                Oled_delay(2);
                }
               }
                for(y=0;y<2;y++)                 //十位显示
                {
                Write_IIC_Command((u8)(0XB4+y));       //纵向页
                Write_IIC_Command(0X00);           //横向离左部边缘开始的距离
                Write_IIC_Command(0X11);         //横向第五个字
                 for(x=0;x<8;x++)                //横向像素
                 {
                 Write_IIC_Data(show1[x+y*8+A3*16]);
                 Oled_delay(2);
                 }
                }
               }
/********************显示待机**********************/
              void Diswait()
              {
              u8 x,y;
              u16 Cnt=32;
              for(y=0;y<2;y++)
               {
               Write_IIC_Command((u8)(0XB0+y));        //竖向第一行    待
               Write_IIC_Command(0x00);
               Write_IIC_Command(0x10);             //横向第一个字
                for(x=0;x<16;x++)                 //横向像素
                {
                Write_IIC_Data(show2[x+y*16+Cnt*11]); //字符表第7个字
                }
               }
//
               for(y=0;y<2;y++)
               {
               Write_IIC_Command((u8)(0XB0+y));        //竖向第一行    机
               Write_IIC_Command(0x00);
               Write_IIC_Command(0x11);             //横向第二个字
                for(x=0;x<16;x++)                 //横向像素
                {
                Write_IIC_Data(show2[x+y*16+Cnt*12]);  //字符表第8个字
                }
               }
              }        
/********************IO_rst**********************/               
              void IO_int()
              {
               P_SW2 |= 0x80;  //扩展寄存器(XFR)访问使能
               P0M1 = 0x00;   P0M0 = 0x00;   //设置为推挽输出
               P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
               P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
               P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
               P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
               P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
               }
/********************picture**********************/
              void cleardisp()
              {
              u8 x,y;
              for(y=0;y<8;y++)
               {
               Write_IIC_Command((u8)(0xb0+y));
               Write_IIC_Command(0x00);
               Write_IIC_Command(0x10);
                for(x=0;x<128;x++)               //横向像素
                {
                Write_IIC_Data(0X00);
                }
               }
              }
/***************显示计数器值******************/
               void dis_Val(u8 s)
               {
               u8 x,y;
               u16 i=0;
               u8 A1,A2;
               A1=s/10;
               A2=s-A1*10;
               for(y=0;y<2;y++)                  //百位显示
               {
               Write_IIC_Command((u8)(0XB2+y));        //纵向页    1011
               Write_IIC_Command(0X00);            //横向离左部边缘开始的距离
               Write_IIC_Command(0X10);          //横向第四个字
                for(x=0;x<8;x++)                 //横向像素
                {
                Write_IIC_Data(show1[x+y*8+A1*16]);     //0--A字符表
                }
                 for(x=0;x<8;x++)                 //横向像素
                {
                Write_IIC_Data(show1[x+y*8+A2*16]);     //0--A字符表
                }
                }
                delay_ms(150);                     //延时
               }
/******************** 主函数 **************************/
              void main(void)
              {
               IO_int();
               Initial_LY096BG30();
               cleardisp();
               Diswait();
               Counter=0;
               dis_Val1(0X12);                   //第三行显示十进制数18
               while(1)
                {
//
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!KEY_1)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!KEY_1)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(1);
                  }
                 }
//按键1
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!KEY_2)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!KEY_2)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(2);
                  }
                 }
//按键2
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!KEY_3)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!KEY_3)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(3);
                  }
                 }
//按键3
                 key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!KEY_4)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!KEY_4)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(4);
                  }
                 }
//按键4
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!KEY_5)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!KEY_5)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(5);
                  }
                 }
//按键5
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!KEY_6)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!KEY_6)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(6);
                  }
                 }
//按键6
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!KEY_7)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!KEY_7)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(7);
                  }
                 }
//按键7
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!KEY_8)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!KEY_8)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(8);
                  }
                 }
//按键8              INT_1

                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_1)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_1)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(10);
                  }
                 }
//输入1
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_2)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_2)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(11);
                  }
                 }
//按键2
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_3)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_3)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(12);
                  }
                 }
//输入3
                 key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_4)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_4)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(13);
                  }
                 }
//输入4
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_5)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_5)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(14);
                  }
                 }
//输入5
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_6)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_6)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(15);
                  }
                 }
//输入6
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_7)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_7)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(16);
                  }
                 }
//输入7
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_8)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_8)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(17);
                  }
                 }
//输入8
                 key_reset();
                 for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_9)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_9)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(18);
                  }
                 }
//输入9
                 key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_10)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_10)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(19);
                  }
                 }
//输入10
                 key_reset();
                 for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_11)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_11)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(20);
                  }
                 }
//输入11
                 key_reset();
                 for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_12)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_12)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(21);
                  }
                 }
//输入12
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_13)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_13)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(22);
                  }
                 }
//输入13
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_14)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_14)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(23);
                  }
                 }
//输入14
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_15)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_15)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(24);
                  }
                 }
//输入15
                key_reset();
                for(;kcounter<10;)              //输入端口循环5次
                 {
                  if(!INT_16)                    //输入端口低电平
                  {
                  Key_ValAdd();                 //输入端口低电平 计数器加一状态标志加一
                  }
                  else if(~!INT_16)              //输入端口高电平
                  {                             //
                  Key_Clear();                  //按键计数器加一    状态标志归零
                  }
                  if(kstatus>=8)                /*按键状态标志大于等于3为有效值*/
                  {  
                  dis_Val(25);
                  }
                 }
//输入6
               }
              }


回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-11-7 13:31 , Processed in 0.067750 second(s), 51 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表