本讲任务:
介绍用数码管进行数字和字母的显示。
数码管显示:
单片机系统中常用的显示器有:
1:发光二极管显示器(数码管);
2:液晶LCD显示器;
3:CRT显示器等。
LED、LCD显示器有两种显示结构:
1:段显示(7段、米字型等);
2:点阵显示(5×8、8×8点阵等)。
数码管可显示内容和特点:
可显示内容:
数字、小数点和部分英文字符、符号。
特点:
1、自发光、亮度高,特别适合环境亮度低的场合使用。
2、牢固,不怕冲击。
数码管的结构:
数码管内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组合成字符。
常见数码管有10根管脚。其中COM为公共端,根据内部发光二极管的接线形式可分为共阴极和共阳极两种。
使用时,共阴极数码管公共端接地,共阳极数码管公共端接电源。
每段发光二极管需5~10mA的驱动电流才能正常发光,一般需加限流电阻控制电流大小。
数码管显示原理:
LED数码管的 a~g 七个发光二极管。加正电压的发光,加零电压的不能发光,不同亮暗的组合就能形成不同的字型,这种组合称为字型码。共阳极和共阴极的字型码是不同的。
共阴数码管字形码表:
0x3f ,0x06 ,0x5b ,0x4f ,0x66 ,0x6d ,0x7d ,0x07 ,0x7f ,0x6f ,
0 1 2 3 4 5 6 7 8 9
0x77 ,0x7c ,0x39 ,0x5e ,0x79 ,0x71 ,0x00
A B C D E F 不显示
静态显示驱动:
静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动(要知道一个89S51单片机可用的I/O端口才32个),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
数码管动态驱动:
动态驱动常用于多个数码管同时显示数字或字母,是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。
当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
数码管驱动电路:
驱动2个四位数码管的驱动电路:
1、使用18个IO口;
2、分别用两个74HC573驱动段选、位选。
八进制 3 态非反转---透明锁存器芯片 74HC573:
1:当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存;
2:输出能直接接到 CMOS,NMOS 和 TTL 接口上;
3:操作电压范围:2.0V~6.0V;
4:低输入电流:1.0uA;
5:主要用于数码管、按键等的控制。
数码管显示例程1 :
/**************数码管显示数字3***************
*单片机:STC89C52RC
*开发环境:KEIL
*功能:数码管显示数字3
************************************************/
#include<reg51.h>
sbit LE1=P2^6; //段选信号
sbit LE2=P2^7; //位选信号
void main()
{
LE1=0;LE2=0;
P0=0x4f; //数字“3”的代码
LE1=1;LE1=0;
P0=0xfe; //选中第一个数码管
LE2=1;LE2=0;
while(1);
}
数码管显示例程2:
/************数码管依次显示数字3*************
*单片机:STC89C52RC
*开发环境:KEIL
*功能:数码管依次显示数字3
**************************************************/
#include <reg51.h>
sbit LE1=P2^6; //段选信号
sbit LE2=P2^7; //位选信号
void delay(int In,int Out); //申明延时函数
unsigned char code mb_table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//数码管各位的码表,code表示码表放在程序存储区
void delay(int In,int Out) //定义延时函数
{
int i,j;
for(i=0;i<In;i++)
{for(j=0;j<Out;j++){;}}
}
void main()
{
unsigned char num;
while(1)
{
for(num=0;num<8;num++)
{
P0=mb_table[num];
LE2=1;LE2=0;
P0=0x4f; //数字“3”的代码
LE1=1;LE1=0;
delay(20,1000);
}
}
}
最后,求求看到的此文的小伙伴点赞和关注支持一下下哦。毕竟,码字不容易哦,您的支持是我最大的动力呀!!!呜呜呜~~~