;此程序为在两个数码管上实现00-99的循环显示
;设置ram DATA_IN
DATA 20H
DATA_OUT DATA 21H
BIT_COUNT
DATA 22H
// HOUR DATA 23H // MINITE DATA 24H // SECOND DATA 25H //
MSECOND DATA 26H
ORG 0000H
LJMP
INIT
ORG 000BH
LJMP
TIME0
ORG 0013H
LJMP KBHIT
;初始化
;接收数据缓冲寄存器 ;发送数据缓冲寄存器
;数据位数寄存器
;定时器0中断入口
ORG INIT: MOV
MOV
DATA MOVX LCALL MOV
LCALL MOV
MOVX // MOV
MOV MOV MOV MOV // MOV // MOV // MOV // MOV MOV
MOV
0030H DPTR,#4000H
;HD7279A的地址
A,#10011111B
;HD7279A初始化CS、CLK、
@DPTR,A
DELAY25MS
;延时后进入工作状态
DATA_OUT,#10100100B
;HD7279A复位指令
SEND
;发送指令
A,#10011111B
;设回CS为高电平
@DPTR,A
R4,#20 ;定时器一个周期内的中断数
R2,#0 R3,#0 R4,#0 R5,#0 MSECOND,#0
SECOND,#0 MINITE,#0
HOUR,#0 ;数字计数器 R6,#0 ;个位寄存器
R7,#0
;十位寄存器
MOV
TMOD,#1
;设置定时器0工作模式为
方式1 // //
;主程序 MOV MOV DIV MOV MOV
AB
R6,B R7,A
;个位放在R6 ;十位放在R7
;下载数据且按方式1
A,R2 B,#10
;把数字转换为2个BCD码
MOV MOV MOV MOV
TH0,#3CH TL0,#0B0H TH0,#0FCH TL0,#18H
;开总中断 ;开定时器0中断
;设置定时器定时值
;设置定时器定时值
SETB SETB
EA ET0
SETB EX1 SETB
TR0
;开始计时
MAIN:
MOV DATA_OUT,#11001000B
译码,找到了第1个数码管
位
LCALL LCALL MOV
SEND DELAY25
;T4,指令与数据时间间隔
;指令的数据部分,显示个
DATA_OUT,R1
LCALL MOV
SEND
A,#10011111B
MOVX
MOV
@DPTR,A
DATA_OUT,#11001001B
;下载数据且按方式1
译码,找到了第2个数码管 位
MOV
DATA_OUT,#11001010B
;下载数据且按方式1译码,
LCALL MOV
SEND
A,#10011111B
LCALL LCALL MOV
SEND DELAY25
;T4,指令与数据时间间隔
;指令的数据部分,显示个
DATA_OUT,R2
MOVX @DPTR,A
找到了第3个数码管
LCALL LCALL MOV
SEND DELAY25
;T4,指令与数据时间间隔
;指令的数据部分,显示个
DATA_OUT,R3
相关推荐: