📄 数显温度计.asm
字号:
;本程序为数显温度计
led1 equ 21h
led2 equ 22h
led3 equ 23h
led4 equ 24h
temp equ 25h
ORG 0000H
AJMP MAIN
org 0013h ;中断1入口
ajmp adstar
MAIN:LCALL delay ;延时等待单片机稳定
setb ea ;开中断
setb ex1
setb it1
mov led1,#00h;初始化
mov led2,#00h
mov led3,#00h
mov led4,#00h
mov temp,#00h
mov p2,#00h
start:
setb p2.0
setb p2.2 ;启动ad
clr p2.0
clr p2.2
acall display ;调用显示
ljmp start
adstar:
push acc
push psw
setb p2.1 ;开读取
acall d1ms ;延时
mov a,p0 ;读取ad
clr p2.1;关读取
clr c ;右移乘5得到小数位
rrc a
mov temp,a
clr a
addc a,#00h
mov b,#05
mul ab
mov led1,a
mov a,temp ;判断是否大于20
subb a,#20
anl a,#80h
jz tempup
sjmp tempdown
tempup:
mov a,temp ;大于20时对个位十位置数
subb a,#20
mov b,#10
div ab
mov led2,b
mov b,#10
div ab
mov led3,b
mov led4,#0bh
sjmp adend
tempdown: ;小于20时对个位十位置数
mov b,temp
mov a,#20
subb a,b
mov b,#10
div ab
mov led2,b
mov led3,a
mov led4,#0ah
sjmp adend
adend:
pop acc
pop psw
reti
display:
mov dptr,#numtab ;指定查表启始地址
mov r0,#4
dpl1: mov r1,#250 ;
dplop: mov a,led1 ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
mov p1,a ;送出个位的7段代码
setb p2.5 ;开显示
acall d1ms ;显示162微秒
clr p2.5;关闭显示,防止鬼影
mov a,led2 ;取数
MOVC A,@A+DPTR ;查十位数的7段代码
mov p1,a ;送出的7段代码
setb p1.7
setb p2.4 ;开显示
acall d1ms ;显示162微秒
clr p2.4;关闭显示,防止鬼影
mov a,led3 ;取数
MOVC A,@A+DPTR ;查数的7段代码
mov p1,a ;送出的7段代码
setb p2.6 ;开显示
acall d1ms ;显示162微秒
clr p2.6;关闭显示,防止鬼影
mov a,led4 ;取数
MOVC A,@A+DPTR ;查数的7段代码
mov p1,a ;送出的7段代码
setb p2.7 ;开显示
acall d1ms ;显示162微秒
clr p2.7;关闭显示,防止鬼影
djnz r1,dplop ;循环执行250次
djnz r0,dpl1 ;循环执行250X8=2000次
ret
;(2+2X80)X2=324微秒,延时按6MHZ计算
D1ms: MOV R7,#80
DJNZ R7,$
RET
delay: MOV R4,#2;(占用R4/R5)延时程序,延时2000微秒
D3:MOV R5,#248
DJNZ R5,$
DJNZ R4,D3
RET
numtab: DB 3fh,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH,40H,0h
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -