51单片机+3片74HC595联级流水灯+Proteus仿真
51单片机+3片74HC595联级流水灯+Proteus仿真
- Proteus仿真

实例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| #include <reg52.h> #include <intrins.h> #define nop() \_nop\_() sbit shcp = P2^0; sbit ds = P2^1; sbit stcp = P2^2;
void delayxms(unsigned int c) //延时函数 { unsigned char a,b; for(;c>0;c--){ for(b=199;b>0;b--){ for(a=1;a>0;a--); } } }
void led595(unsigned char date); unsigned char i,j,z,k; void main() //主函数 { unsigned long dat=1; while(1) { for(j=24;j>0;j--) { led595(dat/65536); //第三块74HC595 led595(dat/256); //第二块74HC595 led595(dat%256); //第一块74HC595 delayxms(200); dat<<=1; } dat=1; } }
void led595(unsigned char date) //往595输送数据函数 { for(k=0;k<8;k++) { if((date<<k)&0x80) ds=1; else ds=0; shcp=0; nop(); nop(); shcp=1; } stcp=0; nop(); nop(); stcp=1; }
|
74HC595做到三片串联后,如果想要继续添加那就需要另外增添IO口来实现,因为串联到4个联级的话,数据移位将超出无符号长整型数据范围(unsigned long=4,294,967,295),1左移32位数字是4,294,967,296,超出了1,说以不能这样实现。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!