sbit HC595_SCK = P0^5; // HC595 的串行输入时钟引脚sbit HC595_RCK = P0^6; // HC595 的锁存输出时钟引脚sbit HC595_A = P0^7; // HC595 的串行数据输入引脚void main(){ unsigned char i ; unsigned int t,h; for(i = 0;i < 16;i ++) // 先输出一个16位数据,仅存入595并不显示出来 // 估计外面串接了两个595,做显示用 { HC595_SCK = 0; // 串行输入时钟为0 if(i == 9) // 要发送的数据的0-16位中第9位为1,其他为0 HC595_A = 1; // 0000 0010 0000 0000 else HC595_A = 0; HC595_SCK = 1; // 串行输入时钟为1,生成需要的时钟上升沿 } while(1) // 主循环(死循环) { for(i = 16;i > 0;i ++) // 仍然继续发送相同的16位二进制数// 通过这个循环,使输出的亮(或灭,根据共阴或共阳而不同)的一位,在两个数码管上循环移动 { HC595_RCK = 0; // 输出锁存时钟为0 HC595_SCK = 0; // 串行输入时钟为0 if(i == 9) // 同上面的数据 HC595_A = 1; else HC595_A = 0; HC595_SCK = 1; // 串行输入时钟为1,产生上升沿 HC595_RCK = 1; // 输出锁存时钟为1,产生上升沿 for(t = 110;t > 0;t --) // 软件延时 for(h = 1000;h > 0; h --); } }}