7.1 LED数码管基础知识
实物图与电气原理图如下:
LED数码有共阳和共阴两种,把这些LED发光二极管的正极接到一块(一般是拼成一个8字加一个小数点)而作为一个引脚,就叫共阳的,相反的,就叫共阴的,那么应用时这个脚就分别的接VCC和GND。再把多个这样的8字装在一起就成了多位的数码管了。
如何判断共阳极共阴极LED数码管呢?
方法一:找公共共阴和公共共阳,首先我们找个电源(3到5伏)和1个1K(几百的也欧的也行)的电阻,VCC串接个电阻后和GND接在任意2个脚上,组合有很多,但总有一个LED会发光的找到一个就够了,然后用GND不动,VCC(串电阻)逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阴的了。相反用VCC不动,GND逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阳的了。
方法二:采用万用表(只对那些尺寸较小的数码管来说,大的恐怕点不亮)。我们把万用表打到喇叭当(带喇叭响的那档,测短路那档),首先我们假设LED数码管为共阳极,我们用红表笔(+)接LED数码管的3脚(或者8脚),用黑色表笔点其他管教,如果有发光,则为共阳极数码管,如果没有管教使LED某段发光就是共阴极。这个方法也可以测试数码管某段的好坏。
LED数码管管脚识别
8段数码管是如何显示单片机数据的?
用单片机驱动LED数码管有很多方法,按显示方式分,有静态显示和动态显示。首先介绍静态显示方法。
静态显示就是显示驱动电路具有输出锁存功能,单片机将所有要显示的数据送出后就不再控制LED,直到下一次显示时再传送一次新的显示数据。静态显示的数据稳定,占用的CPU时间少。静态显示中,每一个显示器都要占用单独的具有锁存功能的I/O接口,该接口用于笔划段字型代码。这样单片机只要把要显示的字形代码发送到接口电路,该字段就可以显示发送的字形。要显示新的数据时,单片机在发送新的字形码。
另一种方法是动态扫描显示。动态扫描方法是用其接口电路把所有显示器的8个笔画段a-h同名端连在一起,而每一个显示器的公共极COM各自独立的受I/O线控制。CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是哪个显示器亮,则取决于COM段,而这一段是由I/O控制的,由单片机决定何时显示哪一位了。
动态扫描用分时的方法轮流控制各个显示器的COM端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位显示器的点亮时间极为短暂,但由于人的视觉暂留现象及发光二极管的余晖效应,给人的印象就是一组稳定的显示数据。
段码与字型的对应关系
表 段码与字型的关系(共阴极)
段码 D7 DP D6 g D5 f D4 e D3 d D2 c D2 b D0 a 字形
3FH 0 0 1 1 1 1 1 1 0
06H 0 0 0 0 0 0 1 0 1
5BH 0 1 0 1 1 0 1 1 2
4FH 0 1 0 0 1 1 1 1 3
66H 0 1 1 0 0 1 1 0 4
6DH 0 1 1 0 1 1 0 1 5
7DH 0 1 1 1 1 1 0 1 6
07H 0 0 0 0 0 1 1 1 7
7FH 0 1 1 1 1 1 1 1 8
6FH 0 1 1 0 1 1 1 1 9
77H 0 1 1 1 0 1 1 1 a
7CH 0 1 1 1 0 1 1 1 b
39H 0 0 1 1 1 0 0 1 c
5EH 0 1 0 1 1 1 1 0 d
79H 0 1 1 1 1 0 0 1 e
71H 0 1 1 1 0 0 0 0 f
表 段码与字型的关系(共阳极极)
dp g f e d c b a 显示的字符 编码
P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0
1 1 0 0 0 0 0 0 0 C0H
1 1 1 1 0 0 1 1 1 F3H
1 0 1 0 0 1 0 0 2 A4H
1 0 1 1 0 0 0 0 3 B0H
1 0 0 1 1 0 0 1 4 99H
1 0 0 1 0 0 1 0 5 92H
1 0 0 0 0 0 1 0 6 82H
1 1 1 1 1 0 0 0 7 F8H
1 0 0 0 0 0 0 0 8 80H
1 0 0 1 0 0 0 0 9 90H
1 0 0 0 1 0 0 0 A 88H
1 0 0 0 1 1 1 0 F 8EH
7.2 实验仪显示模块分析
本实验仪配置带8位动态扫描显示模块一个。实物图如下:
为减少IO的使用,我们采用串入并出芯片CD4094来扩展了IO口,即采用3个IO来实现数据的传输。
原理图如下:
所以,我们占用3个IO来传输数据,8个IO来进行8个LED数码管的位选。
在本实验仪中链接管教分布如下:
STK-----P2.5
DAT-----P2.6
CLK-----P2.7
B0、B1、B2、B3、 B4、 B5、 B6、 B7接P0口(P0.0 P0.1 P0.2 P0.3 P0.4
P0.5 P0.6 P0.7)
7.2 CD4094工作原理
CD4094是带输出锁存和三态控制的串入/并出高速转换器,具有使用简单、功耗低、驱动能力强和控制灵活等优点。
CD4094的引脚定义如图。其中{1}脚为锁存端,{2}脚为串行数据输入端,{3}脚为串行时钟端。{1}脚为高电平时,8位并行输出口Q1~Q8在时钟的上升沿随串行输入而变化;{1}脚为低电平时,输出锁定。利用锁存端可方便地进行片选和级联输出控制。{15}脚为并行输出状态控制端,{15}脚为低电平时,并行输出端处在高阻状态,在用CD4094作显示输出时,可使显示数码闪烁。{9}脚QS、{10}脚Q′S是串行数据输出端,用于级联。QS端在第9个串行时钟的上升沿开始输出,Q′S端在第9个串行时钟的下降沿开始输出。
当CD4094电源为5V时,输出电流大于3.2mA,灌电流为1mA。串行时钟频率可达2.5MHz。

