文章目录
设计要求
一、开发软件
1、Keil
2、Proteus
3、PCtol2002
4、Altium Designer
二、硬件部分
1、51单片机最小系统
2、LED点阵屏
3、74HC595
4、74HC154
三、软件部分
1、74HC595写入数据
2、点阵屏显示数据
3、点阵屏正向移动
4、点阵屏反向移动
5、字模建立
四、电路与仿真
总结
设计要求
设计并制作“16×32点阵显示屏”。
构建点阵译码显示单元、电源单元和控制器单元;自主设计电源转换模块,点阵译码显示模块等。
(1)点阵译码显示模块为16行×32列,可显示汉字,并能滚动显示(左右滚动);
(2)显示内容“海南大学”。
一、开发软件 1、Keil 2、Proteus 3、PCtol2002 4、Altium Designer 二、硬件部分 1、51单片机最小系统
电路图如下
2、LED点阵屏LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列,以灯珠亮灭来显示文字、图片、视频等。
LED点阵屏广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。
LED点阵屏的结构类似于数码管,只不过是数码管把每一列的像素以“8”字型排列而已
LED点阵屏与数码管一样,有共阴和共阳两种接法,不同的接法对应的电路结构不同
LED点阵屏需要进行逐行或逐列扫描,才能使所有LED同时显示
74HC595是串行输入并行输出的移位寄存器,可用3根线输入串行数据,8根线输出并行数据,多片级联后,可输出16位、24位、32位等,常用于IO口扩展。
数据由SDI输入,当SCLK为上升沿时,数据整体向下移动,当RCLK为上升沿时数据由移位寄存器向右转存入存储寄存器。
当两片芯片级联时,下一级芯片数据由上一级芯片的QH'输入(为图中的SD0引脚)
4、74HC15474HC138的功能即将4位二进制(A,B,C和D),译码成16输出状态,并且一共有16输出I/O,这16位输出的特点是:互斥(同时只有一位有效)、低有效(低电平表示有效,表示选中)。
简单来说,74HC154实现了用4根线选择16根线(16选1)的功能。
OE1和OE2为芯片的使能端,同时为低电平时芯片有效。
/**
* @brief 74HC595写入两个字节
* @param S X要写入的字节 S为上高8位 X为下低八位
* @retval 无
*/
void _74HC595_WriteData(unsigned char S,unsigned char X)
{
unsigned char i;
RCK=0;
for(i=0;i<16;i++)
{
SCK=0;
if(i<8)
{
SER=X&(0x80>>i);
}
else
{
SER=S&(0x80>>(i-8));
}
SCK=1;
}
RCK=1;
}
2、点阵屏显示数据
/**
* @brief LED点阵屏显示一列数据
* @param Column 要选择的列,范围:0~31
* @param Data 选择列显示的数据,高位在上,1为亮,0为灭
* @retval 无
*/
void MatrixLED_ShowColumn(unsigned char Column,DataA,DataB)
{
if(Column < 16)MATRIX_LED_PORT = (Column | 0x20);
if(Column >= 16)MATRIX_LED_PORT = (Column | 0x10);
_74HC595_WriteData(DataA,DataB);
Delay(1);
MATRIX_LED_PORT&=0x00;
}
3、点阵屏正向移动
while(1)
{
for(i=0;i<32;i++)
{
MatrixLED_ShowColumn(i,table1[i+offset],table2[i+offset]);//依次扫描32列
}
offset++;
if(offset>16*15)offset=0;
}
4、点阵屏反向移动
for(i=0;i<32;i++) //将数组的高一位数据赋值给低一位
{
Stable1[i]=Stable1[i+1];
Xtable2[i]=Xtable2[i+1];
}
Stable1[31]=table1[31+16*(offset/16+1)-offset%16]; //最高位数据为下一个字符的最后一列数据
Xtable2[31]=table2[31+16*(offset/16+1)-offset%16];
for(i=0;i<32;i++)
{
MatrixLED_ShowColumn(32-i,Stable1[i],Xtable2[i]);
}
5、字模建立
1.使用PCtoLCD2002取字模软件,将模式设置为字符模式
2.字模选项如下图所示
因为我们是按列扫描,行显示,所以取模方式为行列式
3.输入要显示的字符,点击生成字模
生成字模如下
0x10,0x60,0x02,0x0C,0xC0,0x10,0x08,0xF7,0x14,0x54,0x94,0x14,0xF4,0x04,0x00,0x00
0x04,0x04,0x7C,0x03,0x00,0x01,0x1D,0x13,0x11,0x55,0x99,0x51,0x3F,0x11,0x01,0x00/*"海",0*/
0x04,0xE4,0x24,0x24,0x64,0xA4,0x24,0x3F,0x24,0xA4,0x64,0x24,0x24,0xE4,0x04,0x00
0x00,0xFF,0x00,0x08,0x09,0x09,0x09,0x7F,0x09,0x09,0x09,0x48,0x80,0x7F,0x00,0x00/*"南",1*/
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00
0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00/*"大",2*/
0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96,0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00
0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,0x06,0x05,0x04,0x04,0x04,0x04,0x04,0x00/*"学",3*/
4.将字模上下部分分开,新建两个数组保存数据
unsigned char code table1[]=
{
0x10,0x60,0x02,0x0C,0xC0,0x10,0x08,0xF7,0x14,0x54,0x94,0x14,0xF4,0x04,0x00,0x00,/*"海",上*/
0x04,0xE4,0x24,0x24,0x64,0xA4,0x24,0x3F,0x24,0xA4,0x64,0x24,0x24,0xE4,0x04,0x00,/*"南",上*/
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,/*"大",上*/
0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96,0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00,/*"学",上*/
}
unsigned char code table2[]=
{
0x04,0x04,0x7C,0x03,0x00,0x01,0x1D,0x13,0x11,0x55,0x99,0x51,0x3F,0x11,0x01,0x00,/*"海",下*/
0x00,0xFF,0x00,0x08,0x09,0x09,0x09,0x7F,0x09,0x09,0x09,0x48,0x80,0x7F,0x00,0x00,/*"南",下*/
0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00,/*"大",下*/
0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,0x06,0x05,0x04,0x04,0x04,0x04,0x04,0x00,/*"学",下*/
}
四、电路与仿真
正向仿真
反向仿真
电路图如下
总结
经过好几天的努力,现已完成了基本功能,但因为只是做了仿真(因为我懒),实物与理论可能纯在偏差,如有错,望指正。
原理图和仿真我就不给了,大家可以根据我给的图自己画。
程序源码&取自模软件 如下
链接:https://pan.baidu.com/s/1x0F5ruFyxJP5kVsAxUQRBg
提取码:es6h
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)