手上刚好有一片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...太晚了.睡觉了...
用户369215 2011-7-6 20:19
用户1399255 2010-2-5 13:33
用户1399561 2009-4-14 09:14
wang1jin 2007-11-29 17:22
长时间没搞了.忘了.
用户43378 2007-11-29 16:55
应该先送高位吧
用户43378 2007-11-29 16:44
怎么不是左移??
wang1jin 2007-9-20 17:20
不是吧...
错了...我用硬件搭了下...实际上可以工作呀...
用户17735 2007-9-20 15:58
1、数据反向
2、4094子程序 最后STR="1"; 错了,
应该STR=0;
wang1jin 2007-8-16 15:16
好像二个IC差不多.HE HE.
用户388828 2007-8-16 14:49