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