• 51单片机学习:IO扩展(串转并)实验-74HC595


    实验名称:IO扩展(串转并)实验-74HC595
    接线说明:    
    实验现象:下载程序后,8*8LED点阵以一行循环滚动显示
    注意事项:LED点阵旁的J24黄色跳线帽短接到GND一端                                                                                  
    ***************************************************************************************/
    #include "reg51.h"

    typedef unsigned int u16;    //对系统默认数据类型进行重定义
    typedef unsigned char u8;

    //定义74HC595控制管脚
    sbit SRCLK=P3^6;    //移位寄存器时钟输入
    sbit RCLK=P3^5;        //存储寄存器时钟输入
    sbit SER=P3^4;         //串行数据输入

    #define LEDDZ_COL_PORT    P0    //点阵列控制端口

    u8 ghc595_buf[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

    /*******************************************************************************
    * 函 数 名       : delay_10us
    * 函数功能         : 延时函数,ten_us=1时,大约延时10us
    * 输    入       : ten_us
    * 输    出         : 无
    *******************************************************************************/
    void delay_10us(u16 ten_us)
    {
        while(ten_us--);    
    }

    /*******************************************************************************
    * 函 数 名       : delay_ms
    * 函数功能         : ms延时函数,ms=1时,大约延时1ms
    * 输    入       : ten_us
    * 输    出         : 无
    *******************************************************************************/
    void delay_ms(u16 ms)
    {
        u16 i,j;
        for(i=ms;i>0;i--)
            for(j=110;j>0;j--);
    }

    /*******************************************************************************
    * 函 数 名         : hc595_write_data(u8 dat)
    * 函数功能           : 向74HC595写入一个字节的数据
    * 输    入         : dat:数据
    * 输    出         : 无
    *******************************************************************************/
    void hc595_write_data(u8 dat)
    {
        u8 i=0;
        
        for(i=0;i<8;i++)//循环8次即可将一个字节写入寄存器中
        {
            SER=dat>>7;//优先传输一个字节中的高位
            dat<<=1;//将低位移动到高位
            SRCLK=0;
            delay_10us(1);
            SRCLK=1;
            delay_10us(1);//移位寄存器时钟上升沿将端口数据送入寄存器中    
        }
        RCLK=0;
        delay_10us(1);
        RCLK=1;//存储寄存器时钟上升沿将前面写入到寄存器的数据输出    
    }


    /*******************************************************************************
    * 函 数 名       : main
    * 函数功能         : 主函数
    * 输    入       : 无
    * 输    出         : 无
    *******************************************************************************/
    void main()
    {    
        u8 i=0;

        LEDDZ_COL_PORT=0x00;//将LED点阵列全部设置为0,即LED阴极为低电平
        while(1)
        {        
            for(i=0;i<8;i++)
            {    
                hc595_write_data(0x00);//消除前面寄存器缓存数据
                hc595_write_data(ghc595_buf[i]);//写入新的数据
                delay_ms(500);//延时500ms    
            }                                    
        }    

    希望对大家的学习有所帮助。

  • 相关阅读:
    对话框管理器第八章:对话框中的自定义导航
    Java策略模式源码剖析及使用场景
    VMware环境配置
    【华为上机真题 2022】拼接URL
    actual combat 21——华为云从零开始项目部署(附nginx转发域名方式)
    Java读源码之Netty深入剖析
    【云原生之K8s】 K8s资源控制及探针检查
    问题解决——SSH时出现WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!(转)
    TCP为什么是三次握手
    Tpflow V6.0.8 正式版发布
  • 原文地址:https://blog.csdn.net/qq_63964231/article/details/126907440