• 51单片机学习:LED点阵实验(显示数字)


    实验名称:LED点阵实验(显示数字)
    接线说明:    
    实验现象:下载程序后,8*8LED点阵显示数字0
    注意事项: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 gled_row[8]={0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0x00};//LED点阵显示数字0的行数据
    u8 gled_col[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED点阵显示数字0的列数据

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

    /*******************************************************************************
    * 函 数 名         : 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;

        while(1)
        {            
            for(i=0;i<8;i++)//循环8次扫描8行、列
            {
                LEDDZ_COL_PORT=gled_col[i];//传送列选数据
                hc595_write_data(gled_row[i]);//传送行选数据
                delay_10us(100);//延时一段时间,等待显示稳定
                hc595_write_data(0x00);//消影    
            }                                
        }        
    }

      

  • 相关阅读:
    HTML入门
    python-(6-4-1)爬虫---利用re解析获得数据信息
    java八股文面试[JVM]——什么情况下会抛出OOM
    Java多线程之:队列同步器AbstractQueuedSynchronizer原理剖析
    RackNerd 圣何塞 VPS 测评
    Duchefa丨S0188盐酸大观霉素五水合物中英文说明书
    “2024国际数字能源展”推动绿色低碳发展,助力实现“双碳”目标
    R语言data.table包进行数据分组聚合统计变换(Aggregating transforms)、计算dataframe数据的分组标准差(sd)
    呼叫中心自建好还是云外呼好用?
    Java项目:SSM农产品朔源管理系统
  • 原文地址:https://blog.csdn.net/qq_63964231/article/details/126907736