串口设置为方式0,要在4个数码管上显示信息(从右至左),只须通过51单片机串口依次发送4个信息的字段码。在下面程序中,编程实现在4个数码管上滚动显示16个十六进制符号0~F。 ORG 0000H ;显示缓冲区为50H~53H单元 LJMP MAIN ORG 0100H MAIN: MOV SCON,#00H ;串口初始化方式0 START:MOV R3,#0 ;需显示的字符 K1: MOV R4,#4 ;改变显示缓冲区值 MOV R1,#50H MOV A,R3 K0: MOV @R1,A INC R1 DJNZ R4,K0 ACALL DISPLAY ;调用串口发送显示程序 ACALL DELAY ;延时 INC R3 CJNE R3,#16,K1 SJMP START ;延时子程序 DELAY:MOV R7,#05 L2: MOV R6,#0FFH L1: MOV R5,#0FFH L0: DJNZ R5,L0 DJNZ R6,L1 DJNZ R7,L2 RET DISPLAY:MOV R0,#50H ;51单片机串口发送显示程序 MOV R2,#4 L3: MOV A,@R0 INC R0 ADD A,#0AH ;调整距离段选码表首的偏移量 MOVC A,@A+PC ;查表取得字段码 MOV SBUF,A ;51单片机串口发送 L4: JNB TI,L4 ;等待发送 CLR TI DJNZ R2,L3 RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH ; 0~F共阳极数码管字段码 END 请参考上述内容回答下列问题: 51单片机串行口扩展并行输出口连接一个七段数码管。试编程实现数码管循环显示数字0-9,每个数字显示时间为1s(用定时器实现)。
时间: 2024-01-19 18:04:36 浏览: 97
51单片机使用8个数码管中的一个数码管,循环显示数字0~9,到9回0,数字变化的时间间隔为1s。
5星 · 资源好评率100%
以下是实现该功能的基本代码:
```
ORG 0000H
MOV TMOD, #01H ; 设置定时器0为模式1
MOV TH0, #3CH ; 定时1ms
MOV TL0, #0B0H
SETB TR0 ; 启动定时器0
MOV P1, #0 ; 初始化P1口为低电平
LJMP MAIN
ORG 000BH
CLR TR0 ; 关闭定时器0
MOV TH0, #3CH ; 重新设置定时器0初值
MOV TL0, #0B0H
SETB TR0 ; 启动定时器0
MOV A, P1 ; 读取P1口状态
CPL A ; 取反
MOV P1, A ; 刷新P1口输出
RET
ORG 0100H
MAIN:
MOV P1, #00H ; 初始化P1口为低电平
MOV SCON, #50H ; 串口方式1,波特率9600
MOV TH1, #FDH ; 波特率9600,定时器初值
MOV TL1, #FDH
SETB TR1 ; 启动定时器1
LOOP:
MOV R2, #10 ; 显示10个数字
MOV R1, #0 ; 数字初始化为0
DISPLAY:
MOV A, R1 ; 将数字转为段选码
ANL A, #0FH
ADD A, #TAB
MOV R0, A ; 保存段选码
CALL SEND ; 发送段选码
MOV A, #100B ; 设置P1口为高电平
MOV P1, A
CALL DELAY ; 延时1s
MOV A, #000B ; 设置P1口为低电平
MOV P1, A
INC R1 ; 数字加1
DJNZ R2, DISPLAY ; 循环显示10个数字
SJMP LOOP ; 无限循环
SEND:
MOV SBUF, R0 ; 发送段选码
WAIT:
JNB TI, WAIT ; 等待发送完毕
CLR TI
RET
DELAY:
MOV R7, #39 ; 延时1s
MOV R6, #200
MOV R5, #200
DELAY_LOOP:
DJNZ R5, DELAY_LOOP
DJNZ R6, DELAY_LOOP
DJNZ R7, DELAY_LOOP
RET
TAB:
DB 3FH ; 0的段选码
DB 06H ; 1的段选码
DB 5BH ; 2的段选码
DB 4FH ; 3的段选码
DB 66H ; 4的段选码
DB 6DH ; 5的段选码
DB 7DH ; 6的段选码
DB 07H ; 7的段选码
DB 7FH ; 8的段选码
DB 6FH ; 9的段选码
END
```
代码的思路是利用定时器0定时1s,定时完毕后改变P1口状态,从而控制七段数码管的亮灭。同时,通过调用SEND函数发送段选码,实现数字在七段数码管上的显示。循环显示0-9数字的过程在主程序LOOP中实现。
阅读全文