51单片机LED点阵实验(74HC595)

51单片机LED点阵实验(74HC595)实验目的 用 8 8 的 LED 点阵显示一颗爱心 实验仪器 普中开发板 非广告 实验背景 出于一些原因 最近在看 Arduino 但仍觉得 51 好玩 遂 一边看 Arduino 一边整理 51 8 8 的 LED 点阵电路如图一所示 有两种方式 单片机上集成的电路方式为第二种 其中 行由 P0 口控制 列由 D7 D0 HC595 芯片控制 见下方 控制 图一首先考虑 如何先点亮一个灯 eg 让

实验目的:用8*8的LED点阵显示一颗爱心。

实验仪器:普中开发板(非广告)

实验背景:出于一些原因,最近在看Arduino,但仍觉得51好玩。遂,一边看Arduino,一边整理51。


8*8的LED点阵电路如图一所示,有两种方式。单片机上集成的电路方式为第二种。

其中,行由P0口控制,列由D7~D0(HC595芯片控制,见下方)控制。

51单片机LED点阵实验(74HC595)
图一

首先考虑,如何先点亮一个灯?

eg:让P0^7的端口为低电平,P0的其他端口为高电平;D7的端口为高电平,则第一行第一列的led被点亮。

同样的方式也可以,让其他单独的led点亮。

接着考虑,如何控制多个led的点亮?

类似与数码管的动态显示,利用余晖来进行动态显示。

第一步:P0口先选通某一列,D7~D0控制这一列中哪些灯亮。

第二步:动态显示每一列。

 

为了减少单片机引脚的使用,这里使用了74HC595芯片。(注:图二中led的方向反了)。

51单片机LED点阵实验(74HC595)
图二

51单片机LED点阵实验(74HC595)
图三

51单片机LED点阵实验(74HC595)
图四

这图是丑的没法看了。但为了叙述清楚,目前也只能这样了。74HC595芯片详细的内容可以网上找,也可以直接评论区留言。

HC595芯片的功能:串行输入,并行输出。

看如何给芯片接线,并使用:(注:引脚上加一个“非横线”,表示低有效)

1、D0~D7,并行输出,接LED。

2、16号和8号引脚,分别接Vcc,Gnd。

3、OE,13号引脚,低电平才输出有效,让它接地。

4、10号引脚,主复位引脚,低有效。目前不需要复位,直接接VCC就好.

5、14号引脚SER,接在集成板的P3^4,为串行输入端。

6、11号引脚SRCLK,接在集成板的P3^6;上升沿时,将串行口RCLK的一位,移位输入。

7、12号引脚RCLK,接在集成板的P3^5;上升沿时,将移入的8位数据,送到存储寄存器。

上面的只是使用方法,如果还想继续深究,可以查看数电当中的串并行输入输出。

 

代码:

#include 
   
     #include 
    
      typedef unsigned char uchar; sbit SER=P3^4;//14号引脚,串行数据输入 sbit SRCLK=P3^6;//11号引脚,移位寄存器时钟输入 sbit RCLK=P3^5;//12号引脚,存储寄存器时钟输入 uchar code lie[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//p0^7~p0^0,单片机中,p0^7是高位 uchar code hang[]={0x00,0x38,0x3c,0x1e,0x1e,0x3c,0x38,0x00};//D7~D0 void Hc595SendByte(uchar dat) { int i; //编译可能有点老,变量的定义必须放在块的开头 SRCLK=0;//初始化 RCLK=0; for(i=0;i<8;i++)//从高位到低位,依次串行输入 { SER=dat>>7; dat<<=1; SRCLK=1;//上升沿,将数据串行输入 _nop_();//一个机器周期 _nop_(); SRCLK=0; } RCLK=1;//上升沿,将数据送入存储寄存器 _nop_();//一个机器周期 _nop_(); RCLK=0; } void delay(int i) { while(i--); } void main(void) { int i; while(1) { for(i=0;i<8;i++) { P0=lie[i];//选通列 Hc595SendByte(hang[i]);//送入行 delay(100); //Hc595SendByte(0x00);//消隐 P0=0xff;//消隐 } } } 
     
   

 

