微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机动态数码管的设计

单片机动态数码管的设计

时间:11-26 来源:互联网 点击:
一、数码管动态显示

动态显示

LED数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

二、Proteus仿真实验



源程序:

#include//C51头文件
#include//函数头文件
#define uchar unsigned char//宏定义uchar=unsigned char
#define uint unsigned int//宏定义uint=unsigned int

uchar duan_code[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f
};//共阴极数码管段码0~9
uchar wei_code[]={0xFE,0XFD}; //共阴极数码管位码

void delay_ms(uint z)//ms级延迟函数,z表示形参,是几就是几ms延迟
{
uint x,y;
for(x=z;x>0;x--)
for(y=99;y>0;y--)
{ _nop_();
_nop_();
}
}

void main(void)//主函数
{
uint i=23;//初始化数码管显示的值
P0=0X00;//初始化P0口为低电平
P2=0XFF;
while(1)
{
P2=0XFE;//十位显示
P0=duan_code[i/10];//通过对i取整,求出十位显示的数字
delay_ms(5);//每次间隔2ms
P2=0XFF;

P2=0XFD;//个位显示
P0=duan_code[i];//通过对i取余,求出个位显示的数字
delay_ms(5);//每次间隔2ms
P2=0XFF;

}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top