文章目录
1、前言
在前面的文章中介绍了51单片机之串口通信,今天介绍单片机的LED点阵屏。
2、点阵屏幕
2-1、LED点阵屏
LED点阵屏通过LED(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画、视频等,是各部分组件都模块化的显示器件,通常由显示模块、控制系统及电源系统组成。LED点阵显示屏制作简单,安装方便,被广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。
2-2、驱动方式
由LED点阵显示器的内部结构可知,器件宜采用动态扫描驱动方式 工作,由于LED管芯大多为高型,因此某行或某列的单体LED驱动电流可选用窄脉冲 ,但其平均电流应限制在20mA 内。多数点阵显示器的单体LED的正向压降约在2V左右。但大亮点∮10的点阵显示器单体 LED的正向压降约为6V。
大屏幕显示系统一般是将由多个LED点阵组成的小模块以搭积木的方式组合而成的,每一个小模块都有自己的独立的控制系统,组合在一起后只要引入一个总控制器控制各模块的命令和数据即可,这种方法既简单而且具有易装、易维修的特点。
LED点阵显示系统中各模块的显示方式有静态 和动态显示两种。静态显示原理简单、控制方便,但硬件接线复杂,在实际应用中一般采用动态显示方式,动态显示采用扫描的方式工作,由峰值较大的窄脉冲驱动,从上到下逐次不断地对显示屏的各行进行选通,同时又向各列送出表示图形或文字信息的脉冲信号,反复循环以上操作,就可显示各种图形或文字信息。
Figure1. 点阵图
2-3、分类
LED点阵屏有单色和双色、全彩三类,可显示红,黄,绿,橙等。LED点阵有4×4、4×8、5×7、5×8、 8×8、16×16、24×24、40×40等多种;根据图素的数目分为等,双原色、三原色等,根据图素颜色的不同所显示的文字、图像等内容的颜色也不同,单原色点阵只能显示固定色彩如红、绿、黄等单色,双原色和三原色点阵显示内容的颜色由图素内不同颜色发光二极体点亮组合方式决定,如红绿都亮时可显示黄色,假如按照脉冲方式控制二极体的点亮时间,则可实现256或更高级灰度显示,即可实现真彩色显示。
3、显示原理
- LED点阵屏的结构类似于数码管,只不过是数码管把每一列的像素以"8"字型排列而已。
- LED点阵屏与数码管一样,有共阴 和共阳两种接法,不同的接法对应的电路结构不同。
- LED点阵屏需要进行逐行或逐列 扫描,才能使所有LED同时显示示。
Figure2. LED点阵 以简单的8X8点阵为例,它共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个LED点亮,则9脚接高电平13脚接低电平,则第一个点就亮了;如果要将第一行点亮,则第9脚要接高电平,而(13、3、4、10、6、11、15、16)这些引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第13脚接低电平,而(9、14、8、12、1、7、2、5)接高电平,那么第一列就会点亮。
4、LED点阵原理图
共阴极接法 ,因为单片机的IO口是弱上拉模式,输出低电平的驱动能力很强,输出高电平的驱动能力很弱。
Figure3. LED点阵原理图
5、74HC595(串转并)模块
5-1、原理图
Figure4. 74HC595(串转并)模块原理图
5-2、工作原理
- 74HC595是串行输入并行输出 的移位寄存器,可用3根线输入串行数据,8根线输出并行数据,多片级联后,可输出16位、24位、32位等,常用于IO口扩展。
- 通过移位寄存器SERCLK的上升沿 写入数据(串行写入 ),若是锁存寄存器RCLK有上升沿 时钟信号,则将数据并行输出到缓存寄存器(右边框)中。
Figure5. 74HC595(串转并)模块原理图
6、工程编码
6-1、C51的sfr、sbit
- sfr(special function register):特殊功能寄存器声明。例:sfr P0=0x80;声明P0口寄存器,物理地址为0x80。
- sbit(special bit):特殊位声明。例:sbit P0_1=0x81;或sbit p0_1 = P0^1;声明P0寄存器的第1位。
- 可位寻址/不可位寻址:在单片机系统中,操作任意寄存器或者某一位的数据时,必须给出其物理地址,又因为一个寄存器里有8位所以位的数量是寄存器数量的8倍,单片机无法对所有位进行编码,故每8个寄存器中,只有一个是可以位寻址的。对不可位寻址的寄存器,若要只操作其中一位而不影响其它位时,可用"&="、"=="、"^="的方法进行位操作。
Figure6. C51的sfr、sbit
6-2、特殊功能寄存器(SFRs)
特殊功能寄存器(SFR)是用来对片内各功能模块进行管理、控制、监视的控制寄存器和状态寄存器,是一个特殊功能的RAM区 。STC89C52系列单片机内的特殊功能寄存器(SFR)与内部高128字节RAM貌似共用相同的地址范围,都使用80H~FFH,但特殊功能寄存器(SFR)必须用直接寻址指令访问 。STC89C52系列单片机的特殊功能寄存器名称及地址映象如下表所示:
Figure7. C51的sfr、sbit
6-3、初版代码OneByte
Figure8. OneByte
c
#include <REGX52.H>
sbit _74HC595_RCLK = P3^5; // RCLK
sbit _74HC595_SRCLK = P3^6; // SRCLK
sbit _74HC595_SER = P3^4; // SER
void _74HC595_WriteByte(unsigned char OneByte)
{
unsigned char i;
for(i = 0; i < 8u; i++)
{
_74HC595_SER = OneByte & (0x80 >> i);
_74HC595_SRCLK = 1; /* Rising edge to write data. */
_74HC595_SRCLK = 0; /* Falling edge to disable write function. */
}
_74HC595_RCLK = 1; /* Rising edge to write data. */
_74HC595_RCLK = 0; /* Falling edge to disable write function. */
}
void main()
{
_74HC595_SRCLK = 0;
_74HC595_RCLK = 0;
_74HC595_WriteByte(0xF0);
while(1)
{
}
}
6-4、工程代码HappyFace
Figure9. HappyFace
c
#include <REGX52.H>
#include "Delay.h"
sbit _74HC595_RCLK = P3^5; // RCLK
sbit _74HC595_SRCLK = P3^6; // SRCLK
sbit _74HC595_SER = P3^4; // SER
void _74HC595_WriteByte(unsigned char OneByte)
{
unsigned char i;
for(i = 0; i < 8u; i++)
{
_74HC595_SER = OneByte & (0x80 >> i);
_74HC595_SRCLK = 1; /* Rising edge to write data. */
_74HC595_SRCLK = 0; /* Falling edge to disable write function. */
}
_74HC595_RCLK = 1; /* Rising edge to write data. */
_74HC595_RCLK = 0; /* Falling edge to disable write function. */
}
void _74HC595_MatrixLEDShowColumn(unsigned char Column, unsigned char Data)
{
_74HC595_WriteByte(Data);
P0 = ~(0x80 >> Column); // Bit selection
DelayMs(1); // Delay 1ms
P0 = 0xFF; // clear bit setup
}
void main()
{
_74HC595_SRCLK = 0;
_74HC595_RCLK = 0;
while(1)
{
_74HC595_MatrixLEDShowColumn(0, 0x3C);
_74HC595_MatrixLEDShowColumn(1, 0x42);
_74HC595_MatrixLEDShowColumn(2, 0xA9);
_74HC595_MatrixLEDShowColumn(3, 0x85);
_74HC595_MatrixLEDShowColumn(7, 0x3C);
_74HC595_MatrixLEDShowColumn(6, 0x42);
_74HC595_MatrixLEDShowColumn(5, 0xA9);
_74HC595_MatrixLEDShowColumn(4, 0x85);
}
}
6-5、工程代码模块化
Figure10.模块化
6-6、文字提取器
Figure11.文字提取器
6-7、工程代码Hello
Figure12.工程代码Hello
c
#include <REGX52.H>
#include "MatrixLED.h"
const unsigned char code Animation[] = // save to Flash
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x10,0x10,0xFF,0x00,0xFF,0x91,0x91,
0x91,0x00,0xFF,0x01,0x01,0x00,0xFF,0x01,
0x01,0x00,0x7E,0x81,0x81,0x7E,0x00,0xFD,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
void main()
{
unsigned char i;
unsigned char offset = 0;
unsigned char count;
_74HC595_Init();
while(1)
{
for(i = 0; i < 8u; i++)
{
_74HC595_MatrixLEDShowColumn(i, Animation[i + offset]);
}
count++;
if(count > 10)
{
count = 0;
offset++;
if(offset > 32) // 5*8 - 8 = 32
{
offset = 0;
}
}
}
}
6-8、工程测试