时序如下:
7.3 第一位LED数码管显示要显示的数据
第一步:要显示第一位数码管,首先我们先选定第一个的位选。因为我们采用的是共阳极的数码管,所以我们置P0.0=0即可。
第二步:这个时候该送数据了。如果我们不用4094的话,一个IO对应一个段。那么我们只需要送出一个字节数据给LED就可以显示。比如我们链接图如下:
如果我们要显示数字“1”我们只需要b c 亮。那么需要P0.1=0 P0.2=0 其他均为1.所以我们送0F9给P0口即可。即为:P0=0xff。
因为我们采用CD4094来传输数据,由于我们占用了串口,所以我用IO口模拟串口的方式来传输数据。
时序图见上面。
传输程序如下:
//显示与单片机接口
sbit DIS_STB=P2^5;
sbit DIS_SDA=P2^6;
sbit DIS_CLK=P2^7;
//发送一个字节数据
void send(unsigned char a)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(_crol_(a,i)&0x80)
DIS_SDA=1;
else
DIS_SDA=0;
DIS_CLK=0;
DIS_CLK=1;
}
}
7.4关于DG3000显示插座的分析与使用
DG3000实验板显示部分采用插座的形式,主要是适应不同的显示功能,本开发板支持显示如下:
1、8位动态显示模块(标准配置);
2、6位静态显示模块;
3、1602字符液晶显示模块;
4、128*64图形液晶显示(支持并行和串行两种方式);
5、16*16点阵模块(支持1字两字多字的点阵模块);
上面五种模块,本启蒙电子均提供,用户可以根据自己的需求来选择购买。
DG3000 插座形式如下:
上图中:
插座1:为 8位动态显示模块、6位静态显示模块、1602字符液晶模块和16*16点阵模块插座。
自左向右依次为
插座管脚自左向右 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
与单片机连接脚 地 电源 可调端 P2.5 P2.6 P2.7 P0.0 P0.1 P0.2 P0.3 P0.4
P0.5 P0.6 P0.7 地 电源
插座2:为 128*64模块插座。
插座自左向右分别为:20-19-18-17-16-15-14-13-12-11-10-9-8-7-6-5-4-3-2-1(标号对应128*64模块管脚的标号)
对应单片机管脚为:
GND-VCC-VO-P1.0-P1.1-P1.2-P0.7-P0.6-P0.5-P0.4-P0.3-P0.2-P0.1-P0.0-P2.7-P2.6-P2.5-NC-VCC-GND
对应128*64的管脚为:
LEDK-LEDA-NC-/RST-NC-PSB-DB7-DB6-DB5-DB4-DB3-DB2-DB1-DB0-SCLK-SID-CS-NC-VDD-VSS
7.5关于显示模块再插座接插的位置图
8位动态扫描显示模块:
7.6数码管显示字符“5”程序(C51)
/----------------------------------------------------------
//启蒙电子:http://www.51c51.net
//QQ:501501561 502502562
//E-Mail:atc51@163.com 501501561@163.com
//----------------------------------------------------------
//程序设计:豆豆
//适用型号:DG3000综合开发试验仪
//----------------------------------------------------------
//----------------------------------------------------------
//程序作用:显示字符“5”
//----------------------------------------------------------
#include<REG52.h>
#include <intrins.h>
sbit SDA=P2^6; //定义管脚
sbit CLK=P2^7;
sbit Cbit1=P0^0;//第一位数码管控制位
unsigned char k;//定义变量
unsigned char code led[20]=
{0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x89,0x8C};
//4094送数子程序
void send(unsigned char a)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(_crol_(a,i)&0x80)
SDA=1;
else
SDA=0;
CLK=0;
CLK=1;
}
}
//主程序
main()
{
Cbit1=0;//选中第一个数码管,让第一个数码管显示;
k=led[0x05];//把要显示的数查处段码给变量K,此处显示5
send(k);//把数据通过4094发出去
while(1) //循环
{
;
}
}
7.7数码管循环显示字符“51c51”程序(C51)
//----------------------------------------------------------
//程序作用:循环显示预定字符51c51
//----------------------------------------------------------
#include<REG52.h>
#include <intrins.h>
sbit SDA=P2^6; //定义管脚
sbit CLK=P2^7;
sbit Cbit1=P0^0;//第一位数码管控制位
unsigned char k;//定义变量
unsigned char code led[20]=
{0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x89,0x8C};
//延时程序
void delay(unsigned int k)
{ unsigned int i,j;
for(i=0;i<k;i++)
for(j=0;j<100;j++);
}
//发送数据
void send(unsigned char a)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(_crol_(a,i)&0x80)
SDA=1;
else
SDA=0;
CLK=0;
CLK=1;
}
}
//主程序
main()
{
unsigned char a[5]={0x05,0x01,0x0c,0x05,0x01},i;//循环显示51c51字符
Cbit1=0;//选中第一个数码管,让第一个数码管显示;
while(1) //循环
{
for(i=0;i<5;i++)
{
delay(500);
k=led[a[i]];//查段码
send(k); //送数据
}
}
}
7.7数码管显示字符“5”程序(ASM)
;----------------------------------------------------------
;启蒙电子:http://www.51c51.net
;QQ:501501561 502502562
;E-Mail:atc51@163.com 501501561@163.com
;----------------------------------------------------------
;程序设计:豆豆
;适用型号:DG3000综合开发试验仪
;----------------------------------------------------------
;程序作用:;数码管显示一个字符“5”
;----------------------------------------------------------
;4094接口
SDA_4094 BIT P2^6
CLK_4094 BIT P2^5
; LED 位选
LED_CS1 BIT P0^0;第1位数码管
;使用前定义常量
MTD EQU 40H ;显示数据缓冲
;定义器件地址
CSI24WCXX EQU 0A0H ;写地址
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV R4,#0ffH ;延时,等待其它芯片复位好
DJNZ R4,$
MOV MTD,#05H //显示的数据
;显示部分
MOV DPTR,#TABLE
MOV A,MTD
MOVC A,@A+DPTR;查段码
CLR LED_CS1 ;选通第1位数码管
LCALL DELAY_4094;调用发送数据程序
JMP $
;主程序结束
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;0~9
DB 88H,83H,0C6H,0A1H,86H,8EH ;A~F
;-------------------------延时子程序---------------------------------
DELAY_4094: MOV R4,#2 ;延时程序3,精确延时1000微秒
D_4094:MOV R5,#248
DJNZ R5,$
DJNZ R4,D_4094
RET
;-------------------------送数程序 ---------------------------------
DISP_DA:
MOV R3,#08H
DUP: RLC A
MOV SDA_4094,C
CLR CLK_4094
SETB CLK_4094
DJNZ R3,DUP
RET
END
|