51单片机数码管显示程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
动 态 显 示 参 考 程 序 5: 位 段 驱 动 码 表
;-------------------------------------;数码管位驱动代码表 DISBITTAB: DB 01111111B ;位1 DB 10111111B ;位2 DB 11011111B ;位3 DB 11101111B ;位4 DB 11110111B ;位5 DB 11111011B ;位6 ;-------------------------------------;共阳极数码管段驱动代码表 LEDTAB: DB 0C0H ;0 00 DB 0F9H ;1 01 DB 0A4H ;2 02 DB 0B0H ;3 03 DB 99H ;4 04 DB 92H ;5 05 DB 82H ;6 06 DB 0F8H ;7 07 DB 80H ;8 08 DB 90H ;9 09 DB 0FFH ;空 10 ;--------------------------------------
动态显示参考程序2:主程序
ORG 0000H LJMP START ORG 000BH LJMP T0SERV ;T0中断入口 ORG 0030H START: MOV SP,#50H ;初始化堆栈 LCALL INIT ;初始化 LOOP: MOV DISBUF,#1 MOV DISBUF+1,#2 MOV DISBUF+2,#3 MOV DISBUF+3,#4+80H;显示小数点 MOV DISBUF+4,#5 MOV DISBUF+5,#6 AJMP LOOP ;---------------初始化子程序----------------INIT: MOV R0,#2 ;清理内部RAM CLR A INIT1: MOV @R0,A INC R0 CJNE R0,#50H,INIT1 ;初始化定时器T0 ;f=11.0592MHz,2.5ms定时 MOV TMOD,#01H ;模式1 MOV TL0,#05H MOV TH0,#0F7H SETB TR0 ;启动 SETB ET0 ;开中断 SETB EA RET
六位共阳极数码管模块 相同的段驱动端都并联在 一起。
在第一位上显示5
+5V
P2.7
0
P2.6 com1
1
P2.5 com2
1
P2.4 com3
1
P2.3 com4
1
P2.2 com5 com6
1
位驱动P2.7输出0 段驱动P0口输出“5”的段 码“10010010B” 0 1 0 0 1 0 0 1
0 0 0 0 1 1 0 1
;共阳极7段数码管驱动段码表 ; pgfedcba TAB: DB 11000000B DB 11111001B DB 10100100B DB 10110000B DB 10011001B DB 10010010B DB 10000010B DB 11111000B DB 10000000B DB 10010000B
引脚输出低电平时,发光 二极管导通。
共阳极数码管
共阳极数码管的结构是:将8个发光二极管排 列成一个 “8.” 的形状,所有发光二极管阳极 连接在一起做公共端com,阴极作为各个段的 控制端a,b,c,d,e,f,g,dp。 com
a f g b
com
1
a
b
c
dp
e
d
ຫໍສະໝຸດ Baidu
c dp
a b c d e f g dp
练习3主程序参考:
ORG 0000H LJMP START ORG 000BH LJMP T0SERV ;T0中断入口 ORG 0030H START: MOV SP,#50H ;初始化堆栈 LCALL INIT ;初始化 MOV DISBUF,#0 MOV DISBUF+1,#1 MOV DISBUF+2,#2 MOV DISBUF+3,#3 MOV DISBUF+4,#4 MOV DISBUF+5,#0 MOV FLASH,#11000000B MOV R0,#0 LOOP: MOV DISBUF+5,R0 LCALL DELAY INC R0 CJNE R0,#10,LOOP MOV R0,#0 AJMP LOOP
P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7
a
b
c
d
e
f
g
dp
编程练习1-驱动一位数码管
开始
要求:在第一位显示连续变 化的0-9,间隔时间自定。 参考课本P196页例1,在 keil中编程,生产HEX文件。 在proteus中观察运行结果。 (参考“ c6定时器应用程 序调试” 介绍的方法)
动态显示参考程序3:中断服务程序
;----------2.5MS中断服务程序=动态显示------T0SERV: MOV TL0,#05H MOV TH0,#0F7H PUSH PSW ;保护现场 PUSH ACC PUSH DPH PUSH DPL SETB RS0 ;中断服务使用工作寄存器组1 CLR RS1 ;-----------计算时间---------------------------INC CNT_2D5MS ;2.5MS 计数器 MOV A,CNT_2D5MS CJNE A,#4,T0SERV3 ;4x2.5ms=10ms MOV CNT_2D5MS,#0 INC CNT_10MS1 ;10MS计数+1 MOV A,CNT_10MS1 CJNE A,#50,T0SERV3 MOV CNT_10MS1,#0 INC CN_0D5S ;0.5秒计数 CPL S_PULSE ;秒脉冲,每0.5秒变化
动 态 显 示 参 考 程 序 4: 中 断 服 务 程 序
;-----------显示处理--------------------------T0SERV3:ORL DISBIT,#11111100B ;熄灭显示 MOV A,DISBITBUF ;取当前显示位 INC A ;指向下一位,若(A)+1=6,使(A)=0 CJNE A,#6,T0SERV1 CLR A T0SERV1:MOV DISBITBUF,A MOV R0,#DISBUF ;取显示内容 ADD A,R0 MOV R0,A MOV A,@R0 ;A中为显示内容 MOV C,ACC.7 ;判断是否显示小数点 CLR ACC.7 MOV DPTR,#LEDTAB MOVC A,@A+DPTR ;取段码 JNC T0SERV2 CLR ACC.7 ;设置显示小数点 T0SERV2:MOV DISSEG,A ;送段码 ;闪烁控制 MOV A,FLASH ;取闪烁控制码 MOV R0,DISBITBUF ;将当前显示位的闪烁控制位移入c中 INC R0 T0SERV4:RLC A DJNZ R0,T0SERV4 JNC T0SERV5 ;C=1,闪烁 JNB S_PULSE,T0SERV5 ;S_PULSE=1时不显示 MOV DISSEG,#0FFH T0SERV5:MOV DPTR,#DISBITTAB ;取位驱动码 MOV A,DISBITBUF MOVC A,@A+DPTR ANL DISBIT,A ;送位驱动码 T0SERV0:POP DPL ;恢复现场 POP DPH POP ACC POP PSW RETI
恢复现场
返回
动态显示参考程序1:定义变量
;--------------------------------------------------------;动态显示程序 ;--------------------------------------------------------;全局变量定义 FLAG EQU 20H ;标志位 DISSEG EQU P0 ;显示段驱动 DISBIT EQU P2 ;显示位驱动P2.7-P2.2 DISBUF EQU 21H ;显示缓冲区首地址21H-26H DISBITBUF EQU 27H ;当前显示位计数器0-5 FLASH EQU 28H ;闪烁控制xxxxxx00,将x=1闪烁,=0不闪 ;小数点的处理: ;若显示‘3’,缓冲区放‘3’,若显示‘3.’,缓冲区放‘3+80H’, 最高位为1 S_PULSE EQU FLAG.0 ;秒脉冲 CNT_2D5MS EQU 2FH ;2.5MS计数器 CNT_10MS1 EQU 30H ;10MS计数器 CN_0D5S EQU 31H ;0.5秒计数器 ;----------------------------------------------------------
(2)使用27H单元记当前显示位(位号1-6)。
(3)使用28H单元控制位闪烁,1闪烁,0不闪烁。 (4)使用显示缓冲区单元最高位控制小数点显示,在 高位为1,表示该位显示小数点。 (5)fosc=11.0592MHz,使用定时器T0定时2.5ms进 行扫描速率控制。 (6)T0中断服务程序使用工作寄存器组1工作。
练习4中断T0服务程序中的1秒计数参考:
;-----------计算时间---------------------------INC CNT_2D5MS ;2.5MS 计数器 MOV A,CNT_2D5MS CJNE A,#4,T0SERV3 ;4x2.5ms=10ms MOV CNT_2D5MS,#0 INC CNT_10MS1 ;10MS计数+1 MOV A,CNT_10MS1 CJNE A,#50,T0SERV3 MOV CNT_10MS1,#0 INC CN_0D5S ;0.5秒计数 CPL S_PULSE ;秒脉冲,每0.5秒变化 JNB S_PULSE,T0SERV3 INC SEC MOV A,SEC CJNE A,#60,T0SERV3 MOV SEC,#0 ;1秒计数
(R0)=0 (A)=(R0) 查段码表, 取得段驱动码
段驱动码送P0口
P2.7=0 延时
(R0)+1
(R0)=10? Y (R0)=0 N
编程练习2-动态显示程序
T0中断
要求:显示123.456。
提示: (1)使用内部RAM21H-26H单元做显示缓冲区。
重装初值 保护现场 选工作寄存器组 熄灭显示 计算显示位 根据当前显示位 查得段驱动码 处理小数点 段驱动码送P0口 根据当前显示位 查得位驱动码 位驱动码送P2口
C7数码管显示程序设计
山东职业学院
主要内容
发光二极管的工作参数 数码管的结构和工作原理 多位数码管动态显示电路原理图 编程练习:驱动一位数码管
发光二极管的工作参数
+5V
发光二极管正常发光时, 电流约为5~10mA,压 降1V左右。
500
P1.0
限流电阻 R=(5V-1V)/8mA=500 Ω
;0 ;1 ;2 ;3 ;4 ;5 ;6 ;7 ;8 ;9
多位数码管动态显示电路原理图
实验板数码管连接示意图
+5V
P2.7 P2.6 com1 P2.5 com2 P2.4 com3 P2.3 com4 P2.2 com5 com6
位驱动
段驱动
P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 a b c d e f g dp
编程练习3
动态显示:前5位显示 01234,使前两位闪烁, 最后一位循环显示0- 9,变化速度自定。 提示:只需要在练习2 的基础上,改动主程 序。(利用双重循环 编一个延时程序)
主程序流程图
开始 初始化 显示012340
(FLASH)=11000000B
(R0)=0
(DISBUF+5)=(R0) 延时 (R0)+1 (R0)=10? Y (R0)=0 N
编程练习4
秒表:前4位不显示, 后两位循环显示00- 59秒。 提示:只需要在练习2 的基础上,定义29H单 元存储秒的值,利用 T0中断服务程序中的 0.5秒信号产生1秒信 号。主程序负责将秒 的个位和十位分离并 放入显示缓冲区。
主程序流程图
开始 初始化 显示 00
(A)=(29H)
(B)=10
A÷B (DISBUF+4)=(A) (DISBUF+5)=(B)
练习4主程序参考:
SEC EQU 29H ;定义秒单元 ORG 0000H LJMP START ORG 000BH LJMP T0SERV ;T0中断入口 ORG 0030H START: MOV SP,#50H ;初始化堆栈 LCALL INIT ;初始化 MOV DISBUF,#10 MOV DISBUF+1,#10 MOV DISBUF+2,#10 MOV DISBUF+3,#10 MOV DISBUF+4,#0 MOV DISBUF+5,#0 MOV FLASH,#0 MOV SEC,#0 LOOP: MOV A,SEC MOV B,#10 DIV AB MOV DISBUF+4,A MOV DISBUF+5,B AJMP LOOP