用的51单片机,附电路图。
按键KEY与数码管COM端是复用的。
现在可以知道,把数码管的数据输出端设置为高阻输入。
按键即(COM)端,设置为标准IO口,可以检测到按键输入。
数码管显示时,
数码管的数据输出端设置为推挽输出。
按键即(COM)端,同时要设置为推挽才可以显示正常,
数码管显示用的是定时器中断显示。(6ms)。
按键在主循环,扫描输入(100ms)扫描1次。
用了按键程序,LED显示不正常。
用了LED显示程序,按键程序不正常。
不知道为什么?有没有人指一下点?
KEY_COM.jpg (320.99 KB, 下载次数: 1)
下载附件
按键数码管复用电路
2013-5-15 08:40 上传
{
P2IO &=0xe1; //*1110 0001*//
delay(100);
key_buf=0; //清按键值
P1&=0x02; //关显示
key_com=0; //开启按键公共端
delay(100);
if(key_2==0){key_buf|=0x01;} //读按键1
if(key_3==0){key_buf|=0x02;} //读按键2
if(key_4==0){key_buf|=0x04;} //读按键3
if(key_5==0){key_buf|=0x08;} //读按键4
P2IO |=0x1e; //*0001 1110*//
key_com=1; //释放按键公共端
if(key_buf==0) //无键
{
keyup_bit=0; //按键释放标志
flash_not_bit=0;
key_cnt_short=0; //清去抖计数
key_cnt_long=0; //清长按计数
}
else //有键处理
{
if(keyup_bit) //按键按下标志
{
if(++key_cnt_long>=200) //长按 40->200
{
key_cnt_long-=50; //4Hz 15->50
flash_not_bit=1; //快速调节不闪烁
key_pro(); //按键处理
}
else
{
return;
}
}
else //
{
if(++key_cnt_short>=20) //去抖 5->20
{
key_cnt_short=0;
keyup_bit=1; //短按
short_buz(1,short_buz_time);
key_pro();
}
}
}
}
一周热门 更多>