• 两个输入信号同时输入判断


    /*******两个输入信号同时输入判断,2019 4 6**********/
    /*******桥架机AB系统拉拔选择其中一个先拉进位置*****/
    /***AB都在等待区A先前进,B在等待区A在中间B先前进****/
    /***其中一个不在等待区拉拔后退PAST L259 CODE640****/
                   #include     
                   #include     
                   #define       uint unsigned int  
                   #define       uchar unsigned char
                   uchar         code disdt[11]={0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xa3};
                   sbit          CS=P1^2;             //  12864PIN4     vala显示缓冲valb加减时间处理缓冲
                   sbit          SID=P1^3;           //     12864PIN5
                   sbit          SCLK=P1^4;             //     12864PIN6
                   sbit          key1=P3^2;         //     设置按键
                   sbit          key2=P1^7;         //
                   uchar         k;
                   uchar         kcounter;             //按键计数器
                   uchar         counter;              //手动按键检测计数器
                   uchar         kstatus;              //状态寄存器
                   bit           A_Flag;               //A按键按下标志
                   bit           B_Flag;               //B按键按下标志
                   bit           Chuange_Flag;           //按键输入更新标志
                   uchar         AB_Flag;               //按键输入编号标记
    /*------------------延时子程序------------------------*/
                   void delay(unsigned int t)
                   {
                    uint i,j;
                    for(i=0;i                 for(j=0;j<500;j++);
                   }
    /*------------------延时子程序------------------------*/
                   void delay_1ms(uint x)
                   {
                   int i, j;
                   for(i=0;i                for(j=0;j<1500;j++);
                   }                
    /****************按键计数器状态寄存器归零*************/
                   void RstKey()
                   {
                   kcounter=0;                       //按键计数器归零
                   kstatus=0;                        //状态寄存器归零
                   }
    /*****************按键低电平检测函数*****************/
                   void   LowVoltKey(void)           //按键计数器状态标志加一
                   {
                   kcounter++;                       
                   kstatus++;     
                   delay(10);                        //延时                  
                   }
    /*****************按键高电平检测函数*****************/
                   void    HighVoltKey(void)         //按键计数器加一 状态标志归零
                   {
                   kcounter++;                       //按键计数器加一
                   kstatus=0;                        //按键状态标志归零
                   delay(10);                        //延时
                   }
    /*------------------写命令到LCD-----------------------*/
                   void write_com(unsigned char cmdcode)
                   {
                   uchar i;
                   uchar i_data,temp_data1,temp_data2;
                   EA=0;
                   i_data=0xf8;
                   delay_1ms(10);
                   CS=1;
                   SCLK=0;
                    for(i=0;i<8;i++)
                    {
                    SID=(bit)(i_data&0x80);
                    SCLK=0;
                    SCLK=1;
                    i_data=i_data<<1;
                    }
                   i_data=cmdcode;
                   i_data&=0xf0;
                    for(i=0;i<8;i++)
                    {
                    SID=(bit)(i_data&0x80);
                    SCLK=0;
                    SCLK=1;
                    i_data=i_data<<1;
                    }
                   i_data=cmdcode;
                   temp_data1=i_data&0xf0;
                   temp_data2=i_data&0x0f;
                   temp_data1>>=4;
                   temp_data2<<=4;
                   i_data=temp_data1|temp_data2;
                   i_data&=0xf0;
                    for(i=0;i<8;i++)
                    {
                    SID=(bit)(i_data&0x80);
                    SCLK=0;
                    SCLK=1;
                    i_data=i_data<<1;
                    }
                   CS=0;
                   EA=1;
                   }
    /*-------------------写数据到LCD----------------------*/
                   void write_data(unsigned char Dispdata)
                   {
                   uchar i;
                   uchar i_data,temp_data1,temp_data2;
                   EA=0;
                   i_data=0xfa;
                   delay_1ms(10);
                   CS=1;
                    for(i=0;i<8;i++)
                    {
                    SID=(bit)(i_data&0x80);
                    SCLK=0;
                    SCLK=1;
                    i_data=i_data<<1;
                    }
                   i_data=Dispdata;
                   i_data&=0xf0;
                    for(i=0;i<8;i++)
                    {
                    SID=(bit)(i_data&0x80);
                    SCLK=0;
                    SCLK=1;
                    i_data=i_data<<1;
                    }
                   i_data=Dispdata;
                   temp_data1=i_data&0xf0;
                   temp_data2=i_data&0x0f;
                   temp_data1>>=4;
                   temp_data2<<=4;
                   i_data=temp_data1|temp_data2;
                   i_data&=0xf0;
                    for(i=0;i<8;i++)
                    {
                    SID=(bit)(i_data&0x80);
                    SCLK=0;
                    SCLK=1;
                    i_data=i_data<<1;
                    }
                   CS=0;
                   EA=1;
                   }
    /*------------------初始化LCD屏-----------------------*/
                   void lcd_init()
                   {
                   uchar comdata;
                   delay_1ms(100);
                   comdata=0x30;
                   write_com(comdata); /*功能设置:一次送8位数据,基本指令集*/
                   comdata=0x04;
                   write_com(comdata); /*点设定:显示字符/光标从左到右移位,DDRAM地址加1*/
                   comdata=0x0f;
                   write_com(comdata); /*显示设定:开显示,显示光标,当前显示位反白闪动*/
                   comdata=0x01;
                   write_com(comdata); /*清DDRAM*/
                   comdata=0x02;
                   write_com(comdata); /*DDRAM地址归位*/
                   comdata=0x80;
                   write_com(comdata); /*把显示地址设为0X80,即为第一行的首位*/
                   }
    /***********************************/
                   void ABpositionCalculation()
                   {
                   Chuange_Flag=0;                     //复位更新标志
                   if(A_Flag==0&&B_Flag==0)            // 0 0
                   AB_Flag=1;
                   else  if(A_Flag==0&&B_Flag==1)    // 0 1
                   AB_Flag=2;
                   else  if(A_Flag==1&&B_Flag==0)    // 1 0
                   AB_Flag=3;
                   else  if(A_Flag==1&&B_Flag==1)    // 1 1
                   AB_Flag=4;
                   A_Flag=1;
                   B_Flag=1;
                   }
    /***********************************/
                   void Dis_Lcd()
                   {
                    if(AB_Flag==1)
                    {
                    write_com(0X82);
                    write_data(0xA3);                /**/
                    write_data(disdt[1]);            /**/
                    }
                    else if(AB_Flag==2)
                    {
                    write_com(0X82);
                    write_data(0xA3);                /**/
                    write_data(disdt[2]);            /**/
                    }
                    else if(AB_Flag==3)
                    {
                    write_com(0X82);
                    write_data(0xA3);                /**/
                    write_data(disdt[3]);            /**/
                    }
                    else if(AB_Flag==4)
                    {
                    write_com(0X82);
                    write_data(0xA3);                /**/
                    write_data(disdt[4]);            /**/
                    }
                   }
    /*------------------主循环程序----------------*/      
                   void   main( )                    /*主程序开始*/
                   {
                   delay(5000);
                   lcd_init();                       /*液晶复位*/
                   A_Flag=1;                         //A输入信号
                   B_Flag=1;                         //B输入信号
                   Chuange_Flag=1;                     //更新标志
                   while(1)
                   {
                    RstKey();
                    for(;kcounter<5;)                //按键循环5次
                    {
                     if(!key1)                       //低电平
                     {
                     LowVoltKey();                   //按键计数器状态标志加一
                     }
                     else if(~!key1)                 //按键高电平
                     {
                     HighVoltKey();                  //按键计数器加一 状态标志归零
                     }
                     if(kstatus>=3)  
                     {
                     Chuange_Flag=1;
                     A_Flag=0;
                     write_com(0X92);
                     write_data(0xA3);               /**/
                     write_data(disdt[1]);           /**/
                     }
                    }
                    RstKey();
                    for(;kcounter<5;)                //按键循环5次
                    {
                     if(!key2)                       //低电平
                     {
                     LowVoltKey();                   //按键计数器状态标志加一
                     }
                     else if(~!key2)                 //按键高电平
                     {
                     HighVoltKey();                  //按键计数器加一 状态标志归零
                     }
                     if(kstatus>=3)  
                     {
                     Chuange_Flag=1;
                     B_Flag=0;
                      write_com(0X93);
                     write_data(0xA3);               /**/
                     write_data(disdt[2]);           /**/
                     }
                    }
                    if(Chuange_Flag==1)                 //更新标志等于1,有键按下更新计算和显示
                   {
                    ABpositionCalculation();         //计算
                    Dis_Lcd();                         //显示
                   }
                   }
                  }                                     //L259 CODE640

  • 相关阅读:
    Kyligence 副总裁周涛:创新数据能力,驱动银行业数字化转型|爱分析活动
    利用chatgpt+低代码技术搭建进销存系统
    SpringBoot线程池和Java线程池的用法和实现原理
    基于AIE的贵州省FVC提取
    2022年6月21日cloudflare 故障宕机事件记录 恭喜CF凭借一己之力,拉闸全球50%网络分发
    束从轩的“网红人设”,正在加重老乡鸡的割裂
    Mac 下载新Sourcetree 管理 Gitlab 代码(下载及提交)
    mysql查询 limit 1000,10 和limit 10 一样快吗?
    java毕业设计——基于java+JSP+MySQL的网上购书系统设计与实现——网上购书系统
    matlab, python串口10ms毫秒 连续发送16进制数组
  • 原文地址:https://blog.csdn.net/czhaii/article/details/139725647