cd4094驱动LED数码管显示

用单片机驱动LED数码管有很多方法,按显示方式分,有静态显示和 动态(扫描)显示,按译码方式可分硬件译码和软件译码之分。
静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的
数据,显示数据稳定,占用很少的CPU时间。动态显示需要CPU时刻
对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。
这两种显示方式各有利弊;静态显示虽然数据稳定,占用很少的CPU
时间,但每个显示单元都需要单独的显示驱动电路,使用的硬件较多;
动态显示虽然有闪烁感,占用的CPU时间多,但使用的硬件少,能节
省线路板空间。
硬件译码就是显示的段码完全由硬件完成,CPU只要送出标准的BCD
码即可,硬件接线有一定标准。软件译码是用软件来完成硬件的功能,
硬件简单,接线灵活,显示段码完全由软件来处理,是目前常用的显
示驱动方式。
比较常用的显示驱动芯片有: 74LS164 , CD4094+ULN2003(2803) ,
74HC595+ULN2003(2803) , TPIC6B595,AMT9095B, AMT9595等许多。
另外,市场上还有一些专用的LED扫描驱动显示模块如MAX7219等,
功能很强,价格稍高一些。下面是一个用74LS164驱动显示的例子
和一个用4094扫描驱动显示的例子:
上例图中加了一个PNP型的三极管来控制数码管的电源,是因为164农业科技网络书屋没有数据锁存端,
数据在传送过程中,对输出端来说是透明的,这样,数据在传送过程中,数码管上有
闪动现象,驱动的位数越多,闪动现象越明显。为了消除这种现象,在数据传送过程
人类登月50周年
中,关闭三极管使数码管没电不显示,数据传送完后立刻使三极管导通,这样就实现
锁存功能。这种办法可驱动十几个164显示而没有闪动现象。


这个例子是用4094做位选,用89C2051P1口线做段驱动来扫描驱动9位数码管的显示。 由于4094只有8个输出口线,其中第九位是用CPU口线直接进行位选的。9LED的所有
相同位置的段口线都接到一起,然后接到单片机的一个口线上,供八段,使用8CPU
口线。其软件的工作过程是这样的:要在LED上显示1--9位数,首先将1的段码送到P1
口线上,然后向4094送位选数据01,使4094Q1口线输出高电平,选中第一位数码管,
使阳极得电,在第一位上就显示出1,重复上述过程,一直到第九位,然后不断重复
这一过程,就实现了扫描显示。
#include<at89x52.h>
#include<intrins.h>
#define uint  unsigned int
#define uchar unsigned char
/*
sbit K1  =  P3^4;
sbit K2  =  P3^5;
sbit K3  =  P2^4;
sbit K4  =  P2^5;
*/
sbit STR  =  P2^0;//定义CD4094各端口;
sbit DATA =  P2^1;
sbit CLK  =  P2^2;

//code unsigned char C51BOX2[3] _at_ 0x43;
void Out_4094(uchar data1);//CD4094写数据子函数祥林嫂之死;
void Delay(uint a);    //延时子函数;
        //主程序开始;
void main()
{
  uchar i;      //无限循环;
  while(1)
  {
    for(i=0;i<255;i++)    //CD4094端口的LED不断从0-255显示;
    {
      Delay(10000);    //延时;
    Out_4094(i);    //调用显示子函数;
    Delay(10000);    //延时;
  }
  }
  //while(1);
}
void Out_4094(uchar data1) //总账CD4094子函数;
{
  uchar i;      //定义子函数;
  STR="0";      //保持然来的状态不变;
  for(i=0;i<8;i++)    //写八位数据进CD4094;
  {
  if(data1&0x01)    //判断并发串行数据;
    {
  DATA="1";      //发高电平;
 }
 else
 {
  DATA="0";      //发低电平工程塑料应用;
 }
    CLK="0";      //形成上升延脉冲;
 _nop_();
 _nop_();      //延时;
 _nop_();
 CLK=1;
 data1>>=1;      //数据移位,送下一位数据;
  }
  STR="1";      //数据送完;更新显示;
}
void Delay(uint a)    //药物分析杂志延时子函数;
{
  uint b;
  for(b=0;b<a;b++);
}

本文发布于:2024-09-20 21:30:16,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/588068.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:显示   数据   驱动   硬件   数码管   软件
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议