《单片机数码管显示.ppt》由会员分享,可在线阅读,更多相关《单片机数码管显示.ppt(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C7数码管显示程序设计数码管显示程序设计山东职业学院主要内容主要内容l发光二极管的工作参数l数码管的结构和工作原理l多位数码管动态显示电路原理图l编程练习:驱动一位数码管发光二极管的工作参数发光二极管的工作参数发光二极管正常发光时,电流约为510mA,压降1V左右。限流电阻R=(5V-1V)/8mA=500 P1.0+5V500引脚输出低电平时,发光二极管导通。comabcdpdpaabcdefgbcdefgdp100001101com;共阳极共阳极7段数码管驱动段码表段数码管驱动段码表;pgfedcbaTAB:DB 11000000B;0DB 11111001B;1DB 10100100B;
2、2DB 10110000B;3DB 10011001B;4DB 10010010B;5DB 10000010B;6DB 11111000B;7DB 10000000B;8DB 10010000B;9共阳极数码管共阳极数码管共阳极数码管的结构是:将8个发光二极管排列成一个“8.”的形状,所有发光二极管阳极连接在一起做公共端com,阴极作为各个段的控制端a,b,c,d,e,f,g,dp。多位数码管动态显示电路原理图多位数码管动态显示电路原理图实验板数码管连接示意图实验板数码管连接示意图P0.0+5Vcom1com2com3com4com5com6abcdefgdpP0.1P0.2P0.3P0.4P
3、0.5P0.6P0.7P2.7P2.6P2.5P2.4P2.3P2.2位驱动段驱动六位共阳极数码管模块相同的段驱动端都并联在一起。在第一位上显示在第一位上显示5P0.0+5Vcom1com2com3com4com5com6abcdefgdpP0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.7P2.6P2.5P2.4P2.3P2.2位驱动P2.7输出0段驱动P0口输出“5”的段码“10010010B”01111101001001编程练习编程练习1驱动一位数码管驱动一位数码管要求:在第一位显示连续变化的09,间隔时间自定。开始(R0)=0Y(A)=(R0)查段码表,取得段驱动码段驱动码
4、送P0口P2.7=0延时(R0)+1(R0)=10?(R0)=0N参考课本P196页例1,在keil中编程,生产HEX文件。在proteus中观察运行结果。(参考“c6定时器应用程序调试”介绍的方法)编程练习编程练习2动态显示程序动态显示程序要求:显示123.456。T0中断熄灭显示提示:(1)使用内部RAM21H26H单元做显示缓冲区。(2)使用27H单元记当前显示位(位号16)。(3)使用28H单元控制位闪烁,1闪烁,0不闪烁。(4)使用显示缓冲区单元最高位控制小数点显示,在高位为1,表示该位显示小数点。(5)fosc11.0592MHz,使用定时器T0定时2.5ms进行扫描速率控制。(6
5、)T0中断服务程序使用工作寄存器组1工作。重装初值保护现场选工作寄存器组根据当前显示位查得段驱动码处理小数点段驱动码送P0口根据当前显示位查得位驱动码位驱动码送P2口计算显示位恢复现场返回动态显示参考程序动态显示参考程序1:定义变量:定义变量;-;动态显示程序;-;全局变量定义FLAG EQU 20H;标志位DISSEG EQU P0 ;显示段驱动DISBIT EQU P2 ;显示位驱动DISBUF EQU 21H;显示缓冲区首地址21H-26HDISBITBUF EQU 27H;当前显示位计数器0-5FLASH EQU 28H;闪烁控制xxxxxx00,将x=1闪烁,=0不闪;小数点的处理:
6、;若显示3,缓冲区放3,若显示3.,缓冲区放3+80H,最高位为1S_PULSE EQU FLAG.0 ;秒脉冲CNT_2D5MS EQU 2FH ;2.5MS计数器CNT_10MS1 EQU 30H ;10MS计数器CN_0D5S EQU 31H ;0.5秒计数器;-动态显示参考程序动态显示参考程序2:主程序:主程序 ORG 0000H LJMP START ORG 000BH LJMP T0SERV ;T0中断入口 ORG 0030HSTART:MOV SP,#50H ;初始化堆栈 LCALL INIT ;初始化 LOOP:MOV DISBUF,#1 MOV DISBUF+1,#2 MOV
7、 DISBUF+2,#3 MOV DISBUF+3,#4+80H;显示小数点 MOV DISBUF+4,#5 MOV DISBUF+5,#6 AJMP LOOP;-初始化子程序-INIT:MOV R0,#2 ;清理内部RAM CLR AINIT1: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动态显示参考程序动态显示参考程序3:中断服务程序:
8、中断服务程序 ;-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_10M
9、S1,#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 AT0SERV1:MOV DISBITBUF,A MOV R0,#DISBUF ;取显示内容 ADD A,R0 MOV R0,A MOV A,R0 ;A中为显示内容 MOV C,ACC.7 ;判断是否
10、显示小数点 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 R0T0SERV4:RLC A DJNZ R0,T0SERV4 JNC T0SERV5 ;C=1,闪烁 JNB S_PULSE,T0SERV5 ;S_PULSE=1时不显示 MOV DISSEG,#0FFHT0SERV5:MOV DPTR,#DISBIT
11、TAB ;取位驱动码 MOV A,DISBITBUF MOVC A,A+DPTR ANL DISBIT,A ;送位驱动码T0SERV0:POP DPL ;恢复现场 POP DPH POP ACC POP PSW RETI动动态态显显示示参参考考程程序序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
12、 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;-编程练习编程练习3l动态显示:前5位显示01234,使前两位闪烁,最后一位循环显示09,变化速度自定。l提示:只需要在练习2的基础上,改动主程序。(利用双重循环编一个延时程序)开始初始化Y显示012340(R0)=0(DISBUF+5)=(R0)延时(R0)=10?(R0)=0N(R0)+1主程序流程图主程序流程图(FLASH)=11000000B练
13、习练习3主程序参考:主程序参考:ORG 0000H LJMP START ORG 000BH LJMP T0SERV ;T0中断入口 ORG 0030HSTART: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 M
14、OV R0,#0 AJMP LOOP编程练习编程练习4l秒表:前4位不显示,后两位循环显示0059秒。l提示:只需要在练习2的基础上,定义29H单元存储秒的值,利用T0中断服务程序中的0.5秒信号产生1秒信号。主程序负责将秒的个位和十位分离并放入显示缓冲区。开始初始化显示 00(A)=(29H)主程序流程图主程序流程图(B)=10AB(DISBUF+4)=(A)(DISBUF+5)=(B)练习练习4主程序参考:主程序参考:SEC EQU 29H ;定义秒单元 ORG 0000H LJMP START ORG 000BH LJMP T0SERV ;T0中断入口 ORG 0030HSTART:MO
15、V SP,#50H ;初始化堆栈 LCALL INIT ;初始化 MOV DISBUF,#10MOV DISBUF,#10 MOV DISBUF+1,#10 MOV DISBUF+1,#10 MOV DISBUF+2,#10 MOV DISBUF+2,#10 MOV DISBUF+3,#10 MOV DISBUF+3,#10 MOV DISBUF+4,#0 MOV DISBUF+4,#0 MOV DISBUF+5,#0 MOV DISBUF+5,#0 MOV FLASH,#0 MOV FLASH,#0 MOV SEC,#0 MOV SEC,#0LOOP:LOOP:MOV A,SECMOV A,
16、SEC MOV B,#10 MOV B,#10 DIV AB DIV AB MOV DISBUF+4,A MOV DISBUF+4,A MOV DISBUF+5,B MOV DISBUF+5,B AJMP LOOP AJMP LOOP练习练习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,
17、T0SERV3 MOV CNT_10MS1,#0 INC CN_0D5S ;0.5秒计数 CPL S_PULSE ;秒脉冲,每0.5秒变化 JNB S_PULSE,T0SERV3 ;1JNB S_PULSE,T0SERV3 ;1秒计数秒计数 INC SEC INC SEC MOV A,SEC MOV A,SEC CJNE A,#60,T0SERV3 CJNE A,#60,T0SERV3 MOV SEC,#0 MOV SEC,#0 ;-显示处理-T0SERV3:ORL DISBIT,#11111100B ;熄灭显示 MOV A,DISBITBUF ;取当前显示位 INC A ;指向下一位,若(A)+1=6,使(A)=0 CJNE A,#6,T0SERV1 CLR AT0SERV1:MOV DISBITBUF,A