微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 测试测量 > Labview > 求大神指点一下按键程序

求大神指点一下按键程序

时间:10-02 整理:3721RD 点击:
前一段时间 写了一个按键程序,单片机是PIC16F1936 ,由于板子布局问题,所以按键输入口选用的是RA1 、RA3、RA5、RB2、RB4、RC5、RC7 对应输出:RA0 、RA2、RA4、RB3、RB5、RC4、RB1.  输出端 输出低电平是 接在输出端的三极管导通这个程序我想简化一下,但是有时在想不到其他的该怎么写,就是想把判断的部分简化一下,不需要像现在的程序 每次都要扫一次,判断一次
本来是想照着下面这个程序改的,但是输入口不统一,所以不好命名PINB
void KeyRead( void )
{
    unsigned char ReadData = PINB^0x7f;   
    Trg = ReadData & (ReadData ^ Cont);      
    Cont = ReadData;   


求大神 指点一下,怎么将下面按键程序修改的精粹一些。
按键部分程序如下:
void keyscan()
{   

    if(RA1==1)
        {
                RA1_flag=1;//标志位 按键未按下
        }
        if((RA1==0)&&(RA1_flag==1))
        {
                RA1_flag=0;
                RA1_num++;
                if(RA1_num==1)//第一次按下按键 输出端 输出低电平
                RA0=0;
                else
                if(RA1_num==2)第二次按下按键 输出端 输出高电平
                {
                RA0=1;
                RA1_num=0;
                }
        }
     if(RA3==1)
        {
                RA3_flag=1;
        }
                if((RA3==0)&&(RA3_flag==1))
                {
                        RA3_flag=0;
                        RA3_num++;
                        if(RA3_num==1)
                        RA2=0;
                        else
                        if(RA3_num==2)
                        {
                        RA2=1;
                        RA3_num=0;
                        }
               
        }

     if(RA5==1)
        {
                RA5_flag=1;
        }
        if((RA5==0)&&(RA5_flag==1))
        {
                RA5_flag=0;
                RA5_num++;
                if(RA5_num==1)
                RA4=0;
                else
                if(RA5_num==2)
                {
                RA4=1;
                RA5_num=0;
                }
        }
     if(RB2==1)
        {
                RB2_flag=1;
        }
        if((RB2==0)&&(RB2_flag==1))
        {
                RB2_flag=0;
                RB2_num++;
                if(RB2_num==1)
                RB3=0;
                else
                if(RB2_num==2)
                {
                RB3=1;
                RB2_num=0;
                }
        }
     if(RB4==1)
        {
                RB4_flag=1;
        }
        if((RB4==0)&&(RB4_flag==1))
        {
                RB4_flag=0;
                RB4_num++;
                if(RB4_num==1)
                RB5=0;
                else
                if(RB4_num==2)
                {
                RB5=1;
                RB4_num=0;
                }
        }  
        if(RC5==1)
        {
                RC5_flag=1;
        }
        if((RC5==0)&&(RC5_flag==1))
        {
                RC5_flag=0;
                RC5_num++;
                if(RC5_num==1)
                RC4=0;
                else
                if(RC5_num==2)
                {
                RC4=1;
                RC5_num=0;
                }
        }

没有人回复一下么

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top