既然要用到74hc595,那么就要写一个595的驱动程序,以便后面的操作简单化。
sbit hc595_si =P2^5; //数据引脚
sbit hc595_sck =P2^4; //移位寄存器
sbit hc595_rck =P2^7; //输出寄存器
/*************595驱动*********************/
void HC595(unsigned char ch)
{
unsigned char i;
for (i = 0; i < 8; i++)
{
hc595_si = (ch & 0x80); //取写入数据的最高位送入595的数据引脚
ch <<= 1; //相当于ch = ch << 1; 数据左移1位,低位往高位移
hc595_sck=0; //送到移位寄存器
hc595_sck=1;
}
hc595_rck=0;
hc595_rck=1;//输出数据
}
做完这些,接下来只需要往595里写数据就可以了,例如:HC595(0xfe); 则595芯片的Q0(最低位)输出端为“0”。可用仿真软件尝试一遍便知效果。
#include
#include
sbit sh_cp=P2^0;
sbit ds=P2^1;
sbit st_cp=P2^2;
void datout(unsigned char dat)
{
unsigned char i,temp;
temp=dat;
for(i=0;i<8;i++)
{
temp=temp<<1;
sh_cp=0;
ds=CY;
sh_cp=1;
}
st_cp=0;
st_cp=1;
}
void main(void)
{
unsigned char LED=0xfe,i;
while(1)
{
for(i=0;i<8;i++)
{
datout(LED);
LED=_crol_(LED,1);
}
}
}
流水灯
没测试,应该能通过