当前位置 博文首页 > 通信汪的美好生活的博客:51单片机74HC164(右移的芯片)的使用

    通信汪的美好生活的博客:51单片机74HC164(右移的芯片)的使用

    作者:[db:作者] 时间:2021-07-11 22:23

    电路图以及代码我都上传到资源里面的有需要的自己去下,都是免费的。我一个学弟问我这个咋用,给他写的顺便分享一下吧哈哈。
    目的:
    74HC164的使用,74HC164就是一个串入并出的芯片A和B端就是串入数据的接收端,当CLK端来一个上升沿信号后,就会把A和B端接收到的数据传到输出端,即Q0到Q7,每来8个上升沿以后Q0到Q7便会都有数据,我这里为了更清楚的观察到输出端的数据变化连接的是LED,弄懂了输出端的数据变化就可以自己试着把LED改为数码管了。
    代码的易错点解释:

    void senddata(uint da)
         { 
          uchar num,c;
    	num=TAB[da];
          for(c=0;c<8;c++){ 
           CLK=0;
           SDA=num&0x01;
          CLK=1;
    	num>>=1;
    	}
         }
    

    这是个数据发送函数,CLK是单片机的一个端口,负责产生上升沿信号。SDA也是单片机的一个端口,负责串行数据的写入,每次写入的都是待发送数据的相对最低位。
    在这里插入图片描述

        #include<reg51.h>
        #define uint unsigned int
        #define uchar unsigned char
        /*uchar  code  TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};某一类数码管的编码,懂点亮
        LED的含义后,可以试试玩数码管哈哈*/
        uchar  code  TAB[]=
               {
                00000001,00000010,00000100,00001000,
                00010000,00100000,01000000,10000010
                }//流水灯哈哈
         void delay(uchar time);
         void send(uint da);
         sbit CLK=P1^1;
         sbit SDA=P1^0;
         void delay(uchar time )
         {
          uint i,j;
          for(i=0;i<time;i++)
    	{
    	  for(j=0;j<110;j++)
    	   ;
    	}
         
         }
         void senddata(uint da)
         { 
           uchar num,c;
    	   num=TAB[da];
           for(c=0;c<8;c++){ 
           CLK=0;
           SDA=num&0x01;
           CLK=1;
    	   num>>=1;
    	}
         }
    void main()
    { 
     uchar n;
    while(1)
     {
        for(n=0;n<8;n++)
        {	
           delay(200);
           senddata(n);
    	   delay(200); 
        }
        n=0 ;
     }
    }
    
    cs