|
发表于 2010-11-1 00:35:54
|
显示全部楼层
回复【6楼】guxingganyue ,【7楼】 scort
请仔细、全面、踏实的学习。代码只是参考,不同的环境下需要做修改的。
我用的是CVAVR,这个C支持位(bit)变量的。代码中的Hc595_clk、Hc595_data都是位变量。ICC不支持位变量,你这样写有问题的。
在初始化时,当然应该把CLK和stcp设置在准备状态。
下面是六楼有问题的代码(不知道6楼是否仔细看了我在1楼的代码解释,6楼的解释怎么还是反的!)
Hc595_clk=1;
Hc595_STCp=1;
// 以上是初始化,把2个信号的准备状态定在高电平
void Hc595_send_byte(unsigned char byte)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(byte&0x80)
Hc595_data=1;
else
Hc595_data=0;
byte <<=1;
Hc595_clk=1; //xx上降沿 //产生下降沿,无用 ???
Hc595_clk=0; //产生上升沿,打入数据,同时也是返回准备状态,停留在高电平???
}
Hc595_STCp=1; //xx上降沿 //产生下降沿,无用 ???
Hc595_STCp=0; //产生上升沿,打入数据,同时也是返回准备状态,停留在高电平 ???
}
//那么在第一次循环中没有产生上升沿,只有一个下降沿。这意味者第1位根本没有打入! |
|