废话连天 https://passport2.21ic.com/?432761 [收藏] [复制] [RSS]

日志

4094驱动数码管程序

已有 4148 次阅读2007-4-24 13:14 |系统分类:单片机

第一篇文章,就写点简单的代码,供大家参考吧!

以下是用4094(4000CMOS系列IC,串行移位寄存器,和74HC595类似)驱动数码管的驱动程序

放在定时器中断里面

 

 

#define c0 1               //本人用2803驱动很多个4094,这是为2803服务,不容易出错

#define c1 0

#define cnum4094 4    //一共有4个4094

void dispplay(void) interrupt 1
{

unsigned char i,j;                                //for循环用的变量

 TH0=disptimeh;                                 //定时器处理
 TL0=disptimel;

 

++dispadd;                                          //位选扫描用

if(dispadd>7)

   dispadd=0;

i=0x80;
temp[3]= i>>dispadd;

 

temp[0]=;                                              //7段数码管代码放在这,一共8x3个数码管

temp[1]=;                                              //等号后面内容根据实际情况定

temp[2]=;

 

oe4094c=c0;                                       //移位输出
str4094c=c0;
clk4094c=c0;

 

for(i=0;i<cnum4094;i++)

    for (j=0;j<8;j++)
    { temp=temp>>1;
      do4094c=CY;
      nod();                                             //nod()是延时子程序,是为了降低时钟频率,让4094移位不出错
      clk4094c=c1;
      nod(); 
      clk4094c=c0;
   }
}

 

str4094c=c1;
nod();
str4094c=c0;
nod();
oe4094c=c1;

 

}

 

以上能驱动24个7节数码管,如果要显示更多可以加4094,扫描速度>40就不会闪烁。根据以往经验,显示100个数码管也不成问题。这种方式在游戏机开发上有广泛应用。

 

如果觉得移位太多,速度不够可以用几条数据线,同时移位几组4094即可。即1条CLK,1条STR,几条SDO,en不用也可。这样用来驱动点阵也绰绰有余。

 

路过

鸡蛋

鲜花

握手

雷人

全部作者的其他最新日志

发表评论 评论 (2 个评论)

430025 2007-4-26 12:34
能说说4094是怎么移位的吗? 不是太懂它的时序图
回复 123456 2009-12-25 02:30
楼主,能不能说明下4094 怎么移位的?谢谢