打印

直接驱动LED数码管流程

[复制链接]
2482|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
单片机驱动LED数码管有很多方法,按显示方式可以分为静态显示和动态显示。在一般较为简单的系统中,为了减少成本,动态显示方案具有一定实用性,也是目前单片机数码管显示较为常用的一种显示方法。
下图为51单片机直接驱动4位置7段数码管动态显示程序的流程图

C语言程序及讲解
*******************************************************************************
程序功能为4位7段数码管动态显示程序,51单片机16ms定时选通数码管的控制端口,刷新数码管的显示内容,达到4位数码管的动态显示;16ms定时通过定时器T0实现。
*******************************************************************************
#include <reg51.h>       // 引用标准库头文件
#define uchar unsigned char
#define uint unsigned int
uchar buf[4]; // 待显示数据缓冲区

void main()
{
P2=0x00;   // 关闭显示
TMOD = 0x01;   // T0工作方式1
/* 16ms 定时设置 */
TH0 = (16000/256);
TL0 = (16000%256);
//定时器T0打开
TR0 = 1;                    //启动定时
ET0 = 1;
EA = 1;                     //开定时器中断
//待显示数据初始化
buf[3] = 3;
buf[2] = 2;                //四个待显示数据单元初始为0,1,2,3
buf[1] = 1;
buf[0] = 0;
while(1);                    //等待定时数码管扫描显示   
}
// 定时器0中断服务子程序,定时动态扫描显示
void time0_int(void) interrupt 1
{
/* 16ms 定时设置 */
TH0 = (16000/256);                   //定时数据重装
TL0 = (16000%256);
display();                          //扫描显示更新
}

//根据共阴极字型编码表获取0~9,A~B显示代码
uchar getcode(uchar i)
{
uchar p;
switch (i)
{
case 0:  p=0x3f; break;   /* 0 */
case 1:  p=0x06; break;   /* 1 */
case 2:  p=0x5B; break;   /* 2 */
case 3:  p=0x4F; break;   /* 3 */
case 4:  p=0x66; break;   /* 4 */
case 5:  p=0x6D; break;   /* 5 */
case 6:  p=0x7D; break;   /* 6 */
case 7:  p=0x07; break;   /* 7 */
case 8:  p=0x7F; break;   /* 8 */
case 9:  p=0x67; break;   /* 9 */
case 10:    p=0x77;  break;        /* A */
case 11:    p=0x7C; break;   /* B */
case 12:     p=0x39; break;         /* C */
case 13:   p=0x5E; break;   /* D */
case 14:   p=0x79; break;         /* E */
case 15:   p=0x71; break;      /* F */
default:    break;
}
return(p);
}
//数据显示更新函数
void display(void)
{
  temp=0x01                        //用于选通数码管,初始选通D0
for(i=0,i<4;i++)
{
P0=getcode(buf);                      //输出数据
P2=temp                            //数码管选通
temp=(temp<<0x01);            //选通下一位数码管
}
}

相关帖子

沙发
huangfeng33| | 2012-4-1 23:52 | 只看该作者
静态显示也不错哦,静态显示数据稳定,占用很少的CPU时间。

使用特权

评论回复
板凳
拿起书本|  楼主 | 2012-4-1 23:58 | 只看该作者
:loveliness:呵呵,静态显示虽然具有以上优点,但每个显示单元都需要有单独的显示驱动电路,如果显示位数比较多,硬件的开销,电源的功耗等问题将变得更加突出。虽然它占用的CPU多,但使用时间少。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4195

帖子

31

粉丝