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--); }

动态显示学号

动态显示学号

实验五学号的显示一、实验目的利用数码管动态扫描显示的原理编写程序,实现自己的学号的显示。

二、实验原理和内容实验内容:1在SmartSOPC实验箱上完成了LED数码管的动态显示“40710840”八个数字。

2放慢扫描速度演示动态显示的原理过程。

实验原理:数码管的八个段:a,b,c,d,e,f,g,h(h是小数点)都分别连接到SEG0-SEG7,8个数码管分别由八个选通信号DIG0-DIG7来选择,被选通的数码管显示数据,其余关闭。

三、实验步骤1启动QuartusⅡ建立一个空白工程,然后命名为dled.qpf。

2新建Verilog HDL源程序文件scan_led.v,输入程序代码并保存,进行综合编译知道成功为止。

3从设计文件创建模块,有scan_led.v生成名为scan_led.bsf 的模块符号文件。

4将光盘中EDA_Component目录下的int_div.bsf和int_div.v 拷贝到工程目录。

5添加常量兆功能模块。

6新建图形设计文件(顶层模块)命名为dled.bdf并保存。

7选择目标器件并对相应的引脚进行锁定。

8将dled.bdf设置为顶层实体。

对该工程文件进行全程编译处理,直到编译成功为止。

9连接硬件,下载程序。

10观察LED数码管上的数字是否为“40710840”;然后修改分频模块的参数为:F_DIV为24000000,F_DIV_WIDTH为25,再重新编译下载,观察这次LED数码管上显示的数据是否动起来了。

四、程序代码:module dec17s(clk,dig,seg);inputclk;output[7:0]seg;output[7:0]dig;reg [7:0]seg;reg [7:0]dig;reg[3:0]m;always@(posedgeclk)beginif (m==4'hf)m<=0;else m<=m+1;case(m)4'h0:begin dig<=8'b11111110; seg<=8'h99;end4'h1:begin dig<=8'b11111101; seg<=8'hc0;end4'h2:begin dig<=8'b11111011; seg<=8'hf8;end4'h3:begin dig<=8'b11110111; seg<=8'hf9;end4'h4:begin dig<=8'b11101111; seg<=8'hc0;end4'h5:begin dig<=8'b11011111; seg<=8'hf9;end4'h6:begin dig<=8'b10111111; seg<=8'ha4;end4'h7:begin dig<=8'b01111111; seg<=8'hf9;end default:seg<=8'hc0;endcaseendendmodule五、实验数据与结果通过同学跟老师的指导,再经过几次的调试,终于在数码管上显示出了自己的学号:40710121六、实验总结通过数码管编译显示自己的学号后8位,学会数码管动显示的原理,以及如何编写程序来实现数码管的静态与动态显。

单片机数码管动态显示

单片机数码管动态显示

动态显示1.掌握LED数码管显示及其一般电路结构;2.掌握LED动态显示程序的一般设计方法。

一、实验内容动态显示,也称为扫描显示。

显示器由6个共阴极LED数码管构成。

单片机的P0口输出显示段码,由一片74LS245输出给LED管;由P1口输出位码,经74LS04输出给LED显示。

二、实验步骤1、打开Proteus ISIS编辑环境,按下表所列的元件清单添加元件。

图1 动态显示实验电路原理图2、按实验要求在KeilC中创建项目,编辑、编译程序。

3、将编译生成的目标码文件(后缀为.Hex)传入Proteus的实验电路中。

4、在Proteus ISIS仿真环境中运行程序,观察实验运行结果并记录。

三、实验要求1.编写一显示程序显示201071;2.显示特殊字符good;3.调整软件延时子程序的循环初值,逐渐加大每一位LED点亮的时间,观察程序运行结果。

四、参考程序dbuf equ 30h ;置存储区首址temp equ 40h ;置缓冲区首址org 00hmov 30h,#2 ;存入数据mov 31h,#0mov 32h,#1mov 33h,#0mov 34h,#7mov 35h,#1mov r0,#dbufmov r1,#tempmov r2,#6 ;六位显示器mov dptr,#segtab ;段码表首地址dp00: mov a,@r0 ;取要显示的数据movc a,@a+dptr ;查表取段码mov @r1,a ;段码暂存inc r1inc r0djnz r2,dp00disp0: mov r0,#temp ;显示子程序mov r1,#6 ;扫描6次mov r2,#01h ;从第一位开始dp01: mov a,@r0mov p0,a ;段码输出mov a,r2 ;取位码mov p1,a ;位码输出acall delay ;调用延时mov a,r2rl amov r2,ainc r0djnz r1,dp01sjmp disp0segtab: db 3fh,06h,5bh,4fh,66hdb 6dh,7dh,07h,7fh,6fhdelay: mov r4,#03h ;延时子程序aa1: mov r5,0ffhaa: djnz r5,aadjnz r4,aa1retend实验原理MCS-51单片机内设置了两个可编程的16位定时器T0和T1,通过编程,可以设定为定时器和外部计数方式。

单片机控制数码管动态扫描显示原理

单片机控制数码管动态扫描显示原理

P02 P03 P04 P05 P06
11 P01
P00
7 4 2 110
3
a b c d e f g dp
DPY
a
a
a
a
f g bf g bf g bf g b
e
ce
ce
ce
c
d
d
d
d
dp
dp
dp
dp
DPY 4 -LED
P20 P21 6 C0 P22 8 C2 P23 9 C3
12 C4
LED
U1
一、工作方式寄存器TMOD
工作方式寄存器TMOD用于设置定时/计数器的 工作方式,低四位用于T0,高四位用于T1。其格式 如下:
GATE:门控位。GATE=0时,只要用软件使TCON中的 TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时, 要用软件使TR0或TR1为1,同时外部中断引脚INT0/1也为 高电平时,才能启动定时/计数器工作。即此时定时器的启 动条件,加上了INT0/1引脚为高电平这一条件。
VCC GND RXD TXD ALE/ P PSEN
40 20 10 11 30 29
P 14 P 15 P 16 P 17
8 K9 C K13
9 K10 D K14
A K11 E K15
B F
动态显示
动态显示的特点是将所有位数码管的段选线并联在 一起,由位选线控制是哪一位数码管有效。这样一来, 就没有必要每一位数码管配一个锁存器,从而大大地简 化了硬件电路。选亮数码管采用动态扫描显示。所谓动 态扫描显示即轮流向各位数码管送出字形码和相应的位 选,利用发光管的余辉和人眼视觉暂留作用,使人的感 觉好像各位数码管同时都在显示。动态显示的亮度比静 态显示要差一些,所以在选择限流电阻时应略小于静态 显示电路中的。

数码管显示

数码管显示

数码管显示第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’的编码}显示效果如下。

