① 51单片机,1602动态显示时钟,有独立按键(3个k1,k2,k3)分别控制选择,加1,减一
你好,
我这又一个参考程序,是用郭天祥的TX-1C开发板写的,有3个按键,调节光标,时间加,时间减。引脚方便可以根据自己的开发板更改,其他程序内容不变。
希望我的回答能帮助到你。
② 51单片机如何用定时器中断,实现按键计数加减,两位数码管,C语言,谢谢
用一个单元,存放计数值,每隔1秒加一,然后进行十进制调整,之后向P2输出即可。
③ 单片机按键加一、减一
利用外部中断实现按键按一下数码管数字加1,实现00-99的循环,另一个按键实现清零,不管数码管数字是多少,该按键按下数码管显示00
④ 单片机中定义了开关和按钮,三个按钮可以分别加一、减一、清零,
你有两个外部中断
方案一:
你可以用eint0做开始计数和停止计数的功能,用一个标志位区分。
把eint1留出来做清零功能。
方案二:
eint1中再加一个功能就是清零,这时候可以检测eint1按键的时间。实例代码:
void
ex1()
interrupt
2
//外部中断1
{
delay_ms();
//延时一段时间
if(p1^2==0)
//检测外部中断引脚的电平,我不确定是哪个引脚了,你看看电路图。
{
//清零
}
else
{
tr0=0;
//停止计数
}
}
⑤ 汇编语言51单片机怎么实现用KEY 1控制数码管上显示的数字加1 KEY2控制数码管上显示数字减1
原有key1为P3.4,添加个key2键为P3.5;
1、按你显示程序的逻辑,对TAB修改如下:
TAB:DB 00H,3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H
即数据的首尾为0(这是个标记而已),中间才是七段码 0--F 的显示数据;
2、对CK1、CK2键盘按下及松开程序做了修改;
3、显示程序也进行了修改,唯独延时程序不用修改;
代码如下:
MAIN:
MOV DPTR,#TAB
MOV R4,#00H
MOV R5,#01H
CLR A
LCALL DISPLAY
LOOP:
LCALL KEYDOWN
LCALL DISPLAY
SJMP LOOP
KEYDOWN:
JB P3.4,CK11 ;key1没有按下则转到key2
LCALL DS1MS ;P3.4=0表示Key1按下
JB P3.4,CK11 ;key1还不能松开
MOV R5,#01H
INC R4;key1按下为加
RET
CK11:
JB P3.5,KEYDOWN ;key2没有按下则转到key1
LCALL DS1MS ;P3.5=0表示Key2按下
JB P3.4,KEYDOWN ;key2还不能松开
MOV R5,#10H
DEC R4;key2按下为减
RET
D1::
MOV R4,R5
DISPLAY:
MOV A,R4
MOVC A,@A+DPTR
JZ D1 //累加器(A)=0转
MOV P0,A
SETB P2.6
CLR P2.6
MOV P0,#0FEH
SETB P2.7
CLR P2.7
LCALL DS1MS ;延时
LCALL KEYUP
RET
KEYUP:
JNB P3.4,KEYUP ;P3.4=0转
JNB P3.5,KEYUP ;等待松开按键
LCALL DS1MS
JNB P3.4,KEYUP
JNB P3.5,KEYUP
RET
TAB:DB 00H,3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H