当前位置:文档之家› 数码管的动态扫描显示

数码管的动态扫描显示


*/
/***************************************************************************/
/*********************************包含头文件********************************/
上图中上面三条就是所谓的位选信号线,下面八条就是所谓的段选信号线。 下图是四位共阳数码管显示原理实验的电路图:
基于以上电路图我们来了解一下什么是数码管的动态扫描显示: 数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8 个显示笔划
"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM 增加位选通控制电路,位选通由各自独立 的I/O 线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形, 取决于单片机对位选通COM 端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形, 没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM 端,就使各个数码管轮流受控显示,这就是动 态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应, 尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪 烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O 端口,而且功耗更低。
根据这些说明可以总结出数码管动态扫描显示驱动程序的书写流程如下: 1、 送位选信号,选通其中的一位数码管。 2、 送段选信号,让选通的这位数码管显示一个数字。 3、 延时1-2ms。
4、 送另一个位选信号,选通另外一位数码管。
5、 送该位的段选信号。
6、 。。。。。。。。循环下去。
下面是完整的C程序代码:
数码管显示原理及其动态扫描显示的操作方法
不管将几位数码管连在一起,其显示原理是一样的,都是靠点亮内部的发光二级管来显示数字。一位数码管内 部有八个发光二极管组成,共阳极数码管的各发光二极管的阳极连在一起,共阴极数码管的各发光二极管的各阴极 连在一起。以共阳极数码管为例,要在一位数码管上显示一个数字吗,我们需要把阳极固定为高电平,通过操作阴 极的电平就可以了。多位数码管(共阳)是把各位数码管的阳极独立出来,各位相应的发光二极管的阴极连在一起, 操作时需要运用动态扫描显示的方法使其显示多位数字。其基本原理如下图所示:
wei2=0;
P0=0xff;
wei3=1;
P0=table[c];
Delay(1);
wei3=0;
P0=0xff;
wei4=1;
P0=table[d];
Delay(1);
wei4=0; } /****************************开始主函数************************************/ void main() {
{
P0=0xff; //关闭段选
wei1=1;
//送第一位位选信号
P0=table[a]; //送段选信号
Delay(1); //延时1毫秒
wei1=0;
//关闭 第一位位选
P0=0xff;
//关闭段选(消影)
wei2=1;
ቤተ መጻሕፍቲ ባይዱ
//送第二位位选
P0=table[b]; //送第二位位选信号
Delay(1);
/***************************************************************************/
/*
09计算机2班 孙兴林
*/
/*
2010年九月
*/
/*
数码管试验程序
*/
/*
目标器件:AT89C52
*/
/*
晶振:12.0000MHZ
*/
/*
编译环境:Keil uVision4
unsigned char x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*****************************定义显示子函数*********************************/
void Display(unsigned char a,unsigned char b,unsigned char c,unsigned char d)
while(1) {
Display(1,3,1,4);//数码管显示1314 } }
开始
送位选信号 送段选信号 延时 1~2ms
#include"reg52.h" /*********************************LED位选端口定义***************************/ sbit wei1=P1^0; sbit wei2=P1^1; sbit wei3=P1^2; sbit wei4=P1^3; /*******************************共阳LED段码表*******************************/ unsigned char code table[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0x40}; /******************************定义延时子函数********************************/ void Delay(unsigned char z) {
相关主题