历史上的今天
今天是:2025年03月16日(星期日)
2020年03月16日 | 51例程---led点阵
2020-03-16 来源:eefocus
一、LED点阵发光原理
(1)8*8单色单片机结构图如下:

从电路图中很简单的就可以看出来,想要点亮点阵中的某一个LED灯。只要使得那个灯所在的行输出高电平,所在列输出低电平就好。
(2)51单片机中一般用74HC595芯片驱动led点阵,单片机端口直接驱动。因为直接驱动8*8的点阵需要2个IO端口(16个IO口)、要驱动16*16的点阵需要4个IO端口(32个IO口)。使用74HC595驱动16*16点阵只需要4个74HC595+3个IO口即可(数据口、SCLK、RCLK)。
(3)74HC595的三个关键端口为SEG、SCLK、RCLK。SER进行数据的串行输入,SCLK提供移位时钟,RCLK提供锁存时钟。SCLK是移位时钟,595芯片内部在每个SCLK的上升沿会对SER引脚进行一次采样输入,就向595内部输入了1位,如此循环8次就输入了8位二进制。RCLK是锁存时钟,QA-QH的8位并行输出信号在RCLK的上升沿进行一次锁存更新。
二、例程,点亮16*16led点阵
(1)、编程需要单独操作1个IO引脚,譬如要操作P3.4,但是直接写P3.4的话C语言是不认识的,而必须使用sbit关键字来定义一个引脚。
#include sbit SER = P3^4; // 74HC595的串行输入端 sbit RCLK = P3^5; // 锁存时钟 sbit SCLK = P3^6; // 移位时钟 void main(void) { unsigned char i = 0; unsigned char d1, d2, d3, d4; // 要给4个595并行输出端输出的值 d1 = 0; d2 = 0; d3 = 0xff; d4 = 0xff; //d1和d2是接点阵负极的,d3和d4接点阵正极,所以只有给d1和d2低电平,d3和d4高电平,led点阵才会全亮 SCLK = 0; RCLK = 0; for (i=0; i<8; i++) { SER = d1 >> 7; // 将d1的最高bit取出来给SER SCLK = 0; SCLK = 1; // 2步制造了一个SCLK的上升沿 d1 = d1 << 1; } // 至此已经在8个SCLK上升沿把d1的8位依次全部发出去了 // 但是还没有进行锁存,所以QA-QH还没东西 for (i=0; i<8; i++) { SER = d2 >> 7; // 将d2的最高bit取出来给SER SCLK = 0; SCLK = 1; // 2步制造了一个SCLK的上升沿 d2 = d2 << 1; } // 至此已经把d1和d2都发出去了,并且d1已经被d2挤到第2个595芯片里面去了 // 但是还没有进行锁存,所以QA-QH还没东西 for (i=0; i<8; i++) { SER = d3 >> 7; // 将d3的最高bit取出来给SER SCLK = 0; SCLK = 1; // 2步制造了一个SCLK的上升沿 d3 = d3 << 1; } // 至此已经把d1和d2和d3都发出去了,并且d1已经被d2和d3挤到第3个595芯片里面去了 // 但是还没有进行锁存,所以QA-QH还没东西 for (i=0; i<8; i++) { SER = d4 >> 7; // 将d4的最高bit取出来给SER SCLK = 0; SCLK = 1; // 2步制造了一个SCLK的上升沿 d4 = d4 << 1; } // 至此已经把d1和d2和d3和d4都发出去了,并且d1已经被d2、d3、d4挤到第4个595芯片里面去了 // 但是还没有进行锁存,所以QA-QH还没东西 // 截至这里,4个字节的数据d1、d2、d3、d4已经顺着74HC595的SER->QH'的串行输入 // 串行输出路线,已经爬满了4个74HC595(最先送出去的到了最后没一个595中) // 但是目前为止4个595的QA-QH还都没有输出呢,点阵自然不会亮。 // 然后要进行一次锁存,4个595芯片同时在进行锁存,各自锁存住了自己的数据 RCLK = 0; RCLK = 1; // 这两句之后595就完成了锁存,d1-d4就会影响4个595芯片的并行输出端,进而 // 会影响点阵中LED的正负极的值,然后LED就会亮或者灭。 }
上一篇:8x8LED点阵显示数字和汉字
史海拾趣
|
信息产业部电子信息产品管理司副司长丁文武在“2006中国软件产业发展高峰论坛”上透露,未来五年内我国的软件从业人员要达到250万左右。目前,我国的软件产业从业人员的规模还不到120万,软件人才的数量存在巨大的缺口。 人才的短缺性使得软件 ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:00 编辑 电子竞赛人应该具备的经验 1.许多人死在第一天上午,却毫无知觉. 第一天上午是一个选题的日子.一般每个组都有一个能力比较强的担任组长.往往由于缺乏经验,在方案选定上走上歧路. 到底 ...… 查看全部问答> |
|
在ceshell下的SHBindToParent函数有人能解释下如何用吗?请用中文解释,到msdn上抄袭没有意义。 在ceshell下的SHBindToParent函数有人能解释下如何用吗?请用中文解释,到msdn上抄袭没有意义。 … 查看全部问答> |
|
#define ADC2 ((ADC_TypeDef *) ADC2_BASE) #define ADC2 ((ADC_TypeDef *) ADC2_BASE) 中(ADC_TypeDef *) ADC2_BASE是什么啊定义一指针变量吗求解… 查看全部问答> |
|
人人都爱易电源——转发有礼! 活动主题:人人都爱易电源——转发有礼! 活动时间:10月11日—28日 活动链接:https://bbs.eeworld.com.cn/thread-352431-1-1.html … 查看全部问答> |
|
芯片是LM4F231, ARM M4的内核,开发环境是IAR 6.3。 遇到的问题,当定义局部变量时比如 float f=1.1; 时在IAR下察看local 局部变量值时发现f变量值为 也没有分配变量地址。 对于这一问题研究了很久, ...… 查看全部问答> |




