📄 text2.asm
字号:
;功能:
;常数定义
DCount EQU 6 ;数码管总数
PORT_S EQU P1 ;段选口
PORT_B EQU P2 ;位选口
DFrstAdd EQU 30H ;显示首地址
;资源定义:
DisBuf0 EQU 30H ;0号数码管显存
DisBuf1 EQU 31H ;1号数码管显存
DisBuf2 EQU 32H ;2号数码管显存
DisBuf3 EQU 33H ;3号数码管显存
DisBuf4 EQU 34H ;4号数码管显存
DisBuf5 EQU 35H ;5号数码管显存
Wcnt EQU 40H ;显示位计数器
ORG 0000H
AJMP MAINT
ORG 000BH
AJMP Timer0
ORG 0023H
AJMP Serial
ORG 0030H
;--------1ms扫描显示输出程序---------
Timer0:
PUSH ACC
PUSH B
PUSH PSW
PUSH DPH
PUSH DPL
MOV TH0,#0F4H ;重置T0计时初值
MOV TL0,#48H
LCALL Display ;显示输出
POP DPL
POP DPH
POP PSW
POP B
POP ACC
RETI
;-----------------------------------------
MAINT:
MOV SCON,#50H ;0101 0000,方式1允许接收
MOV TMOD,#21H ;0010 0000,T1:方式2 定时,T0:方式1定时
MOV TH0,#0F4H ;设置T0计时初值:约3ms
MOV TL0,#48H
MOV TH1,#0E8H ;T1定时计数初值(设置BR)
MOV TL1,#0E8H
SETB ES ;开串行中断
SETB ET0
SETB EA ;开全局中断
SETB TR0
SETB TR1 ;启动T1
MOV R1,#DFrstAdd ;接收数据地址指针初始化
MOV R7,#6 ;接收数据个数为8个
;-----------------------------------------------------
;显示数据初始化
MOV DisBuf0,#10 ;灭显示器
MOV DisBuf1,#10
MOV DisBuf2,#10
MOV DisBuf3,#10
MOV DisBuf4,#10
MOV DisBuf5,#10
MAIN:
ORL PCON,#1 ;CPU睡眠
SJMP MAIN
;--------------------------------------------------------------
DISPLAY:
MOV PORT_S,#0 ;消隐输出
MOV A,Wcnt ;查表读取当前点亮数码管的控制码
MOV DPTR,#DISCTRL
MOVC A,@A+DPTR
MOV PORT_B,A ;控制码送位选口
MOV A,#DFrstAdd ;计算当前点亮数码管的显存地址
ADD A,Wcnt
MOV R0,A ;指针指向当前点亮数码管的显存
MOV A,@R0 ;读显示代码
MOV DPTR,#DISTAB;查表获得其笔型码
MOVC A,@A+DPTR
MOV PORT_S,A ;笔型码送段选口显示输出
INC Wcnt ;显示位置计数加1
MOV A,Wcnt ;超界处理
MOV B,#DCount
DIV AB
MOV Wcnt,B
RET
;--------------------------------------------------------------
;--------------------------------------------------------------
DISCTRL: ;显示位置控制码表
DB 0EFH ;0号数码管显示
DB 0F7H ;1号数码管显示
DB 0FBH ;2号数码管显示
DB 7FH ;3号数码管显示
DB 0BFH ;4号数码管显示
DB 0DFH ;5号数码管显示
;--------------------------------------------------------------
DISTAB:;显示数据码表
DB 3FH ;0的笔型码 代码0
DB 06H ;1的笔型码 代码1
DB 5BH ;2的笔型码 代码2
DB 4FH ;3的笔型码 代码3
DB 66H ;4的笔型码 代码4
DB 6DH ;5的笔型码 代码5
DB 7DH ;6的笔型码 代码6
DB 07H ;7的笔型码 代码7
DB 7FH ;8的笔型码 代码8
DB 6FH ;9的笔型码 代码9
DB 00H ;灭的笔型码 代码10
;--------------------------------------------------------------
;--------------------------------------------------------------
Serial:
JB RI,SB1 ;接收数据引起串行中断则转SB1
CLR TI ;发送数据引起串行中断则清除TI后返回
RETI
SB1:
CLR RI ;清接收中断请求标志
MOV A,SBUF ;所接收数据正确吗(1的个数为偶数?)
JB P,SB3 ;不是,转SB3
MOV SBUF,#0FFH ;是,发送接收数据正确应答
CLR ACC.7 ;清除最高位的校验码
MOV @R1,A ;保存所接收到的数据
DJNZ R7,SB2 ;所数据接收完毕吗?没有则转SB2继续
CLR ES ;完毕,关中断结束
RETI
SB2:
INC R1 ;地址指针下移
RETI
SB3:
MOV SBUF,#0FEH ;发关接收数出错应答
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -