(完整word版)六位LED八段数码管显示
数码管显示
课题目标
本课题的任务是用单片机实现简易数字 显示,演示效果如图4-1所示。通过编程, 学会在单片机上实现一位数字和多位数字 的静态和动态显示控制方法,以及不同进 制计数的程序编写方法。
图4-1 数码管显示实物图
任务一 LED数码管的静态显示
本任务就是将单片机与数码管接成图 4-2所示静态显示方式,编程实现数码管 每隔0.5s的0-9数字显示。
图4-7 动态显示结构图
1、C语言程序:
#include <AT89X51.h> #define uchar unsigned char unsigned char code
tabledu[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char code
tablewe[]={0x1f,0x3f,0x5f,0x7f,0x9f, 0xbf,0xdf,0xff};
unsigned char dispcount; void delay02s(void) { unsigned char i,j,k; for(i=10;i>0;i--) for(j=200;j>0;j--) for(k=248;k>0;k--);} void main(void) { while(1)
图4-5
1、C语言程序: #include <AT89X51.h> #define uchar unsigned char sbit a=P0^5; sbit b=P0^6; sbit c=P0^7; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char dispcount; void delay02s(void) { unsigned char i,j,k; for(i=10;i>0;i--) for(j=200;j>0;j--) for(k=248;k>0;k--); }
LED数码管显示
动态驱动
通过扫描方式逐行点亮 LED数码管,适用于多位 数显示。
集成电路驱动
使用专用集成电路芯片驱 动LED数码管,具有驱动 能力强、稳定性高等优点。
03
LED数码管的分类与选择
七段数码管
01
02
03
04
七段数码管是最常见的LED数 码管,由七个LED段(a-g)和 一个可选的小数点(dp)组成。
十六进制数码管也有共阳和共阴两种类型,使用方法与 七段数码管类似。
它能够显示数字和英文字母,以及一些特殊字符,通过 控制每个段的亮灭来显示不同的字符。
十六进制数码管在计算机、通信、仪器仪表等领域应用 广泛。
点阵式LED显示屏
01
点阵式LED显示屏由多个LED灯组成的矩阵,通过控制每个LED 灯的亮灭来显示文字、图像和视频等。
它能够显示数字0-9和某些英 文字母,通过控制每个段的亮
灭来显示不同的字符。
七段数码管有共阳和共阴两种 类型,共阳极的公共端接高电 平,共阴极的公共端接低电平
。
七段数码管具有低功耗、高亮 度、长寿命等优点,广泛应用
于各种显示设备中。
十六进制数码管
十六进制数码管是一种能够显示十六进制字符的LED数 码管,由16个LED段(0-9、A-F)组成。
驱动芯片的作用
提供稳定的电流,控制LED数码管的亮度和显示内 容。
常见驱动芯片型号
如74HC595、74HC164等。
驱动芯片的选择
根据LED数码管的位数和扫描方式,选择合适的驱 动芯片。
LED数码管的接口电路
接口电路的作用
实现LED数码管与微控制器的通信,传输显示数据。
常见接口电路
如共阳极、共阴极等。
共阴极八段数码管显示数字0到9
共阴极八段数码管显示数字0到9共阴极八段数码管是一种在嵌入式系统中常用的显示设备,它由八个发光二极管组成,其中七个长条形的发光管排列成“日”字形,右下角一个点形的发光管作为显示小数点用。
要使共阴极八段数码管显示数字0到9,可以通过编程实现。
具体来说,可以定义共阴极数码管的引脚,并将数码管的8个阴极连接到8个GPIO引脚上。
然后,定义一个计数器,用于控制数码管显示的数字。
对于每个计数器的值,在代码中定义一个对应的数字显示模式,例如0的显示模式为abcdef,1的显示模式为bc,以此类推。
在每个时钟周期内,根据计数器的值,将对应的数字显示模式输出到数码管的引脚上,从而控制数码管的显示。
为了实现循环显示0-9,可以在计数器达到9时将其重置为0,从而实现循环显示的效果。
下面是一个简单的Verilog代码示例,用于更好地理解:```verilogmodule display(input clk,output reg [7:0] seg,reg [3:0] cnt;always @(posedge clk) begincase(cnt)4'h0: seg = 8'b11000000; //显示04'h1: seg = 8'b11111001; //显示14'h2: seg = 8'b10100100; //显示24'h3: seg = 8'b10110000; //显示34'h4: seg = 8'b10011001; //显示44'h5: seg = 8'b10010010; //显示54'h6: seg = 8'b10000010; //显示64'h7: seg = 8'b1111。
数码管显示
数码管显示第3讲数码管显示第3讲数码管显示一、数码管显示原理我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。
所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。
数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED 的另一端高电平,它便能点亮。
而共阳极就是将八个LED的阳极连在一起。
其原理图如下。
其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。
一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。
显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。
数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。
所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为11000000,即0xc0。
可以看出两个编码的各位正好相反。
如下图。
二、点亮一个数码管下面以七段共阴数码管为例讲述如何点亮一个数码管。
l 51系列单片机的P0口没有上拉电阻(其他端口有),所以如果直接接数码管的段选线,那么不能将其点亮。
我们需要为其加上220欧姆的上拉电阻,注意,上拉电阻阻值不能过大。
实验原理图如下。
其中,7SEG-COM-CAT-GRN为七段共阴数码管,显示为绿色。
RES为电阻。
查找电阻时,需要选中下面的Resistors,如下图。
右击选中图中的电阻再左击,弹出的窗口中可改变它的阻值。
如下图。
那七个电阻看上去很乱,其实他们可以用一个排阻(RESPACK-7)代替。
如下图。
到这里原理图就画完了,我们开始写源程序。
让数码管显示字符“0”。
#includevoid main(){P0 = 0x3f; //P0口送字符‘0’的编码}显示效果如下。
实验二 数码管显示
实验二数码管显示本实验的目的是掌握数码管的工作原理与使用,实现数码管的静、动态显示。
静态数码管我们先看看什么是数码管,上图就是各种长相各种样子的数码管了,肯定很眼熟了吧。
不管将几位数码管连在一起,数码管的显示原理都是一样的,都是靠点亮内部的发光二极管来发光,下面就来我们讲解一个数码管是如何亮起来的。
数码管内部电路如下图所示,从右图可看出,一位数码管的引脚是10个,显示一个8字需要7个小段,另外还有一个小数点,所以其内部一共有8个小的发光二极管,最后还有一个公共端,生产商为了封装统一,单位数码管都封装10个引脚,其中第3和第8引脚是连接在一起的。
而它们的公共端又可分为共阳极和共阴极,中间图为共阴极内部原理图,右图为共阳极内部原理图。
上图展出了常用的两种数码管的引脚排列和内部结构。
总所周知,点亮发光二极管就是要给予它足够大的正向压降。
所以点亮数码管其实也就是给它内部相应的发光二极管正向压降。
如上图左(一共a、b、c、d、e、f、g、DP 八段),如果要显示“1”则要点亮b、c 两段LED;显示“A”则点亮a、b、c、e、f、g 这六段LED;我们还知道,既然LED 加载的是正向压降,它的两端电压必然会有高低之分:如果八段LED 电压高的一端为公共端,我们称之为共阳极数码管(如上图中);如果八段LED 电压低的一段为公共端,则称之为共阴极数码管(上图右)。
所以,要点亮共阳极数码管,则要在公共端给予高于非公共端的电平;反之点亮共阴极数码管,则要在非公共端给予较高电平。
对共阴极数码来说,其8个发光二极管的阴极在数码管内部全部连接在一起,所以称“共阴”,而它们的阳极是独立的,通常在设计电路时一般把阴极接地。
当我们给数码管的任意一个阳极加一个高电平时,对应的这个发光二极管就点亮了。
如果想要显示出一个8字,并且把右下角的小数点也点亮的话,可以给8个阳极全部送高电平,如果想让它显示出一个0字,那么我们可以除了给第“g, dp”这两位送低电平外,其余引脚全部都送高电平,这样它就显示出0字了。
单片机实验报告——LED数码管显示实验
单⽚机实验报告——LED数码管显⽰实验(此⽂档为word格式,下载后您可任意编辑修改!)《微机实验》报告LED数码管显⽰实验指导教师:专业班级:姓名:学号:联系⽅式:⼀、任务要求实验⽬的:理解LED七段数码管的显⽰控制原理,掌握数码管与MCU的接⼝技术,能够编写数码管显⽰驱动程序;熟悉接⼝程序调试⽅法。
实验内容:利⽤C8051F310单⽚机控制数码管显⽰器基本要求:利⽤末位数码管循环显⽰数字0-9,显⽰切换频率为1Hz。
提⾼要求:在4位数码管显⽰器上依次显⽰当天时期和时间,显⽰格式如下:yyyy (年份)mm.dd(⽉份.⽇).asm;Description: 利⽤末位数码管循环显⽰数字0-9,显⽰切换频率为1Hz。
;Designed by:gxy;Date:2012117;*********************************************************$include (C8051F310.inc)ORG 0000H ;复位⼊⼝AJMP MAINORG 000BH ;定时器0中断⼊⼝AJMP TIME0MAIN: ACALL Init_Device ;初始化配置MOV P0,#00H ;位选中第⼀个数码管MOV R0,#00H ;偏移指针初值CLR PSW.1 ;标志位清零SETB EA ;允许总中断SETB ET0 ;允许定时器0中断MOV TMOD,#01H ;定时器0选⼯作⽅式1MOV TH0,#06HMOV TL0,#0C6H ;赋初值,定时1sLOOP: MOV A,R0ADD A,#0BH ;加偏移量MOVC +PC ;查表取,段码MOV P1,A ;段码给P1显⽰SETB TR0 ;开定时LOOP1: JNB PSW.1,LOOP1 ;等待中断CLR PSW.1INC R0 ;偏移指针加⼀CJNE R0,#0AH,LOOP3MOV R0,#00H ;偏移指针满10清零AJMP LOOP ;返回DB 0FCH,60H,0DAH,0F2H,66H ;段码数据表:0、1、2、3、4 DB 0B6H,0BEH,0E0H,0FEH,0F6H; 5、6、7、8、9 ;***************************************************************** ; 定时器0中断;***************************************************************** TIME0: SETB PSW.1 ;标志位置⼀MOV TH0,#06H ;定时器重新赋值MOV TL0,#0C6HLOOP3: CLR TR0 ;关定时RETI;***************************************************************** ;初始化配置;***************************************************************** PCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov TMOD, #001hmov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 -Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - Unassigned, Open-Drain, Digital ; P0.7 - Unassigned, Open-Drain, Digital ; P1.0 - Unassigned, Open-Drain, Digital ; P1.1 - Unassigned, Open-Drain, Digital ; P1.2 - Unassigned, Open-Drain, Digital ; P1.3 - Unassigned, Open-Drain, Digital ; P1.4 - Unassigned, Open-Drain, Digital ; P1.5 - Unassigned, Open-Drain, Digital ; P1.6 - Unassigned, Open-Drain, Digital ; P1.7 - Unassigned, Open-Drain, Digital ; P2.0 - Unassigned, Open-Drain, Digital ; P2.1 -Unassigned, Open-Drain, Digital ; P2.2 - Unassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digital mov XBR1, #040hretInterrupts_Init:mov IE, #002hretInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_Initlcall Interrupts_Initretend提⾼部分:;*********************************************************;Filename: shumaguan2.asm;Description:在4位数码管显⽰器上依次显⽰当天时期和时间,显⽰格式如下:; 2012 (年份); 12.07(⽉份.⽇); 12.34(⼩时.分钟);Designed by:gxy;Date:2012117;*********************************************************$include (C8051F310.inc)ORG 0000HAJMP MAINORG 000BHAJMP TIME0MAIN: ACALL Init_DeviceMOV R0,#00H ;⽤于位选MOV R1,#00H ;⽤于段选MOV R2,#22H ;置偏移量,⽤于控制模式MOV R4,#8MOV R5,#250CLR PSW.1 ;标志位清零SETB EA ;允许总中断SETB ET0 ;允许定时器0中断MOV TMOD,#01H ;定时器0选⼯作⽅式1MOV TH0,#0FFHMOV TL0,#0C0H ;定时器赋初值1msBACK: MOV P0,R0 ;位选MOV A,R0ADD A,#40H ;选下⼀位MOV R0,AMOV A,R1ADD A,R2 ;加偏移量MOVC +PC ;查表取段码MOV P1,A ;段码给P1显⽰LOOP: SETB TR0 ;开定时HERE: JNB PSW.1,HERE ;等待中断CLR PSW.1DJNZ R5,BACKMOV R5,#250DJNZ R4,BACKMOV R4,#8 ;循环2000次(2s)MOV A,R2ADD A,#04H ;偏移量加04H,到下⼀模式段码初值地址 MOV R2,ACJNE R2,#2EH,LOOP2MOV R2,#22H ;加三次后偏移量回到初值LOOP2: AJMP BACK ;返回进⼊下⼀模式;段码数据表:DB 0DAH,60H,0FCH,0DAH ; 2102DB 0E0H,0FCH,61H,60H ; 701. 1DB 66H,0F2H,0DBH,60H ; 432. 1;*****************************************************************; 定时器0中断;***************************************************************** TIME0: MOV TH0,#0FFH MOV TL0,#0C0HCLR TR0SETB PSW.1INC R1 ;偏移指针加⼀CJNE R1,#04H,LOOPMOV R1,#00H ;偏移指针满04H清零RETI;***************************************************************** ; 初始化配置;***************************************************************** PCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov TMOD, #001hmov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital; P0.1 - Unassigned, Open-Drain, Digital; P0.2 - Unassigned, Open-Drain, Digital; P0.3 - Unassigned, Open-Drain, Digital; P0.4 - Unassigned, Open-Drain, Digital; P0.5 - Unassigned, Open-Drain, Digital; P0.6 - Unassigned, Open-Drain, Digital; P0.7 - Unassigned, Open-Drain, Digital; P1.0 - Unassigned, Open-Drain, Digital; P1.1 - Unassigned, Open-Drain, Digital; P1.2 - Unassigned, Open-Drain, Digital; P1.3 - Unassigned, Open-Drain, Digital; P1.4 - Unassigned, Open-Drain, Digital; P1.5 - Unassigned, Open-Drain, Digital; P1.6 - Unassigned, Open-Drain, Digital; P1.7 - Unassigned, Open-Drain, Digital; P2.0 - Unassigned, Open-Drain, Digital; P2.1 - Unassigned, Open-Drain, Digital; P2.2 - Unassigned, Open-Drain, Digital; P2.3 - Unassigned, Open-Drain, Digitalmov XBR1, #040hretInterrupts_Init:mov IE, #002hretInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_Initlcall Interrupts_Initretend六、程序测试⽅法与结果、软件性能分析软件调试总体截图:基础部分:软件运⾏时,我们发现P0端⼝为00H,P1端⼝以依次为FCH、60H、DAH、F2H、66H、B6H、BEH、E0H、FEH、F6H。
(完整word版)数码管动态显示实验报告
实验四数码管动向显示实验一一、实验要求1.在 Proteus 软件中画好 51 单片机最小核心电路,包括复位电路和晶振电路2.在电路中增加四个7 段数码管 ( 共阳 / 共阴自选 ), 将 P1 口作数据输出口与 7 段数码管数据引脚相连, P2.0~P2.3 引脚输出选控制信号3.在 Keil 软件中编写程序 , 采用动向显示法 , 实现数码管分别显示数字1,2, 3, 4二、实验目的1.坚固 Proteus 软件和 Keil 软件的使用方法2.学习端口输入输出的高级应用3.掌握 7 段数码管的连接方式和动向显示法4.掌握查表程序和延时等子程序的设计三.实验说明本实验是将单片机的P1 口做为输出口,将四个数码管的七段引脚分别接到至P1.7 。
由于电路中采用共阳极的数码管,因此当P1 端口相应的引脚为0 时,对应的数码管段点亮。
程序中预设了数字0-9 的段码。
由于是让四个数码管显示不同样的数值,因此要用扫描的方式来实现。
因此定义了scan 函数,接到单片机的p2.0 至在实验中,预设的数字段码表存放在数组TAB中,由于段码表是固定的,因此储藏种类可设为 code。
在 Proteus 软件中依照要求画出电路,再利用Keil软件按需要实现的功能编写 c 程序,生成 Hex 文件,把Hex 文件导到Proteus 软件中进行仿真。
为了可以更好的考据明验要求,在编写程序时需要延时0.5s ,能让人眼更好的分辨;89C51 的一个机器周期包括12 个时钟脉冲,而我们采用的是12MHz晶振,每一个时钟脉冲的时间是1/12us ,因此一个机器周期为 1us。
在 keil程序中,子函数的实现是用void delay_ms(int x),其中x为1时是代表1ms。
四、硬件原理图及程序设计〔一〕硬件原理图设计电路中 P1.0 到 P1.7 为数码管七段端口的控制口,排阻 RP1阻值为 220Ω,到为数码管的扫描信号。
八段数码管的静态显示
作业
绘制红绿灯硬件接线,编写简易红绿灯程 序。
二、八段数码管的原理
三、应用
例1::一个八段数码管从“0”到“9”流水显示,即通电 后,显示“0”,间隔一段时间后,显示“1”,再间隔 一段时间后,显示“2”,直到“9”,然后再显示“0”, 往复循环。
三、应用
三、应用
三、应用
• 程序如下: #include “reg51.h” void delay(unsigned int x) {unsigned char i; for( ;x>0;x--) for(i=0;i<124;i++) {;} }八段
数码管显示一个字符时,相应的发光二 极管恒定的导通或截止,如显示“0”,a、 b、c、d、e、f导通,g、dp截止,这种 显示方式每一个八段数码管都需要一个 八位口。
三、总结
1、注意八段数码管的类型,是共阴还是 共阳。
2、注意八段数码管各个引脚与单片机输 入输出口的连接顺序。
void main( ) { unsigned char code a[10]={0xc0,0xf3,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90}; unsigned char i; for( ;;) {for (i=0;i<=9;i++) {P0=a[i]; delay(1000);} } }
任务2 八段数码管的静态显示
xx信息职业技术学院机电工程学院 xx
一、八段数码管的应用
由于八段数码管的价格便宜,使用简 单,在很多领域应用极为广泛,如包装、 交通、仪表、家用电器等。
二、八段数码管的原理
二、八段数码管的原理
八段数码管结构
百手起驾 整理为您
八段数码管结构
数码管由8个发光二极管(以下简称字段)构成,通过不同的组合可用来显示数字0 ~9、字符A ~ F 、H 、L 、P 、R 、U 、Y
、符号“-”及小数点“.”。
数码管的外形结构如图所示。
数码管又分为共阴极和共阳极两种结构。
数码管引脚图
数码管工作原理:
共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起。
通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。
当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮。
根据发光字段的不同组合可显示出各种数字或字符。
此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起。
通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。
当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。
此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
感谢您的下载与阅读,祝您工作顺利、万事如意!!!
2
百手起驾整理为您。
(完整word版)项目六 数码管显示原理分解(word文档良心出品)
项目六数码管显示原理学习目的:1.介绍STC89C51的数码管显示的原理;2.掌握单个数码管静态显示的原理;3.熟悉四位一体数码管动态显示的原理;4.掌握单片机数码管显示的C51程序编程。
常用的LED显示器有LED状态显示器(俗称发光二极管)、LED七段显示器(俗称数码管)和LED十六段显示器。
发光二极管可显示两种状态,用于系统状态显示;数码管用于数字显示;LED十六段显示器用于字符显示。
一、数码管简介1.数码管的结构数码管由8个发光二极管(以下简称字段)构成,通过不同的组合可用来显示数字0 ~9、字符A ~F、H、L、P、R、U、Y、符号“-”及小数点“.”。
数码管的外形结构如下图所示。
数码管又分为共阴极和共阳极两种结构。
常用的LED显示器为8段(或7段,8段比7段多了一个小数点“dp”段)。
有共阳极和共阴极两种其结构如下图所示:图6-1 数码管结构图2.数码管工作原理共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起。
通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。
当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮。
根据发光字段的不同组合可显示出各种数字或字符。
此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起。
通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。
当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。
此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
3.数码管字形编码要使数码管显示出相应的数字或字符,必须使段数据口输出相应的字形编码。
字型码各位定义为:数据线D0与a字段对应,D1与b字段对应……,依此类推。
如使用共阳极数码管,数据为0表示对应字段亮,数据为1表示对应字段暗;如使用共阴极数码管,数据为0表示对应字段暗,数据为1表示对应字段亮。
数码管的分类
数码管的分类数码管是用来显示数字和字母的一种视觉显示设备,通常是由发光二极管(LED)、荧光管或液晶显示器组成。
可以显示时间、计数器、温度等各种信息。
数码管可以分为不同的类型,以下是数码管的分类:一、LED数码管:LED数码管是最常见的一种数码管,在数字显示器中使用得最广泛。
LED数码管是由发光二极管组成的,可以显示数字、字母、符号等信息。
根据颜色不同可以分为红、绿、黄、蓝等。
二、七段数码管:七段数码管是一种由7个LED灯泡组成的数码管。
每个LED灯泡代表一个数字或字母。
可以显示0-9的数字和A-F的字母。
七段数码管还可以显示一些特殊符号和标志。
流行于大型数码设备、量产工具等。
三、八段数码管:八段数码管是一种由8个LED灯泡组成的数码管。
每个LED灯泡代表一个数字或字母和符号。
可以显示更多的数字和字母和一些更加细致的特殊符号。
主要用于小型电子产品和信息查询设备中。
四、高亮数码管:高亮数码管是一种使用磷酸荧光材料,通过电子束碰撞使其发光的数码管。
它能够显示非常明亮的数字、字母和符号,适用于需要在低光环境下方便观看的场合。
五、传统数码管:传统数码管通常由数根连接的单个LED灯组成,可以显示0至9的数字。
这种数码管在显然方面的优劣一目了然。
总之,数码管是一种十分重要的数字显示器件,不同类型的数码管具有不同的功能和特点,可以满足不同场合的需求。
在未来的技术发展中,随着人们对信息和数字显示器件的需求的不断增长,数码管将会得到进一步的创新和发展。
八段数码管单片机
单片机实验报告(四)实验名称八段数码管显示(51/96/88)一、实验目的1.了解数码管动态显示的原理。
2.了解用总线方式控制数码管显示二、实验原理1.本实验仪提供了 6 位 8 段码 LED 显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有 6 位,用动态方式显示。
8 位段码、6 位位码是由两片74LS374 输出。
位码经 MC1413 或 ULN2003 倒相驱动后,选择相应显示位。
本实验仪中 8 位段码输出地址为 0X004H,位码输出地址为 0X002H。
此处 X 是由KEY/LED CS 决定,参见地址译码。
做键盘和 LED 实验时,需将 KEY/LED CS 接到相应的地址译码上。
以便用相应的地址来访问。
例如,将 KEY/LED CS 接到CS0 上,则段码地址为08004H,位码地址为 08002H。
三、实验所用仪器LED 、 89C51 、试验箱、导线四、操作步骤图1-1 实验电路及其连线图1-2 七段数码管的字形代码表图1-3 实验框图五、实验程序1、wave实验箱实验程序ORG 0100HMAIN: MOV SP,#70HMOV 75H,#1MOV 76H,#1MOV 77H,#5MOV 78H,#9MOV 79H,#9MOV 7AH,#1MOV R4,#6ONE: LCALL BRITHDAY ;进入死循环,让数码管都一直亮着 LJMP ONEBRITHDAY:MOV R0,#75H;给R0一个单元地址75HMOV R3,#01H ;位选码只让第一个数码管亮MOV A,R3 ;将R3的值给ALOOP: MOV DPTR,#8002HMOVX @DPTR,AINC DPTRINC DPTRMOV A,@R0ADD A,#0DHMOVC A,@A+PCMOVX @DPTR,AACALL DL1MSINC R0MOV A,R3JB ACC.5,LOOP1RL AMOV R3,AAJMP LOOPLOOP1:RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH,DB 7DH,07H,7FH,6FH,77H,7CHDL1ms: MOV R7,#02HLOOP2: MOV R6,#0F6H ;1LOOP3: DJNZ R6,LOOP3 ;2DJNZ R7,LOOP2 ;2 1000-1*2-2*2-2*2*2-1*2=948 948%4=246(F6H)RET程序设计思路:在89c51内部的RAM中设置6个缓冲单元,分别存放显示器要显示的6位的数据。
单片机实训报告键盘和数码管显示(WORD档)
单片机实训报告(一)班级:测控 9 0 1学号:姓名实用文档实验名称:键盘和数码管显示实验目的:熟悉掌握ZLG7289的功能和特性,ZLG7289芯片各引脚名称及功能和ZLG7289与微控制器的接口,ZLG7289的SPI接口和控制指令。
同时进一步熟悉掌握keil软件的操作和编程。
实验原理:ZLG7289是一款数码显示驱动和键盘扫描管理的芯片。
主要有如下的特性:1.直接驱动8位共阴式数码管或64只独立的LED;2.管理多达64只按键,自动消除抖动;3.段电流可达15mA以上,位电流可达100mA;4.具有左移、右移、闪烁、消隐、段点亮等多种功能;5.与微控制器之间采用三线SPI总线接口,占用I/O资源少。
电路主要由芯片ZLG7289、8位共阴极数码管、64键的键盘矩阵以及单片机构成。
ZLG7289的控制电路图:实用文档电路的工作原理:当ZLG7289接收到单片机发出的指令(包括纯指令)后,经过读取、分析和处理,将会在数码管上显示相对应的操作指令。
当ZLG7289检测到有效的按键时,KEY脚将从高电平变为低电平,并一直保持到按键结束。
在此期间,如果ZLG7289接收到“读键盘数据指令”,则输出当前按键的键盘代码。
ZLG7289芯片各引脚名称及功能:引脚名称说明实用文档Zlg7289与微控制器的接口ZLG7289使用SPI串行总线与微控制器接口。
SPI接口SPI串行总线是Motorola公司推出的一种同步串行接口。
通常它需实用文档要四条线,就可与微控制器之间实现全双工的同步串行通讯。
SPI串行总线主要有如下的特性:1.采用主从模式(Master Slave)架构,支持多Slave模式,一般只支持单Master,Master控制时钟。
2.采用四线,实现全双工通信。
图1 SPI接口连线示意图示时钟极性选择和时钟相位选择。
CPOL控制位决定了设备激活后,而没有进行数据传输时,SCLK 的空闲(Idle)电平是高电平还是低电平。
描述八段led数码管共阴极和共阳极的两种接法
描述八段led数码管共阴极和共阳极的两种接法八段LED数码管是一种常见的显示器件,常用于计时、计数和显示数字等应用中。
它由8个LED灯组成,分别可以显示数字0-9和一些特殊符号。
八段LED数码管的接法主要有两种:共阴极和共阳极。
它们在接线和工作方式上有一些差异。
首先,我们来看一下共阴极的接法。
在共阴极接法中,所有的LED 灯的阴极都连接在一起,并接地。
而每个LED的阳极则分别接到控制电路中的IO口,通过控制IO口输出高低电平,来点亮或关闭相应的LED灯。
在这种接法中,输入低电平时LED灯亮起,而输入高电平时LED灯熄灭。
这种接法的好处是,控制电路的IO口数目较少,但需要使用NPN型晶体管来控制每一位。
其次,我们来看一下共阳极的接法。
在共阳极接法中,所有的LED 灯的阳极都连接在一起,并接电源的正极。
而每个LED的阴极则分别接到控制电路中的IO口,通过控制IO口输出高低电平,来点亮或关闭相应的LED灯。
与共阴极接法不同的是,输入高电平时LED灯亮起,输入低电平时LED灯熄灭。
这种接法的好处是,控制电路的IO口数目较多,但不需要使用晶体管。
在实际使用中,我们应根据具体的需求来选择合适的接法。
如果我们的控制器IO口较多,可以选择共阳极接法,简化电路设计。
如果IO口有限,可以选择共阴极接法,并使用晶体管来控制每一位。
除了接法不同,共阴极和共阳极的工作方式也有一些差异。
在共阴极接法中,控制IO口输出低电平时,LED灯亮起;而在共阳极接法中,控制IO口输出高电平时,LED灯亮起。
这一点需要我们在代码编写和硬件设计中注意。
总结起来,八段LED数码管共阴极和共阳极的接法有所不同。
共阴极接法是将所有LED灯的阴极连接在一起,并接地,适合IO口有限的情况;而共阳极接法则是将所有LED灯的阳极连接在一起,并接电源的正极,适合IO口较多的情况。
我们在实际应用中,应根据需求选择合适的接法,并结合代码编写和硬件设计完成相应的控制。
数码管显示
第3讲数码管显示第3讲数码管显示一、数码管显示原理我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。
所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。
数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。
而共阳极就是将八个LED的阳极连在一起。
其原理图如下。
其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。
一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。
显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。
数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。
所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为11000000,即0xc0。
可以看出两个编码的各位正好相反。
如下图。
二、点亮一个数码管下面以七段共阴数码管为例讲述如何点亮一个数码管。
l 51系列单片机的P0口没有上拉电阻(其他端口有),所以如果直接接数码管的段选线,那么不能将其点亮。
我们需要为其加上220欧姆的上拉电阻,注意,上拉电阻阻值不能过大。
实验原理图如下。
其中,7SEG-COM-CAT-GRN为七段共阴数码管,显示为绿色。
RES为电阻。
查找电阻时,需要选中下面的Resistors,如下图。
右击选中图中的电阻再左击,弹出的窗口中可改变它的阻值。
如下图。
那七个电阻看上去很乱,其实他们可以用一个排阻(RESPACK-7)代替。
如下图。
到这里原理图就画完了,我们开始写源程序。
让数码管显示字符“0”。
#includevoid main(){P0 = 0x3f; //P0口送字符…0‟的编码}显示效果如下。
硬件实验6 八段数码管显示实验
硬件实验6 八段数码管显示实验1.实验目的1)了解数码管实现显示字符的7段码编制方法;2)掌握查表法获得0-F的7段码的方法;3)掌握静态显示和动态显示的原理,硬件连接方式和程序编写方法。
2.预习要求1)了解数码管静态显示和动态显示接口电路的设计方法和特点;2)了解数码管动态显示的程序设计方法;3)理解运用串行口工作方式0扩展I/O连接数码管的方法;4)认真预习本节实验内容,设计实验硬件连接电路,编写实验程序。
3.实验说明1)LED数码管显示原理8段LED数码管有共阴极和共阳极两种结构。
对于共阴数码管,其8个LED的阴极连接在一起作为公共COM端;而共阳数码管中8个LED的阳极连接在一起作为公共COM端。
共阴数码管显示的必要条件是其COM端接地或接具有较大灌电流能力的输入端口,此时当某个发光二级管的阳极为高电平时,该发光二极管点亮;共阳数码管显示的必要条件是共阳极接电源或具有较强电流输出能力的输出端口,此时当某个发光二极管的阴极接低电平时,该发光二级管被点亮。
2)LED数码管显示方式A.静态显示方式静态显示的特点是每个数码管需要一个具有锁存功能的8位输出口,用来锁存待显示的段码。
将要显示数的7段码输出到端口,数码管就会显示并一直保持到接收到新的显示段码为止。
静态显示的优点:显示程序简单,占用CPU时间少。
但当数码管数量较多时,就需要外扩较多的输出端口,因此静态显示的缺点是占用硬件资源多,成本较高。
B.动态显示方式动态显示的特点是将多个数码管的相应段码线连在一起,接到一个8位输出端口,该端口称为段码输出口;同时将各个(如8个)数码管的COM端连接到一个8位输出端口,该端口称为位控输出口。
这样的连接使得8个数码管只要2个输出端口就可以实现控制,大大简化硬件电路。
但是由于多个数码管的段码是连在一起的,所以需要结合位控信号,分时输出不同数码管上显示的7段码,即需要采用动态显示扫描,轮流向段码输出口输出段码和向位控输出口输出位选信号,并进行1~2ms的短时延时;8个数码管轮流输出一遍后,约20ms后,就要进行一次显示刷新,这样才能利用发光管的余辉和人眼视觉暂留作用,得到全部数码管同时稳定显示的效果。
八段数码管显示
实验一八段数码管显示1、实验目的:(1)了解数码管动态显示的原理。
(2)了解74LS164扩展端口的方法。
2、实验要求:利用实验仪提供的显示电路,动态显示一行数据.3、实验电路图LED1LED2LED3LED4LED5LED64、实验器材:(1)超想-3000TB综合实验仪 1 台(2)超想3000仿真器 1 台(3)计算机 1 台5、实验连线无 6、实验说明:(1)本实验仪提供了8段码LED 显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有6位,用动态方式显示。
8段数码管是由8155的PB0、PB1经74LS164“串转并”后输出得到。
6位位码由8155的PA0口输出,经Ua2003反向驱动后,选择相应显示位。
74LS164是串行输入并行输出转换电路,串行输入的数据位由8155的PB0控制,时钟位由8155的PB1控制输出。
写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位移到74LS164中,并且实现移位。
向显示位选通地址输出高电平就可以点亮相应的显示位。
本实验仪中数据位输出地址为0e102H ,时钟位输出地址为0e102H ,位选通输出地址为 0e101H 。
本实验涉及到了8155 I0/RAM 扩展芯片的工作原理以及74LS164器件的工作原理。
(2)七段数码管的字型代码表显示字形g f e d c b a 段码 0 0 1 1 1 1 1 1 3fh 1 0 0 0 0 1 1 0 06h2 1 0 1 1 0 1 1 6bh3 1 0 0 1 1 1 1 4fh4 1 1 0 0 1 1 0 66h5 1 1 0 1 1 0 1 6dh6 1 1 1 1 1 0 1 7dh7 0 0 0 0 1 1 1 07h8 1 1 1 1 1 1 1 7fh9 1 1 0 1 1 1 1 6fh A 1 1 1 0 1 1 1 77h B 1 1 1 1 1 0 0 7ch C 0 1 1 1 0 0 1 39h D 1 0 1 1 1 1 0 5eh E 1 1 1 1 0 0 1 79h F1111 71hab c def g dp7、程序框图8、实验步骤1.将KEIL仿真器上40芯排线一端和实验箱上51CPU板上的40芯排针连接起来,将仿真器连接的USB或串口线与PC机对应的USB或串口连接起来,打开实验箱电源。
(完整word版)六位LED八段数码管显示
八段数码管显示1. 实验目的:(1)了解数码管动态显示的原理。
⑵了解74LS164扩展端口的方法。
2. 实验内容:利用实验仪提供的显示电路,动态显示一行数据3. 实验线路:PB0数据输入PBi时钟输入说明:这里只是显示草图,详细原理参见"8155接口实验"4. 实验器材:(1)QTH200下载式综合实验仪1台(2)QTH2008仿真器1台(3)计算机1台5. 实验说明:(1)本实验仪提供了8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有6位,用动态方式显示。
8段码是由8155 的PB0PB1经74LS164”串转并”后输出得到。
6位位码由8155(或8255)的PA0-5 口输出,经UA2003反向驱动后,选择相应显示位。
74LS164是串行输入并行输出转换电路,串行输入的数据位由8155的PB0控制,时钟位由8155的PB1控制输出。
写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位置到74LS164中,并且实现移位。
向显示位选通地址输出高电平就可以点亮相应的显示位。
本实验仪中数据位输出地址为0e102H,时钟位输出地址为0e102H,位选通输出地址为0e101H本实验涉及到了8155 I0/RAM扩展芯片的工作原理以及74LS164器件的工作原理。
(2)七段数码管的字型代码表如下表:显示字g f e d c b a 段码形0 0 1 1 1 1 1 1 3fh1 0 0 0 0 1 1 0 06h2 1 0 1 1 0 r 1 1 5bh3 1 0 0 1 1 1 1 4fh4 1 1 0 0 1 1 0 66h5 1 1 0 1 1 「° 1 6dh6 1 1 1 1 1 0 1 7dh7 0 0 0 0 1 1 1 07h8 1 1 1 1 1 r 1 1 7fh9 1 1 0 1 1 1 1 6fhA 1 1 1 0 1 1 1 77h b 1 1 1 1 1 :0 0 7ch C 0 1 1 1 0 0 1 39h d 1 0 1 1 1 1 0 5ehE 1 1 1 1 0 「0 1 79hF 1 1 1 0 0 0 1 71h6 •程序框图:开始示参数输出位选通信号董所有位显示延时取显示教据位选適信号移位I7.参考程序(SY10.ASM):OUTBIT equ 0e101h ;位控制口CLK164 equ 0e102h ;段控制口(接164 时钟位)DAT164 equ 0e102h ;段控制口(接164 数据位) IN equ 0e103h ; 键盘读入口LEDBuf equ 60h ; 显示缓冲Num equ 70h ;显示的数据DelayT equ 75horg 0000hIjmp StartLEDMAP:;八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hDelay:; 延时子程序mov r7, #0DelayLoop:djnz r7, DelayLoopdjnz r6, DelayLoop ret DisplayLED: mov r0, #LEDBuf mov r1, #6 ; 共6 个八段管mov r2, #00100000b ; 从左边开始显示Loop: mov dptr, #OUTBIT mov a, #00h movx @dptr, a ; 关所有八段管mov a, @r0 mov B, #8 ; 送164 DLP: rlc a mov r3,a mov acc.0, c ANL A, #0FDH mov dptr, #DAT164 movx @dptr, a mov dptr,#CLK164 orl a,#02h movx @dptr, a anl a,#0fDh movx @dptr, a mov a, r3 djnz B, DLP mov dptr, #OUTBIT mov a, r2 movx @dptr, a ; 显示一位八段管mov r6, #1 call Delay mov a, r2 ; 显示下一位rr a mov r2, a inc r0 djnz r1, Loop mov dptr, #OUTBIT mov a, #0 movx @dptr, a ; 关所有八段管retStart: mov dptr,#0e100h mov a,#03h movx @dptr,a mov sp, #40hmov Num, #0MLoop:inc Nummov a, Nummov b, amov r0, #LEDBufFillBuf:mov a, banl a, #0fhmov dptr, #LEDMapmovc a, @a+dptr ; 数字转换成显示码mov @r0,a ; 显示在码填入显示缓冲inc r0 inc bcjne r0, #LEDBuf+6, FillBufmov DelayT,#30DispAgain:call DisplayLED ; 显示djnz DelayT,DispAgainljmp MLoopEND八位数码管显示:8155 控制参考程序2:对8155 初始化,使I/O 口控制LED 的显示情况。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
八段数码管显示1.实验目的:(1)了解数码管动态显示的原理。
(2)了解74LS164 扩展端口的方法。
2.实验内容:利用实验仪提供的显示电路,动态显示一行数据。
3.实验线路:PB0 数据输入PB1 时钟输入说明:这里只是显示草图,详细原理参见"8155 接口实验"4.实验器材:(1)QTH2008下载式综合实验仪 1 台(2)QTH2008仿真器 1 台(3)计算机 1 台5.实验说明:(1)本实验仪提供了8 段码LED 显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有6 位,用动态方式显示。
8 段码是由8155 的PB0、PB1 经74LS164“串转并”后输出得到。
6 位位码由8155(或8255) 的PA0-5 口输出,经uA2003 反向驱动后,选择相应显示位。
74LS164 是串行输入并行输出转换电路,串行输入的数据位由8155 的PB0 控制,时钟位由8155 的PB1 控制输出。
写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位置到74LS164 中,并且实现移位。
向显示位选通地址输出高电平就可以点亮相应的显示位。
本实验仪中数据位输出地址为0e102H,时钟位输出地址为0e102H,位选通输出地址为0e101H。
本实验涉及到了8155 I0/RAM 扩展芯片的工作原理以及74LS164 器件的工作原理。
7.参考程序(SY10.ASM):OUTBIT equ 0e101h ; 位控制口CLK164 equ 0e102h ; 段控制口(接164 时钟位) DAT164 equ 0e102h ; 段控制口(接164 数据位) IN equ 0e103h ; 键盘读入口LEDBuf equ 60h ; 显示缓冲Num equ 70h ; 显示的数据DelayT equ 75horg 0000hljmp StartLEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h Delay: ; 延时子程序mov r7, #0DelayLoop:djnz r7, DelayLoopdjnz r6, DelayLoopretDisplayLED:mov r0, #LEDBufmov r1, #6 ; 共6 个八段管mov r2, #00100000b ; 从左边开始显示Loop:mov dptr, #OUTBITmov a, #00hmovx @dptr, a ; 关所有八段管mov a, @r0mov B, #8 ; 送164DLP:rlc amov r3, amov acc.0, cANL A, #0FDHmov dptr, #DAT164movx @dptr, amov dptr, #CLK164orl a,#02hmovx @dptr, aanl a,#0fDhmovx @dptr, amov a, r3djnz B, DLPmov dptr, #OUTBITmov a, r2movx @dptr, a ; 显示一位八段管mov r6, #1call Delaymov a, r2 ; 显示下一位rr amov r2, ainc r0djnz r1, Loopmov dptr, #OUTBITmov a, #0movx @dptr, a ; 关所有八段管retStart: mov dptr,#0e100hmov a,#03hmovx @dptr,amov sp, #40hmov Num, #0MLoop:inc Nummov a, Nummov b, amov r0, #LEDBufFillBuf:mov a, banl a, #0fhmov dptr, #LEDMapmovc a, @a+dptr ; 数字转换成显示码mov @r0,a ; 显示在码填入显示缓冲inc r0inc bcjne r0, #LEDBuf+6, FillBufmov DelayT,#30DispAgain:call DisplayLED ; 显示djnz DelayT,DispAgainljmp MLoopEND八位数码管显示:8155控制参考程序2:对8155初始化,使I/O口控制LED的显示情况。
ORG 0000HMOV DPTR,#4400H ;指向8155命令寄存器MOV A,#03HMOVX @DPTR,A ;写入控制字。
A口、B口为输出,C口为输入INC DPTR ;指向8155A口MOV A,#00HMOVX @DPTR,A ;向A口写入00H,;输出选中所有8个LEDINC DPTR ;指向8155B口MOV A,#0FFHMOVX @DPTR,A ;向B口写入某个字型码,输出点亮8个LEDSJMP $8155控制8位数码管和键盘电路图2) 多位动态显示接口应用采用8051与8155接口,再采用8155的I/O口控制数码管的段码和位码,同时,采用动态扫描方式依次循环点亮各位数码管,即可构成多位动态数码管显示电路。
整体设计思路如下:由8155的A口控制段码输出,C口控制位码输出。
采用定时器中断方式实现动态扫描,每隔20ms扫描一次,每位数码管点亮的时间为1ms。
在单片机内部RAM设置待显示数据缓冲区,由查表程序完成显示译码。
将缓冲区内待显示数据转换成相应的段码,再将段码通过8051的P0口送至8155的A 口;位码数据由累加器循环左移指令产生,再通过P0口送至8155的C口。
硬件电路设计如下:上图为数码管动态显示电路。
其中,8路驱动采用74LS244总线驱动器,6路驱动采用74LS07 OC门驱动器。
74LS244输出经300 Ω上拉(或限流)电阻后接至电源,同时,接至数码管的各段,控制数码管的显示字符。
74LS07输出经1 kΩ上拉电阻接至电源,同时接至各位数码管的公共端,控制每位数码管的显示时间,实现动态扫描。
模拟生产线计数的按键信号接至P3.3口。
六位实现6位显示的秒表:从左到右每2位LED分别显示小时、分和秒,并正常计数进位;上电后小时00 00 00,当显示到23 59 59后,6位显示清零,从头开始显示。
软件设计如下:以单片机内部RAM的30H~35H单元作为显示数据缓冲区,六位数码管段码的获取及每位数码管的显示时间均由显示子程序完成。
采用定时器中断方式实现动态扫描,每隔50 ms扫描一次,每位数码管点亮的时间为1 ms。
单片机每接收一次按键信号(即模拟交通灯改变计数信号),显示缓冲区的待显示数据被刷新一次,数码管相应的显示数值也就随之发生变化。
如连续按键进行测试,即可产生计数数据从左至右循环移动的效果。
根据图中IO/、与单片机的连接可知,可以确定命令/状态字A口、B口、C口、计数值低8位寄存器及高6位和方式寄存器地址分别为:0100H、0101H、0102H、0103H、0104H、0105H 。
软件流程图如下页图所示:主程序:MSEC EQU 20H ;50MS计数单元SECOND EQU 21H ;秒单元MIN EQU 22H ;分单元HOUR EQU 23H ;小时单元ORG 0000HLJMP MAINORG 000BHLJMP CONTMAIN: MOV SP, #3FHMOV TMOD #01HMOV TH0,#3CHMOV TL0,#0B0HMOV IE, #82HMOV SECOND, #00HMOV MIN, #00HMOV HOUR, #00HMOV MSEC, #14HMOV 35H, #00HMOV 34H, #00HMOV 33H, #00HMOV 32H, #00HMOV 31H, #00HMOV 30H, #00HSETB TR0START:LCALL DISPSJMP START;LED动态显示子程序;功能:动态显示六个数码管;入口:显示缓冲区30H—35H中待显示的6个数据DISP: MOV R0,#30H ;显示缓冲区首址MOV R7,#00H ;设定每位显示延时时间MOV R2,#06H ;显示位数MOV R3,#20H ;共阳管位码初始值,从右端先亮MOV A,@R0 ;取显示缓冲区的一个数据DISP1:MOV DPTR, #TAB ;查表首址给DPTRMOVC A, @A+DPTR ;查表得到显示字符的字型码MOV P0 , A ; 将字型码送P0口MOV DPTR, #0101HMOVX @DPTR, A ;字型码送8155A口MOV A , R3 ;位选码送AMOV P2 , A ;位码送P2口MOV DPTR, #0103HMOVX @DPTR, A ;位码送8155C口DJNZ R7 , $ ;延时DJNZ R7 , $ ;延时RR A ;位码右移MOV R3,A ;位码回送R3INC R0 ;指向下一位MOV A,@R0 ;取显示缓冲区下一个数据DJNZ R2,DISP1 ;6位显示一遍吗?RETTAB:DB 0C0H, 0F9H, 0A4H , 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H主程序流程图:;定时器中断子程序:;功能:50MS执行一次,完成秒、分、小时单元的刷新并拆开放到显示缓冲区;出口:显示缓冲区30H—35H中存放待显示的6个数据CONT:PUSH ACCMOV TH0,#3CHMOV TL0,#0B0HDJNZ MSEC, RN ;判断到20次吗?(暨1秒)到1秒,返回主程序MOV MSEC, #14H ;1秒到,重置MSEC=20INC SECONDMOV A, SECONDMOV R1,#31H ;指向显示缓冲区的31H单元LCALL BINBCD ;调用拆字子程序,将秒拆开为十位、个位,分别放31H,30HMOV A, SECONDMOV A, #0MOV SECOND, A ;60秒到,秒单元清零显示子程序流程图:MOV R1,#31H ;指向31H单元LCALL BINBCD ;调用拆字子程序MOV A, MININC A ;分单元内容加1MOV MIN, AMOV R1,#33H ;R1指向33H单元LCALL BINBCD ;调用拆字子程序,将分单元拆开为十位、个位,分别存放33H和32H单元MOV A, MINMOV A, #00MOV MIN, A ;60分到,分单元清零MOV R1,#33H ;指向33H单元LCALL BINBCD ;调用拆字子程序MOV A, HOURINC A ;小时单元内容加1MOV HOUR, AMOV R1,#35H ;R1指向35H单元LCALL BINBCD ;调用拆字子程序,将小时拆开为十位、个位,分别存放到35H和34H单元MOV A, HOURCJNE A, #24,RN ;到24小时吗?未到返回主程序MOV A, #00MOV HOUR, A ;到24小时,小时单元清零MOV R1,#35HLCALL BINBCDRN:POP ACCRETI定时中断子程序流程图:;BCD码拆字子程序:;入口参数:A,待拆开的BCD码;R1:拆开后BCD码存放的末地址;功能:将A中的两个十六进制数拆开为哦两个BCD码,分别存放到R1指向的两个缓冲单元BINBCD:MOV B, #10DIV ABMOV @R1,ADEC R1MOV A, BMOV @R1,ARETEND。