数码管显示(全面)

数码管显示(全面)

• 程序设计内容
由于显示的数字0-9的字形码没有规律可循,只能采用 查表的方式来完成P0口对数码管的控制。方法是找出 共阴极数码管显示0-9的字形码,按着数字0-9的顺序, 把这十个字形码放入数组table[]中。
• C语言源程序 • 调试与仿真
4.3 I/O口应用实例与仿真
例4.6 动态数码管显示的proteus仿真及C语言 程序设计
4.3 I/O口应用实例与仿真
• 程序设计内容
(1)动态扫描方法:动态扫描采用各数码管循环轮流 显示的方法,本例中,先让左边第一位数码管显示数 字“1”,延时一定时间后,第二位显示“2”,以此类 推,到第五位显示“5”后,又从“1”开始循环显示。 当循环显示频率较高时,利用人眼的暂留特性,我们 看到这五位数码管仿佛在同时显示,而看不出闪烁显 示现象。这种显示需要一个接口完成字形码的输出 (字形选择),另一接口完成各数码管的轮流点亮 (数位选择)。需要注意一点,由于电路的特性,在 点亮每一位数码管之前,一定要对整个数码管清屏 (场消隐),即让所有位选信号都处于不被选中状态。
g f GND a b a a f e d g b c dp b c d e f g dp a b c d e f g dp
+5V
·
e d GND c dp
(a)
共阴极
(b)
共阳极
使用LED显示器时,要注意区分这两种不同的接法。为了显 示数字或字符,必须对数字或字符进行编码。七段数码管加上一 个小数点,共计8段。因此为LED显示器提供的编码正好是一个字 节。TX-1B实验板用共阴LED显示器,根据电路连接图显示16进制
数码管是如何显示出字符的 数码管静态显示与动态显示原理
显示器及其接口

硬件实验四--八段数码管显示

硬件实验四--八段数码管显示

硬件实验四 八段数码管显示一、实验要求利用实验箱提供的显示电路,动态显示一行数据.二、实验目的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 。

连线 连接孔1连接孔2 1KEY/LED_CS CS0 位选通信号 (0x002H) 段码输出(0x004H) 数据总线七段数码管的字型代码表如下表:五、程序参考程序、框图OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口data segmentLEDBuf db 6 dup(?) ; 显示缓冲Num db 1 dup(?) ; 显示的数据DelayT db 1 dup(?)LEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h data endscode segmentassume cs:code, ds:dataDelay proc nearpush ax ; 延时子程序push cxmov al, 0mov cx,axloop $pop cxpop axretDelay endpDisplayLED proc nearmov bx, offset LEDBufmov cl, 6 ; 共6个八段管mov ah, 00100000b ; 从左边开始显示DLoop:mov dx, OUTBITmov al, 0out dx,al ; 关所有八段管mov al, [bx]mov dx, OUTSEGout dx,almov dx, OUTBITmov al, ahout dx, al ; 显示一位八段管push axmov ah, 1call Delaypop axshr ah, 1inc bxdec cljnz DLoopmov dx, OUTBITmov al, 0out dx,al ; 关所有八段管retDisplayLED endpStart proc nearmov ax, datamov ds, axmov Num, 0MLoop:inc Nummov ch,Nummov ah,0mov cl,6mov bx,offset LEDBufFillBuf:mov si, offset LEDMapmov al,chand al,0fhadd ax,simov si,axmov al,[si] ; 数据转换成显示码 mov [bx], al ; 显示码存入显示缓冲 inc bxinc chdec cljnz FillBufmov DelayT,20DispAgain:call DisplayLED ; 显示dec DelayTjnz DispAgainjmp MLoopStart endpcode endsend start六、实验步骤(1) 在实验箱断电的情况下连好线。

