您现在所在的是:

单片机论坛

回帖:1个,阅读:21 [上一页] [1] [下一页]
2629
czhaii
文章数:440
年度积分:271
历史总积分:2629
注册时间:2016/3/13
发站内信
发表于:2026/4/7 8:18:20
#0楼
/******************************************/
             #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);
                 }
                }
//输入16
              }
             }
2629
czhaii
文章数:440
年度积分:271
历史总积分:2629
注册时间:2016/3/13
发站内信
发表于:2026/4/7 8:18:43
#1楼
附件 工控板.jpg

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2026 Gkong.com, All Rights Reserved

171.6011