单片机数码管动态显示程序实验、数码管显示一般分为静态显示和动态显示两种驱动方式,静态显示多占用口线。 本文介绍了如何实现数码管的动态显示,数码管的动态显示是单片机外部指令输出的重要途径,包括数码管和数码管的工作原理、数码管的显示方法、数码管显示的抗干扰设计等该例基于系统硬件,设计了软件查询程序、软件延时程序(抗干扰),大致阐述了数码管动态显示的工作原理和读取方式。
s1 bit p0.0; 数字代码的位定义
s2 bit p0.1
s3 bit p0.2
s4 bit p0.3
s5 bit p0.4
s6 bit p0.5
s7 bit p0.6
s8 bit p0.7
LED_data equ p2; 数字代码的数据定义
org 00h; 程序开始
jmp main; 主程序的开始
org 030h; 主程序从30H开始
main: MOV sp,#30h; 堆栈设置
lcall rest; 调用初始化程序
lcall pro_8led; 调用数码管显示程序
jmp main; 返回
; ******初始化程序**************
rest:MOV a,#00h; 清除寄存器
MVB,#00h; 清除寄存器
MOV p0,#0; 禁止显示数字代码
MOV p2,#255;
mv P1,0f FH; 禁止LED显示
clr beep; 禁止蜂鸣器
ret; 返回
; ********数码管显示程序* * * * * * * * * * * *
pro_8led:
MOV b,#32; 一共显示32个数字
clr psw.3; 复位寄存器组
setb psw.4;
MOV r0,#00h; 数据显示从0开始
MOV r1,#01h; 代码管从第一个开始
loop:MOV p0,r1; 点亮当前的数字代码
MOV a,r0; 准备最初的数据
MOV dptr,#tab_nu; 获取页眉
MOVc a,@a dptr; 得到最初的数据
MOV led_data,a; 输出到显示数据端口
呼叫延迟; 500 ms的延迟
呼叫延迟; 1 s延迟
inc r0; 准备下一个数据
MOV a、r1; 准备以下数码管
rlc a; 安装以下数码管
JC1; 8位全部显示,迁移
MOV r1,a; 否则,设置下一位
djnz b,loop; 由于没有显示32个数,所以返回显示
ret; 否则回到主程序
c1: MOV r1,#1; 显示8位后,重新开始循环
clr c; 显示位的设定
djnz b,loop; 32位显示结束后返回重新显示
ret; 否则回到主程序
; ******数码管是* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; *软件延迟500 ms * * * * * * * * * * * * * * * * * * * * * * * * * * * *软件延迟
delay :推送PSW; 保存原始寄存器的内容
clr psw.3;
clr psw.4; 设定新的寄存器组
MOV r0,#2; 延迟参数1
MOV r1,#250; 延迟参数2
MOV r2,#2; 延迟参数3
dl1:djnz r0、dl1; 延迟周期1
MOV r0,#250;
dl2:djnz r1、dl1; 延迟周期2
MOV r0,#240;
MOV r1,#248;
dl3:djnz r2、dl1; 延迟周期3
nop; 定时精度调整
pop psw; 恢复原始寄存器
ret; 返回
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
; 这是一个带小数点的数字比不带小数点的数字大16的数字表示表
; 例如0显示代码为0; 那么,0 .的显示代码是16。这样类推
tab_nu:
db 0c0h、0f9h、0a4h、0b0h、99h、92h、82h、0f8h; 数字0-7没有小数点代码
db 80h、90h、88h、83h、0c6h、0a1h、86h、8eh; 数字8-f没有小数点代码
db 40h、79h、24h、30h、19h、12h、02h、78h; 带数字0-7小数点编码的db 00h、10h、08h、03h、46h、21h、06h、0eh; 数字8-f带小数点的代码