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

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机+3片74HC595联级流水灯+Proteus仿真相关的知识,希望对你有一定的参考价值。

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


  • Proteus仿真

实例代码

#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,说以不能这样实现。

以上是关于51单片机+3片74HC595联级流水灯+Proteus仿真的主要内容,如果未能解决你的问题,请参考以下文章

51单片机+74HC595联级+DS1302简易时钟+Proteus仿真

Arduino UNO + 74HC595联级+数码管实现000-999循环计数显示+ Proteus仿真

Arduino UNO + 74HC595联级+数码管实现00-99循环计数显示+ Proteus仿真

Arduino UNO + 74HC595联级+数码管实现0000-9999循环计数显示+ Proteus仿真

Arduino UNO+DS1302+74HC595联级+8位数码管时钟+Proteus仿真(修复篇)

51单片机:IO口扩展芯片用法(74HC165,74HC595)