本帖最后由 fleshyao 于 2011-9-9 00:25 编辑
按4094的时序图
1)STB=0
2) CLK=0时准备好一位DAT ---> CLK=1, 送出这位DAT --->
3) CLK=0时准备好又一位DAT ---> ……
4)STB=1 ,送到输出, STB=0,待命
3片CD4094级联(9脚做级联输出)程序如下:
#include <STC12C5A60S2.h>
#include<INTRINS.H>
typedef unsigned char uchar;
sbit CD4094_DAT = P2^2;
sbit CD4094_CLK = P2^0;
sbit CD4094_STB = P2^1;
void delayms()
{
unsigned char i,j;
for(i=0;i<200;i++)
for(j=0;j<10;j++)
_nop_();
}
void TransByteTo4094(uchar dat)
{
uchar count,i;
count = 8;
do
{
CD4094_STB =0;
i = dat &(0x80);
if (i==0)
CD4094_DAT=0;
else
CD4094_DAT=1;
dat = dat <<1;
CD4094_CLK=1;
delayms(); //延时12ms
CD4094_CLK=0;
delayms();//延时12ms
count--;
}while(count != 0);
CD4094_STB =1;
}
main()
{
TransByteTo4094(0x55);
TransByteTo4094(0x18);
TransByteTo4094(0xaa);
CD4094_STB =1;
while(1)
{
}
}
程序中的延时是否过长,如何计算延时时间,还是不用延时。?dat = dat <<1;
和CD4094_CLK=1; 的顺序是否要注意啊?请大侠们指导下!! |