数码管显示字符

数码管显示字符

▪6 7 8 9 A B
▪ 0x39 , 0x5e , 0x79 , 0x71 , 0x00
▪C D E
F 无显示
精选ppt
4
LED数码显示方式及电路
静态显示方式
LED显示器工作方式有两种:静态显示方式和动态显示 方式。静态显示的特点是每个数码管的段选必须接一个8位 数据线来保持显示的字形码。当送入一次字形码后,显示字 形可一直保持,直到送入新字形码为止。这种方法的优点是 占用CPU时间少,显示便于监测和控制。缺点是硬件电路比 较复杂,成本较高。
R 1K
8
7
6 P 07
5 P 06
4 P 05
Hale Waihona Puke 3 P 042 P 03
P01 1 P 02
P 00
P 07
110 P 06
2 P 05
4 P 04
7 P 03
11 P01 P 02
P 00
3
5
a b c d e f g dp
DPY
a
a
a
a
f g bf g bf g bf g b
e
ce
ce
ce
c
d
d
T1 T0
EA/VP
X1 X2
RE SET
RD WR
89C52
10
11
12
13
14
16 15
5V
9
P0 0 P0 1 P0 2 P0 3 P0 4 P0 5 P0 6 P0 7
P2 0 P2 1 P2 2 P2 3 P2 4 P2 5 P2 6 P2 7
VC C GND RXD TXD AL E/P PSEN
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

LED数码管动态显示
共阳极的LED数码管,共阳就是7段的显示字码共用一个电源的正。

原理示意图:
从上图可以看出,要是数码管显示数字,有两个条件:1、是要在VT端(3/8脚)加正电源;2、要使(a,b,c,d,e,f,g,dp)端接低电平或“0”电平。

这样才能显示的。

例:如要显示“0”,则要 a,b,c,d,e,f六个字段亮就显示“0”了,而g和dp字段不亮;这样只要向P0口送出相应的代码即可,
编码方法如下表:
dp g f e d c b a 显示的
字符编码
P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0
0 0 0 1 0 0 1 0 0 0C0H
1 0 1 1 1 0 1 1 1 0F9H
1 1 0 0 0 0 1 0
2 0A4H
1 0 1 0 0 0 1 0 3 0B0H
0 0 1 0 1 0 1 1 4 99H
0 0 1 0 0 1 1 0 5 92H
0 0 0 0 0 1 1 0 6 82H
1 0 1 1 1 0 1 0 7 0F8H
0 0 0 0 0 0 1 0 8 80H
0 0 1 0 0 0 1 0 9 90H
程序使用时,只需将显示数字所对应的编码送P0口,然后打开相应的数码管显示位的电源控制即可显示相应的字符。

双位数码管显示控制程序及说明
START: MOV R0,#0 ;清零
MOV DPTR,#TABLE ;指定查表起始地址LOOP: ACALL DISPLAY ;调用子程序DISPLAY INC R0 ;R0加1
CJNE R0,#100,LOOP ;R0未到100则转换
JMP START ;跳转
DISPLAY: MOV A,R0 ;把R0里的数据送入A MOV B,#10 ;把10送入B
DIV AB ;a b相除
MOV 20H,A ;十位送入20H
MOV 21H,B ;个位送入21H
MOV R3,#50 ;把50送入R3
LOOP1: MOV A,21H ;取个位数
ACALL CHANG ;调用子程序CHANG
CLR P2.4 ;开个位显示
ACALL DLY ;调用子程序DLY
SETB P2.4 ;关闭个位显示
MOV A,20H ;取十位数
6
ACALL CHANG ;调用子程序CHANG CLR P2.5 ;开十位显示
ACALL DLY ;调用子程序DLY SETB p2.5 ;关闭十位显示
DJNZ R3,LOOP1 ;循环50次
RET ;子程序返回
CHANG: MOVC A,@A+DPTR ;查表
MOV P0,A ;查表结果送入P0
RET ;子程序返回
DLY: MOV R6,#20 ;典型延时子程序延时
D1: MOV R7,#248 ;10ms
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: DB 0C0H,0F9H,0A4H ;表数据共阳极数码管显示代码 DB 0B0H,99H,92H,82H
DB 0F8H,80H,90H
END。

相关文档
最新文档