求大神指点一下按键程序

2019-07-18 08:23发布

前一段时间 写了一个按键程序,单片机是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;
                }
        }



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
smile
1楼-- · 2019-07-18 08:28
没有人回复一下么

一周热门 更多>