EDN首页   博客首页

日志档案

发表于 2007-8-13 0:25:18

8

标签: C51  CD4094  LED显示  程序设计  KEIL  

简单的CD4094驱动程序!!!

手上刚好有一片CD4094...刚好身边有个示波器...就用去EDN里面下了个CD4094的资料...

看了下,就用KEIL写了一个小程序...HE HE...用示波器看了二路波形...基本没问题...用硬件搭了一个LED电路...

试了一下...电路能正常工作...HEHE...CD4094用的比较广...可以用在静态显示...串口转并口...驱动数码管LED等...

下面发上来这次的程序...

#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++);
}

 

HE HE...太晚了.睡觉了...

系统分类: 单片机   |   用户分类: 单片机编程   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(2188)    回复(7)  

投一票您将和博主都有获奖机会!

最新评论

  • Link

    2007-8-16 14:49:46

    74hc164好像和这个一样,串进并出

  • wang1jin

    2007-8-16 15:16:30

    好像二个IC差不多.HE HE.

  • TONY

    2007-9-20 15:58:52

    1、数据反向

    2、4094子程序 最后STR="1";  错了,

     应该STR=0;

     

  • wang1jin

    2007-9-20 17:20:00

    不是吧...

    错了...我用硬件搭了下...实际上可以工作呀...

  • 111

    2007-11-29 16:44:51

    怎么不是左移??

  • 111

    2007-11-29 16:55:51

    应该先送高位吧

  • wang1jin

    2007-11-29 17:22:25

    长时间没搞了.忘了.