1. 51单片机4个数码管按键加一
51单片机p3.4口对应的是定时器0按键。
2. 51单片机独立按键控制一个数码管
这是四位数码管从右从左流动显示,像滚动字幕一样的。用不着矩阵按键哪。其实程序很简单,没那么复杂。程序如下#include
3. 51单片机独立按键控制数码管加减
假设第一个文本框变量名为text1,第二个文本框变量名为text2
按钮A的AS为:
on (release) {
_root.text1++
}
按钮B的AS为:
on (release) {
_root.text2--
}
注意:那两个动态文本框必须预先填入数字,否则出错。
4. 51单片机怎么接数码管
KEYVAL EQU 30H
KEYTM EQU 31H
KEYSCAN EQU 32H
DAT EQU 33H
SCANLED EQU 39H
CLK EQU 77H
SEC EQU 78H
MIN EQU 79H
HOUR EQU 7AH
PAUSE BIT 00H
DOT BIT 01H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR ;50ms定时
ORG 001BH
LJMP T1ISR ;扫描显示
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#11H
MOV TH0,#03CH
MOV TL0,#0B0H
MOV TH1,#0ECH
MOV TL1,#078H
MOV KEYVAL,#0
MOV SCANLED,#0
MOV 33H,#10H
MOV 34H,#10H
MOV 35H,#10H
MOV 36H,#10H
MOV 37H,#10H
MOV 38H,#10H
MOV SEC,#0
MOV MIN,#0
MOV HOUR,#0
MOV CLK,#0
CLR PAUSE
SETB EA
SETB ET1
SETB TR1
LOOP:
LCALL KEYSEL
MOV A,KEYVAL
CJNE A,#0FFH,LOOP1
SJMP LOOP
LOOP1:
CJNE A,#10,LOOP2 ;“ON”启动
SETB TR0
SETB ET0
SETB PAUSE
SJMP LOOP
LOOP2:
CJNE A,#11,LOOP3 ;“=”清零
MOV SEC,#0
MOV MIN,#0
MOV HOUR,#0
LCALL DISCHG
SJMP LOOP
LOOP3:
CJNE A,#15,LOOP4 ;“+”暂停
CLR TR0
CLR ET0
CLR PAUSE
SJMP LOOP
LOOP4:
CJNE A,#14,LOOP5 ;“-”清显示暂停
MOV 33H,#10H
MOV 34H,
5. 51单片机4个独立按键接线图
主程序大致是这样的 flag=0;
//记录按键次数 While(1) { if(key==0){delayms(20);
if(key==0)flag++;
}//按键检测 if(flag==3)flag=0; if(flag==0){正向流水} else if(flag==1){反向流水} else {间隔流水} }存在问题,由于流水灯执行时间较长,因此对按键响应缓慢,可以在流水灯之间加入按键检测语句,当检测到按键按下时,用break语句退出当前循环
6. 51单片机按键加一
识别长按,先要确定一个时间,超过这个时间为长按,否则即为短按。 当按一下键后,开始计时,同时判断确定时间到否?到了,执行长按的程序,等待按键释放。 在判断时间的时候,如果按键释放了,说明未到长按的时间,执行短按的程序。 或者,按下时开始计时,等待按键释放,释放后,停止计时,根据计时的时间来判断是长按还是短按。
7. 利用51单片机设计四个独立按键
一般情况下,独立按键有两个引脚,其中一个通过上拉电阻接到单片机的I/O端口,另外一端接地。也就是说,平时按键没有动作的时候,输出的是高电平,如果有按下动作发生,则输出的是低电平。
按键抖动
我们一般只要扫描跟按键引脚相连的I/O端口,如果发现有低电平产生,则判定该按键处于按下状态。有些时候,电路或者外围有电磁干扰,也会使单片机的I/O端口产生低电平,这种干扰信号会让单片机误认为是按键动作。所以,在扫描按键的时候应该做去抖动处理,把干扰信号过滤掉,从而获得准确的按键状态信号。
每次我们按下的时候,会输出低电平,但有可能是外界干扰;需要延时一段时间,之后再判断是不是低电平,如果是,则是按下;如果不是,则是外干扰。
按键一端与IO口连接,另外一端接地。通过控制IO口输出高电平即可检测
按键是否按下,当按下时IO口会被拉低,松开后IO口回到高电平。
独立按键S2接口为:P3^0=0;//代表按下,反之为高电平1则为没有按下(s3,s4接口以此类推)
8. 单片机按键控制一个数码管
都是逐个点亮,只不过流水灯间隔时间慢一点,数码管间隔时间快一点,当后者间隔时间小于0.1s时(实际上最好小于0.01s),由于视觉暂留效应,人类就觉察不到数码管逐个点亮,以为几个数字是同时显示的,这就是数码管的动态显示。
值得注意的是,流水灯显示,只需占用单片机一个并行口,而数码管显示,需占用单片机两个并行口,其中一个口用来给数码管提供段码(即显示0-9哪个数字),另一个口用来提供位码(即显示个位、十位、百位……哪位数字),当然,如果用锁存器的话,也可以只用一个并行口。
另外,单片机的液晶屏和LED屏显示,也和数码管动态显示一样,是逐个显示的,同样因为时间间隔短(小于视觉暂留效应时间),速度快,所以看起来画面完整,动作流畅。
当然,数码管动态显示以及液晶屏和LED屏显示,在逐个点亮切换的瞬间,还会产生频闪现象,让人很不舒服,所以和流水灯无缝切换不同,数码管动态显示以及液晶屏和LED屏显示,逐个点亮的切换过程中,还要插入一个短暂的黑屏时间(即全部不工作),以消除频闪效应。