补充:

1、不是只有整数才分有符号数和无符号数。char,字符型也有,我感觉挺奇怪的,哈哈。  unsigned char

2、我第一次写这个程序的头文件是#include

,但是总是报错,提示RCLK重定义。我仔细检查程序并没有发现重定义的地方。后来参看例程序,将头文件改成#include

,程序顺利通过。看来52的头文件中应该定义过该变量。就像P0一样。头文件reg51.h与reg52.h的区别

3、按照C语言的标准,变量的定义必须放在块的开头。比如我将主函数中的int i放在for之前写,程序会报错。

这个标准已近很老了,现在C99标准中,变量定义的位置比较随意了,只要使用之前定义就好了。(当然单单这么说不严谨,详细的可以去网上看看)

4、今天win10刚装的Kail,端口和win7的有些不同。成功解决win10下单片机开发板驱动识别问题

5、当然还有最后的结果

51单片机LED点阵实验(74HC595)
图五

 


用手机拍摄,还是能看到余晖,肉眼的效果还是很好的。

拓展:这里每次显示的都是爱心,所以整体是一个静态爱心的形状。

           当如果动态显示的分别是I LOVE DOG,想来也是很好看。但是估计得16*16的尺寸。

苟日新,日日新。

 

 

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225491.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午9:13
下一篇 2026年3月17日 上午9:13


相关推荐

  • 批量修改文件后缀名「建议收藏」

    批量修改文件后缀名「建议收藏」在该文件夹下新建一个txt文件,输入:ren*原后缀名*新后缀名保存,将此txt文件的后缀改为.bat,双击运行,ok。说明:ren是rename(重命名)的缩写。第一个参数指定要匹配

    2022年8月2日
    10
  • QT5编程入门教程(非常详细)「建议收藏」

    QT5编程入门教程(非常详细)「建议收藏」Qt是一个跨平台的C++框架(C++库),目前最新的版本是Qt5。Qt5还包含了很多小版本,其中推荐Qt5.6或Qt5.9,这两个版本是LTS版本(即长期支持版本),Bug较少,相对稳定。Qt除了支持界面设计(GUI编程),还封装了与网络编程、多线程、数据库连接、视频音频等相关的功能。这套Qt教程以Qt5.9为基础来介绍Qt开发,配有精美的图片以及完整的示例程序,几乎涉及Qt编程的所有模块。注意,本教程不再对C++语法进行介绍,没有C++基础的读者…

    2022年5月16日
    45
  • Datawhale工作流自动化平台n8n入门教程(一):n8n简介与平台部署

    Datawhale工作流自动化平台n8n入门教程(一):n8n简介与平台部署

    2026年3月15日
    1
  • web服务器监控工具[通俗易懂]

    web服务器监控工具[通俗易懂]监控你的WEB服务器或者WEB主机运行是否正常与健康是非常重要的。你要确保用户始终可以打开你的网站并且网速不慢。服务器监控工具允许你收集和分析有关你的Web服务器的数据。1.PerformanceCo-PilotPerformanceCo-Pilot,简称PCP,是一个系统性能和分析框架。它从多个主机整理数据并实时的分析,帮你识别不正常的表现模式。它也提供A

    2022年6月12日
    52
  • PSR-4

    PSR-4

    2021年10月24日
    43
  • 容器技术概述

    容器技术概述目录 1 什么是容器 2 容器的内核技术组成 3 虚拟机和容器之间的区别 4 容器解决什么问题 5 容器的分类 1 什么是容器官方一点讲 容器是一种沙盒技术 主要目的是为了将应用运行在其中 与外界隔离 及方便这个沙盒可以被转移到其它宿主机器 本质上 它是一个特殊的进程 通过名称空间 Namespace 控制组 Controlgroup 切根 chroot 技术把资源 文件 设备 状态和配置划分到一个独立的空间 通俗点的理解就是一个装应用软件的箱子 箱子里面有软件运行所

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号