ORG 0000HLJMP MAINORG 0030HMAIN:MOV DPTR,#TAB MOV R4,#00H CLR A LCALL DISPADDLOOP: LCALL CK1 LCALL DISPADD SJMP LOOPCK1: JB P3.4,CK1 LCALL DS1MS JB P3.4,CK1 RETD1: MOV R4,#00HDISPADD: MOV A,R4 MOVC A,@ A+DPTR JZ D1 MOV P0,A SETB P2.6 CLR P2.6 MOV P0,#0FEH SETB P2.7 CLR P2.7 INC R4 LCALL DS1MSCK2: JNB P3.4,CK2 LCALL DS1MS JNB P3.4,CK2 RETDS1MS: MOV r1,#2DS1LO: MOV r2,#20DS2LO: MOV r3,#200 DJNZ r3,$ DJNZ r2,DS2LO DJNZ r1,DS1LO RETTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00HEND
原有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
END
...1控制数码管上显示的数字加1 KEY2控制数码管上显示数字减1?_百度...
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 ...
51单片机按键加减清零汇编语言编程
键计数加1JMP KEY_P_ENDLOOP2:DEC K_COUNT ;键计数减1JMP KEY_
51单片机为基础用汇编语言编写用数码管显示一个同时有"加""减""乘...
KEYI:ACALL KS1 CJNE A,#0F0H,LK1 ACALL DIR AJMP KEYI LK1:ACALL DIR ACALL DIR ACALL KS1 CJNE A, #0F0H,LK2 ACALL DIR AJMP KEYI LK2: ACALL KS1 MOV R2,A ORL A,#0FH MOV P0,A ANL A,#0FH ADD A,R2 ;键特征值 CJNE A,#0EEH,JZHI1 MOV A,#00H PUSH ACC JZHI...
51单片机怎么让数码管显示学号?用汇编语言
数码管显示方式为动态扫描方式,当P0口送第一个数0的码型到锁存器时,P2送位选地址01H,即Y0=0,只有第一个数码管亮,显示0,其他数码管不显示。当P0口送第二个数1的码型到锁存器时,P2送位选地址02H,即Y1=0,只有第二个数码管亮,显示1,其他数码管不显示。即每次只有一个数码管点亮,8个...
51单片机按键控制数码管?
TMOD = 0x20; \/\/TMOD: timer 1, mode 2, 8-bit reload PCON = 0x80; \/\/ 数据位8、停止位1。效验位无 (11.0592M)TH1 = 0xF4; \/\/TH1: reload value for 2400@11.0592MHz TR1 = 1; \/\/启动定时器1 ES = 1; \/\/允许串口中断位 EA = 1; \/\/允许总中断位 c=...
用完整的汇编语言编写使数码管循环显示0,1,2,3,4,5,6,7,8,9的程序
程序如下:\/ 用P0口输出到数码管显示0-9 编写:jzy23 交流:paulucy@126.com \/ include<reg52.h> define uint unsigned int define uchar unsigned char \/ 共阴数码管显示码 \/ uchar code display[10]= { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };\/ 延时函数 功...
51单片机汇编语言按键控制数码管加1加到999
思路是对的,细节描述有问题,算法描述要严谨。为什么要99时清零啊,这可能就是错误的地方了。系统初始化时,清除使用到的寄存器!!然后,当需要加1时做如下动作 寄存器a = a+1 如果寄存器a == 100,{寄存器b=b+1;寄存器a = 0} 这样就可以了,b中的1代表100,a中的1就是1 ...
在51单片机上用C语言实现电子琴功能,但同时数码管可以显示简谱,怎么...
1,数据管显示就没什么了,找几个简单的数码管驱动程序改改就可以了,一般都是先选中数码管,然后设置值,就可以显示了,不过需要注意刷新,10ms刷新一个应该就可以了,刷新频率比较低的话会闪闪的,这个你应该明白。2,蜂鸣器发do音,这个硬件实现我就不知道了,也许有硬件可以 编码控制自动生成对应...
关于STC51单片机按键影响数码管亮度的问题
你的程序是在等待按键释放吧,不再去执行显示子程序了,所以,才出现这种情况。你可以在等待按键释放的同时调用显示子程序。假设按键定义为ins1,显示子程序是display(),可以这么写:if(ins1==0){ 想要写的语句;while(ins1==0) display(); \/\/等待按键释放时调用显示子程序 } ...
关于STC51单片机按键影响数码管亮度的问题
你的程序是在等待按键释放吧,不再去执行显示子程序了,所以,才出现这种情况。你可以在等待按键释放的同时调用显示子程序。假设按键定义为ins1,显示子程序是display(),可以这么写:if(ins1==0){ 想要写的语句;while(ins1==0) display(); \/\/等待按键释放时调用显示子程序 } ...