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


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

    /*******************************************************************************
    * 函 数 名       : 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);//消影    
            }                                
        }        
    }

    纷传单片机学习资料放在纷传小程序里了,需要的可以加入圈子有资料百度网盘下载地址及提取码。

  • 相关阅读:
    Python爬虫获取王者荣耀英雄全皮肤图片,并下载到本地
    Linux内存状态监测工具smem命令 | 如何在#linux OS下找到特定进程的交换(swap)空间使用情况?
    【技术美术知识储备】图形渲染管线1.0-基本概念&CPU负责的应用阶段
    pandas -- DataFrame的级联以及合并操作
    Python中`*args`和`**kwargs`的用法
    单元测试框架学习
    日常小记-20221123
    HTTPS 的加密流程
    ANSYS_Q3D仿真激光发射的寄生电感
    maven中央仓库不能访问的解决办法
  • 原文地址:https://blog.csdn.net/qq_63964231/article/details/126907770