实验目的:用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 #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 3、按照C语言的标准,变量的定义必须放在块的开头。比如我将主函数中的int i放在for之前写,程序会报错。 这个标准已近很老了,现在C99标准中,变量定义的位置比较随意了,只要使用之前定义就好了。(当然单单这么说不严谨,详细的可以去网上看看) 4、今天win10刚装的Kail,端口和win7的有些不同。成功解决win10下单片机开发板驱动识别问题 5、当然还有最后的结果 图五 用手机拍摄,还是能看到余晖,肉眼的效果还是很好的。 拓展:这里每次显示的都是爱心,所以整体是一个静态爱心的形状。 当如果动态显示的分别是I LOVE DOG,想来也是很好看。但是估计得16*16的尺寸。 苟日新,日日新。
上一篇:51单片机实现8x8LED灯阵动态显示移动文字
下一篇:51的LED点阵笔记
推荐阅读最新更新时间:2024-11-18 18:15
设计资源 培训 开发板 精华推荐
- NCP300LSN20T1 2V 窗口电压检测器的典型应用
- 用于视频 RGB 线路驱动器的 ±1.5 至 ±5V 仪表放大器
- 电路原理仿真
- EVK1104AU,基于AT32UC3A3256AU的开发板,32位AVR音频MCU
- 使用 Richtek Technology Corporation 的 RT8813C 的参考设计
- 炫彩芙兰灯
- 一种用于汽车照明的 LED 高亮度 LED 驱动器
- NCP51400 3 Amp VTT 终端稳压器 DDR1、DDR2、DDR3、LPDDR3、DDR4 的典型应用
- lmr16030sddar 60vdcdc降压3a
- RT8064 2A、2MHz、同步降压转换器的典型应用