📄 7seg.asm
字号:
;///////////////////////////////////////////
;本程序源代码由单片机培训网提供.
;单片机培训网,让更多人学习单片机更容易.
;第一网址----www.mcuedu.com
;第二网址----http://51_train.nease.net
;创办人------刘永忠
;热线电话----(0755)27529998
;email-------aa815@163.com
;本程序实现七段码动态显示功能
;///////////////////////////////////////////
org 0000h
ajmp main
org 0030h
main:
mov dptr,#tab ;将表头位置送入DPTR
mov 30h,#00h ;将30H个位显示缓冲单元清零
mov 31h,#00h ;将31H十位显示缓冲单元清零
mov 32h,#00h ;将32H百位显示缓冲单元清零
mov 33h,#00h ;将33H千位显示缓冲单元清零
loop:
mov r4,#5 ;r4作为软件计数器
tt1:
lcall display ;调用显示程序
djnz r4,tt1 ;r4减一后不为零,返回tt1
lcall update ;调用刷新显示子程序
ajmp loop ;跳回loop,继续循环显示.
display: mov p2,#0ffh ;将P2口置高电平
mov r7,#100 ;软件计数器赋值
dd1:
mov a,30h ;将显示缓冲区30H中的值送入ACC
movc a,@a+dptr ;查表取要显示的数并把查表的结果送入ACC
mov p0,a ;将要显示的数送入P0口
clr p2.0 ;开个位显示单元
lcall delay100us ;延时100US
setb p2.0 ;关个位显示单
mov a,31h ;将显示缓冲区别31H中的值送入A
movc a,@a+dptr ;查表取要显示的数并把查表的结果送入ACC
mov p0,a ;将要显示的数送入P0口
clr p2.1 ;开十位显示单元
lcall delay100us ;延时100US
setb p2.1 ;关十位显示单元
mov a,32h ;将显示缓冲区32H中的值送入ACC
movc a,@a+dptr ;查表取要显示的数并把查表的结果送入ACC
mov p0,a ;将要显示的数送入P0口
clr p2.2 ;开百位显示单元
lcall delay100us ;延时100US
setb p2.2 ;关百位显示单元
mov a,33h ;将显示缓冲区33H中的值送入ACC
movc a,@a+dptr ;查表取要显示的数并把查表的结果送入ACC
mov p0,a ;将要显示的数送入P0口
clr p2.3 ;开千位显示单元
lcall delay100us ;延时100US
setb p2.3 ;关千位显示单元
djnz r7,dd1 ;R7不等于0返回至DD1处
ret ;R7等于0子程序返回
update: ;刷新显示子程序
inc 30h ;个位显示缓冲单元加一
mov a,30h
cjne a,#10,exit ;还没加到十,退出
mov 30h,#00h ;加到十了,个位清零
inc 31h ;十位显示缓冲单元加一
mov a,31h
cjne a,#10,exit ;还没加到十,退出
mov 31h,#00h ;加到十了,十位清零
inc 32h ;百位显示缓冲单元加一
mov a,32h
cjne a,#10,exit ;还没加到十,退出
mov 32h,#00h ;加到十了,百位清零
inc 33h ;千位显示缓冲单元加一
mov a,33h
cjne a,#10,exit ;还没加到十,退出
mov 33h,#00h ;加到十了,千位清零
exit:
ret ;刷新显示子程序返回
delay100us:
mov r5,#50
djnz r5,$
ret
delay10ms:
mov r6,#100
tt2:
mov r5,#50
djnz r5,$
djnz r6,tt2
ret
tab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h,86h,8eh
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -