程序中的延时的确过长了, 如果硬件没有什么问题的话, 过长对信号没有什么影响. 只是你的软件处理不了其他的任务了.
其实, 延时 几个 uS 就可以了.
另外,
1. STB =0 后没有延时, 这个可能会有问题.
2. DAT 改变后, 到 CLK 置1, 之间也没有延时, 这个延时很重要!
不妨这样改一下
void TransByteTo4094(uchar dat)
{
uchar count,i;
CD4094_STB =0;
delayms();//延时12us
count = 8;
do
{
i = dat &(0x80);
if (i==0)
CD4094_DAT=0;
else
CD4094_DAT=1;
dat = dat <<1;
delayms();//延时12us
CD4094_CLK=1;
delayms(); //延时12us
CD4094_CLK=0;
}while(--count);
CD4094_STB =1;
}
|