单片机3数码管显示功能的实现
- 格式:docx
- 大小:427.02 KB
- 文档页数:7
实验3 数码管显示功能的实现1、实验目的1、了解发光二极管的使用方法;2、熟悉串行、并行输出扩展接口的方法;3、学习常用指令用法和简单程序编写技巧。
2、实验要求1、对照图1.2.6和图3.1.3、图3.1.4,理解图1.2.6所示的电路工作原理;2、读懂串行接口和并行接口的LED显示参考示例程序;3、分别运行并验证参考示例程序;4、要让次低位LED数码管显示中总是带有小数点,即显示的6位数值中包括一位小数,请修改参考程序实现;5、利用实验箱通用板上的电路模块,自行设计4位LED数码管显示器的串行静态、并行静态显示电路,参照图3.1.3、图3.1.4画出实验电路原理图,并按所设计电路图搭接实验电路;6、根据所设计搭接的实验电路,自行编写4位数码管显示器的串行静态、并行静态显示程序,并调试通过。
3、实验原理LED数码管显示器由于经济实用、亮度高、控制简单,在测量与控制系统中被广泛用于显示被测物理量或内部参数。
根据LED数码管显示器与单片机连接方式的不同,有静态显示和动态显示两种。
所谓静态显示,就是所有的数码管同时点亮,需要的器件较多,占用印刷电路板的面积要大一些,消耗的电源电流也要大一些,但是占用的CPU的时间则要少一些。
所谓动态显示,是指每位数码管分时依次点亮,由于人眼的视觉暂留现象,给人的感觉是同时都是点亮的。
动态显示需要的器件数量、印刷电路板的面积、功率消耗都要少一些,但是CPU必需经常刷新,占用CPU的时间要多一些。
无论是动态显示还是静态显示,根据电路的不同,都可再分为串行接口和并行接口两种控制方式。
串行接口需要的CPU口线要少一些,但是占用CPU的时间要长一些。
反之,并行接口需要的CPU 的口线要多一些,但是占用CPU的时间要少一些。
实际应用时,应根据系统的特点,选择不同的显示方式。
在CPU运行时间许可的情况下,应尽量选择串行动态显示方式,以实现“用时间换硬件资源”的目的。
1、数码管电路结构常见LED数码管显示器的外形如图3.1.2(a)所示,内部电路结构如图3.1.2(b)所示,内部8 个发光二极管处于不同的位置,每个发光二极管显示一个笔画,称为一段;通过外接电路控制点亮不同的发光二极管组合,显示一位相应的数字(符号)。
对于单个数码管来说,一般有10 个引脚,从数码管的正面看进去,左下角那个脚为1 脚,以逆时针方向依次为1~10 脚,左上角那个脚便是10 脚了。
图3.1.2 中的笔画符号分别与这10 个管脚序号一一对应。
注意,3 脚和8 脚是连通的,这两个都是公共脚。
图3.1.2中8个发光二极管的阳极(正极)连接在一起,称为共阳极数码管显示器。
实验箱上通用版上的数码管即为共阳极的。
若将所有发光二极管的极性调换一下,所有的阴极(负极)连接到一起,则称为共阴极数码管。
数码管显示器与发光二极管一样,除有体积大小之分外,也有普通、高亮、超亮的区别。
体积较小的数码管内部每段发光二极管的工作电流与普通单个发光二极管的工作电流相当。
体积较大的数码管每段(一个笔画)可能由多个发光二极管串联而成,其工作电流不会增大,但是工作电压要增高,具体应用时,可以查阅器件手册,或者实际测量一下。
2、数码管显示器的动态控制电路实验箱的核心板上,有6个共阴极数码管显示器,被设计成既可为并行接口动态控制,又可为串行接口动态控制,如图1.2.6所示。
通过改变跳线器S2的位置,可以选择数码管受串行接口器件控制还是受并行接口器件控制。
当S2处于“S”位置时,受串行接口器件控制;当S2处于“P”位置时,受并行接口器件控制.3、并行动态显示参考电路跳线器S2短接于“P”位置时,实际的单片机和数码管显示器电路原理如图3.1.3所示,构成数码管并行动态显示电路。
在此情形下,两片595的输出引脚为高阻抗状态,对数码管显示电路相当于不存在。
图3.1.3中的U7的输出控制每个数码管的哪一个笔画点亮,称为段选信号;U8通过U10驱动控制哪一位数码管点亮,称为位选信号。
4、串行动态显示参考电路跳线器S2短接于“S”位置时,单片机和数码管显示器电路原理如图3.1.4所示,构成数码管串行动态显示电路。
在此情形下,两片574的输出引脚为高阻抗状态,对数码管显示电路相当于不存在。
4、程序流程图及代码分析1、并行接口LED显示D_DAT0 EQU 6AHD_DAT1 EQU 6BHD_DAT2 EQU 6CHD_DAT3 EQU 6DHD_DAT4 EQU 6EHD_DAT5 EQU 6FH ;定义显示数据单元ORG 0000HAJMP STARTORG 0030HSTART: MOV SP, #30H ;初始化堆栈指针MOV D_DAT0, #0MOV D_DAT1, #1MOV D_DAT2, #2MOV D_DAT3, #3MOV D_DAT4, #4MOV D_DAT5, #5 ;初始化显示数据MOV P0, #0 ;CLR P1.1 ;初始化有关I/O口CLR P1.2MOV R0, # D_DAT0 ;初始化显示数据指针寄存器R0;指向第一位需显示数字MOV R1, #01H ;初始化需点亮数码管位置代码NOPMAIN: LCALL DISP ;调用数码管循环点亮子程序LCALL DELAY ;延时子程序同前,应修改延时时间AJMP MAIN ;循环执行主程序;****************************************************;通过574显示6位数字子程序;****************************************************DISP: MOV A, R1 ;取位代码MOV P0, A ;位代码送P0抠(用于产生位选信号)SETB P1.2NOPCLR P1.2MOV A, @R0 ;取需显示的数字值MOV DPTR, #DISPD ;装载笔画编码表首地址MOVC A, @A+DPTR ;取需显示数字笔画代码MOV P0, A ;笔画代码送到P0口(勇于产生段选信号)SETB P1.1NOPCLR P1.1 ;产生一个锁存脉冲,锁存输出笔画代码INC R0 ;R0增1指向下一个需显示数字MOV A, R1CLR CRLC AMOV R1, A ;R1中的值左移一位,指向下一位数码管CJNE R1, #40H, DISP1 ; R1中不为40H(未显示完6位)继续MOV R0, #D_DAT0 ;R1中为40H,循环完一轮;重新赋初值MOV R1, #1 ;位置代码初值DISP1: NOPRET;数字笔画代码表; 0 1 2 3 4 5 6 7 8 9 熄DISPD: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH, 0;延时子程序DELAY:MOV R7,#20 ;将R7赋值20DELAY1:MOV R6,#0 ;将R6赋值0,相当于赋值256DELAY2:DJNZ R6,$ ;R6中的值减1不为0则循环执行当前行DJNZ R7,DELAY1 ;R7中的值减1不为0则循环RET2、串行接口LED显示D_DAT0 EQU 6AHD_DAT1 EQU 6BHD_DAT2 EQU 6CHD_DAT3 EQU 6DHD_DAT4 EQU 6EHD_DAT5 EQU 6FH ;定义显示数据单元ORG 0000HAJMP STARTORG 0030HSTART: MOV SP, #30H ;初始化堆栈指针MOV D_DAT0, #0MOV D_DAT1, #1MOV D_DAT2, #2MOV D_DAT3, #3MOV D_DAT4, #4MOV D_DAT5, #5 ;初始化显示数据MOV P0, #0CLR P1.3CLR P1.1CLR P1.2 ;初始化有关I/O口MOV R0,#D_DAT0 ;初始化数据指针;R0指向第一位显示数字MOV R1,#01H ;初始化需点亮数码管位置代码NOPMAIN:LCALL DISP ;调用数码管循环点亮子程序LCALL DELAY ;延时子程序同前AJMP MAIN ;死循环;******************************************************;通过595显示4位数字子程序;***************************************************** DISP:MOV A,R1 ;取位代码数据MOV R2,#8 ;R2中为存循环次数DISP1:CLR CRLC AMOV P1.3,C ;一个位选信号送到SER的输入端SETB P1.1NOPCLR P1.1 ;产生一个串行移位时钟脉冲DJNZ R2,DISP1 ;依次将8个位选信号移入;实际只有6位有用MOV A,@R0 ;取需显示的数字MOV DPTR,#DISPD ;笔画编码表同前MOVC A,@A+DPTR ;取需显示数字笔画代码(段选信号)MOV R2,#8DISP2:CLR CRLC AMOV P1.3,C ;段选信号送到SI引脚SETB P1.1NOPCLR P1.1 ;产生一个移位时钟脉冲DJNZ R2,DISP2 ;依次将8个笔画信号(段选信号)移入SETB P1.2NOPCLR P1.2 ;产生一个输出锁存脉冲INC R0 ;R0增1指向下一个需显示数字MOV A,R1CLR CRLC AMOV R1,A ;R1中的值左移1位,指向下一位数码管CJNE R1,#40H,DISP3 ;R1中不为40H则继续MOV R0,#D_DAT0 ;R1中为40H,循环完一轮;重新赋初值MOV R1,#01H ;位选数据重新赋初值DISP3:RET ;DISPD: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH, 0 ;延时子程序DELAY:MOV R7,#20 ;将R7赋值20DELAY1:MOV R6,#0 ;将R6赋值0,相当于赋值256DELAY2:DJNZ R6,$ ;R6中的值减1不为0则循环执行当前行DJNZ R7,DELAY1 ;R7中的值减1不为0则循环RET3、程序流程图5、 实验结果数码管上依次显示0、1、2、3、4、5.6、 实验小结本实验重在对程序的理解,掌握位选与段选,并能对实验程序进行一定的修改。
思考题:4、在DISP 段中MOV P0,A SETB P1.1改为MOV P0,ACJNE R1,#16,LOOPSETB P0.7LOOP: SETB P1.1。