单片机数码管显示汇编语言



伟福实验箱用,其他实验设备请修改相应段位口地址
OUTBIT EQU 08002h ; 位控制口
OUTSEG EQU 08004h ; 段控制口
LEDBuf EQU 60h ; 显示缓冲
FLAG BIT 20H.0
;连线方法,cs0地址片选接键盘左上角的片选口key\led\那个孔
;This program is edited By 天龙(电0901-4)石家庄铁道大学电气与电子工程学院
;P1.0接一个发光管,P1.1接P3.5计数器口P3.2和P3.3接两个按键脉冲
ORG 0000h
AJMP START
ORG 0003H
AJMP INTO0
ORG 000BH
LJMP TIME0
ORG 0013H
LJMP INTO1
ORG 001BH
RETI
START: MOV TMOD,#51H
MOV TH0, #3CH ;前期工作 少一不可
MOV TL0, #0B0H
SETB IT0
SETB IT1 ;省略了TH1和TL1的赋值要懂的
SETB EX0
SETB EX1 ;开各个中断
SETB ET0
SETB ET1
SETB TR1
SETB TR0
SETB EA
MOV R3,#10 ;定时1s用
DispAgain: ACALL transform ;放入数据并转换为可显示的段码
ACALL Display ;显示
AJMP DispAgain ;主要循环体
SJMP $
;——————————放入数据及转换程序——————————
transform: JB FLAG,putpulse ;FLAG为1跳往脉冲计数程序
MOV 60H,#0 ;Flag为0时放学号
MOV 61H,#9
MOV 62H,#2
MOV 63H,#4
MOV 64H,#4
MOV 65H,#9
AJMP trans ;放完学号跳到转换显示码
putpulse: MOV A,TL1 ;放脉冲个数
MOV B,#100 ;百位数字
DIV AB
MOV 60H,A
MOV A,#10 ;十位数字
XCH A,B
DIV AB
MOV 61H,A
MOV 62H,B ;最后B中是个位数字
trans:MOV R5,#6 ;转换成显示码并存入缓存区
MOV R0,#LEDBuf
ts:MOV A,@R0
MOV DPTR,#LEDMap
MOVC A,@A+DPTR
MOV @R0,A
INC R0
DJNZ R5,ts
RET
;——————————中断服务程序————————————————————
TIME0: MOV TH0,#3CH ;脉冲发生器
MOV TL0,#0B0H
DJNZ R3,BYETIME
CPL p1.0 ;取反两口实现方波
CPL p1.1
MOV R3,#10
BYETIME: RETI

INTO0: CPL FLAG ;两个按键的定义
RETI ;按键有机械抖动,可能按一下不行,要多次
INTO1: CPL TR0
JB TR0,JJ1
CLR P1.0 ;关掉两个口
CLR P1.1
JJ1: RETI
;————————————显示子程序————————————————

———
Display: MOV R0, #LEDBuf ;读数据首地址
MOV R1, #6 ;共6个八段管循环显示
MOV R2, #00100000b ;从左边开始显示(1亮0灭)
Loop: MOV DPTR, #OUTBIT ;关所有八段管消除重影(不该亮的段微微发光)
MOV A, #0
MOVX @DPTR, A ;可忽略这两个关断语句,但是效果上....
MOV A, @R0
MOV DPTR, #OUTSEG ;将段码输出
MOVX @DPTR,A
MOV DPTR, #OUTBIT ;选通要亮的管
MOV A, R2
MOVX @DPTR, A ;显示一位八段管
ACAll Delay
MOV A, R2 ;右移后显示下一位
RR A
MOV R2, A
INC R0 ;数据地址也加一,显示下一个数
DJNZ R1, Loop
MOV DPTR, #OUTBIT
MOV A, #0
MOVX @DPTR, A ;关所有八段管消除末尾管高亮,其他微亮现象
RET
;————————————————————————————————————
Delay: MOV R7, #2
DJNZ R7,$ ;延时子程序 (视觉残留现象)
RET

;————————————————————————————————————
LEDMAP: ; 八段管显示码
db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h
db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h

相关文档
最新文档