用的51单片机,附电路图。
按键KEY与数码管COM端是复用的。
现在可以知道,把数码管的数据输出端设置为高阻输入。
按键即(COM)端,设置为标准IO口,可以检测到按键输入。
数码管显示时,
数码管的数据输出端设置为推挽输出。
按键即(COM)端,同时要设置为推挽才可以显示正常,
数码管显示用的是定时器中断显示。(6ms)。
按键在主循环,扫描输入(100ms)扫描1次。
用了按键程序,LED显示不正常。
用了LED显示程序,按键程序不正常。
不知道为什么?有没有人指一下点?
KEY_COM.jpg (320.99 KB, 下载次数: 1)
下载附件
按键数码管复用电路
2013-5-15 08:40 上传
你的是共阴数码管,不需要设置成推挽输出,程序里也就没这么多PxM0,PxM1的操作了。
我试过,数码管驱动和数据端必须设置为推挽输出,才可以点亮。
我晶振是24MHZ的
数据端是要推挽的,因为你要用他的拉电流,COM就不用了吧,因为你只用他的灌电流。
24M是要加延时读取IO的,在PDF里面有,我用的6M的,似乎没有用过延时读取,不过我不是一次读取的,而是分几次的,而且我读取时往往在之前先做点别的什么,这样就不要专门的去延时了。
硬件不用改,软件很多办法可以用的,仔细琢磨一下吧。
还有,再重复一下,要仔细看PDF文件,尽管那个是有点乱。
这样是可以点亮数码管,也可以不加延时就可以检测到按键输入。
但电路中按键加了一个5.1K的下拉电阻,按键的时候,对应的数码管显示会闪烁。
数码显示正常,按键按下,数码管无任何闪烁,鬼影。
如果采用其他方式,比如数码管数据输出端采用推挽,数码管公共端采用标准I0模式,数码管可以正常显示,但是长按键时,有鬼影(即可以看到对应按键按下的数码管有低亮现象)。
程序流程如下:
按键扫描的时候数码管数据端采用高阻方式。
数码管公共端,即按键输入端采用标准IO方式。置按键电平为高。
然后延时1us.
再读取低电平,判断是否有键按下。
LED扫描的时候,数码管数据端与公共端都设置为推挽输出。
数码管扫描5MS扫描一次,
扫描扫描40MS扫描一次。
while ( 1 )
{
WDT_action();//喂狗
if ( g_time_5MS_Fg )//5ms数码管显示
{
g_time_5MS_Fg = 0;
g_key_scan_count++;
Display_Led();//
if ( g_key_scan_count >=8 )//40Ms扫描一次按键(小于40MS,LED显示会出现闪烁,估计是是高阻到推挽输出有延迟,或者从标准IO到推挽有延迟。)
{
g_key_scan_count = 0;
key = Get_Key ( ); //这里要连续扫描两次才能输出键值
}
}
}
谢谢大家。
一周热门 更多>