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

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

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


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

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

图一

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

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

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

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

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

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

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

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

图二

图三

图四

这图是丑的没法看了。但为了叙述清楚,目前也只能这样了。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<reg51.h>
#include<intrins.h>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~D0void 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<reg52.h>,但是总是报错,提示RCLK重定义。我仔细检查程序并没有发现重定义的地方。后来参看例程序,将头文件改成#include<reg51.h>,程序顺利通过。看来52的头文件中应该定义过该变量。就像P0一样。头文件reg51.h与reg52.h的区别

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

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

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

5、当然还有最后的结果

图五

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

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

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

苟日新,日日新。

51单片机LED点阵实验(74HC595)相关推荐

  1. 51单片机 | LED点阵实验 | 点亮一个点 | 显示数字 | 显示图像

    文章目录 一.LED点阵介绍 二.硬件设计 三.软件设计 1.LED点阵(点亮一个点) 2.LED点阵(显示数字) 3.LED点阵(显示图像) 四.实验现象 1.LED 点阵(点亮一个点) 2. LE ...

  2. 51单片机LED点阵显示文字

    51单片机LED点阵显示文字 代码如下. #include <REGX51.H> #define u8 unsigned char sbit SER = P3^4; sbit RCLK = ...

  3. 51单片机LED点阵控制原理、74HC595工作原理和字母和滚动显示实验代码

    目录 1. 74HC595工作原理图解 2.LED点阵控制原理 3.点阵LED实验 3.1 配置74HC595代码 3.2 D点阵LED显示H 3.3 滚动LED (1) 滚动扫描图示 (2)程序代码 ...

  4. 51单片机LED点灯实验(闪烁,点亮,流水灯)

    led点亮 工作原理 如图,二极管阳极连接电阻,二极管阴极连接单片机引脚.D0对应P20,D1对应P21,,,,,,,都通过P2孔进行控制. 二极管: 电源正极连接到二极管阳极,负极连接到阴极,二极管 ...

  5. 51单片机led点阵C语言,51单片机驱动LED点阵扫描显示C语言程序

    #ifndef__Matrix_H__ #define__Matrix_H__ #ifdef__cplusplus extern"C" { #endif #define SET  ...

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

    实验名称:LED点阵实验(显示图像) 接线说明:     实验现象:下载程序后,8*8LED点阵显示心形 注意事项:LED点阵旁的J24黄色跳线帽短接到GND一端                   ...

  7. 51单片机实现c语言字母滚动,使用51单片机实现点阵汉字平滑滚动显示

    使用51单片机实现点阵汉字平滑滚动显示 #说明:采用的芯片是89C51,LED点阵屏的规格是16*16,同时使用了两个74HC595芯片,字模生成软件在文末有网盘链接. 1 连接原理图 整体的电路连接 ...

  8. 51单片机的仿真实验——1602显示屏显示万年历与温度

    实验内容: 1:数字钟设计 2:基于DS18B20的温度测量模块设计 问题描述: 之前笔者写过一篇用数码管显示日历与温度的实验记录(51单片机的仿真实验--数码管显示日历与温度).但是数码管在仿真软件 ...

  9. 51单片机LED模拟交通灯

    51单片机LED模拟交通灯 文章目录 51单片机LED模拟交通灯 实验环境 仿真图 代码解析 效果演示 实验环境 实验软件: Keil5 + Proteus7 实验元件: AT89C51 * 1, L ...

最新文章

  1. 使用C#实现Windows下无焦点窗体
  2. HTML5 CSS3初学者指南(3) – HTML5新特性
  3. 蚁群算法matlab vrp问题车辆限重,蚁群算法MATLAB解VRP问题
  4. 精心整理全网最全Tomcat面试专题及答案(共19题,含答案解析),tomcat面试看这篇就够了!
  5. eclipse插件开发(二) 简易4页签编辑器(源码 | 设计 | JS | CSS)配色
  6. 电商扣减库存_电商系统秒杀架构设计
  7. oracle sql抓取1
  8. Android 热修复的相关总结(主要是阿里百川的)
  9. java 阻塞队列 BQ_Java Concurrency in Practice 读书笔记 第六章
  10. 木马 --- 基本概念和分类
  11. 公司的IT总监在公司里是什么样的角色?
  12. 我国跨境电子商务的发展概念以及发展概况
  13. 复制文件夹 omitting directory
  14. 解决: 在路径为[/StudentManagerWeb]的上下文中,servlet[LoginServlet]的Servlet.service()引发异常 java.lang.NullPointe
  15. 记录安卓,IOS安装kali的办法
  16. 微信小程序Radio为一组时,使用三元表达式始终选中默认值
  17. SQL提高查询效率知识拾忆
  18. STM32的三种Boot模式的差异
  19. ARM linux系统调用的实现原理
  20. Linux Glibc幽灵漏洞紧急修补方案【转】

热门文章

  1. matlab倍频程设计,[转载]1/3倍频程及Matlab程序实现
  2. 在飞机上被告知飞机即将坠毁……
  3. Deepin Linux安装ssh,遇到Package has no installation candidate问题解决方法
  4. 回归方程的拟合优度检验_拟合优度检验
  5. rlm sql mysql_FreeRADIUS with rlm_sql_mysql
  6. 怎么查linux运行慢的原因,Linux_sql 查询慢的原因分析,查询速度慢的原因很多,常见 - phpStudy...
  7. 2023升级运营版uniapp多商户商城小程序+H5+APP+商家入驻短视频社区种草直播阶梯拼团源码
  8. 数字图像处理--基本图像操作
  9. 立创eda专业版PCB设计中板框圆角设置
  10. 评高工英语计算机免考条件,评高级工程师外语什么情况下免试?