太原理工大学单片机课程设计

更新时间:2024-02-03 17:37:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

太原理工大学现代科技学院

嵌入式系统基础课程设计

设计名称16×16点阵LED电子显示屏 专业班级 学 号 姓 名 指导教师

太原理工大学现代科技学院 课程设计

……………………………………装………………………………………订…………………………………………线………………………………………专业班级 自动化09-2 学号 姓名 成绩

16×16点阵LED电子显示屏的设计 一、功能要求 设计一个16×16点阵LED电子显示屏。要求在目测条件下LED显示屏各亮点度均匀、充沛,可显示图形和文字,显示图形和文字稳定、清晰无串扰、图形或文字显示有静止、移动/移出等显示方式。

二、方案论证

2.1 LED驱动显示方案

大屏幕显示广泛应用于各个领域,动态大屏幕显示系统显示的文字,数字,图形等生动逼真,立体感强。用单片机驱动LED点阵有很多方法,按显示方式分,有静态显示和动态(扫描)显示,按译码方式可分硬件译码和软件译码之分。 静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据送出后就不再管,直到下一次显示数据需要更新时再传送一次新数据,显示数据稳定,占用很少的CPU时间。动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。这两种显示方式各有利弊;静态显示虽然数据稳定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的硬件较多;动态显示虽然有闪烁感,占用的CPU时间多,但使用的硬件少,能节省线路板空间。 如果用静态显示的方法 ,16×16的点阵共有256个发光二极管,单片机没有那么多的端口,如果用锁存器来扩展端口,按8位锁存器来计算,也需要32个锁存器。两位显示就需要64个锁存器。因此在实际应用中的显示屏几乎都不采用静态显示,而是采用动态扫描的显示方法。 本次设计的要求是2位的16×16点阵显示,采用动态显示,扫描电路就可以实现多行的同名列共用一套列驱动器。具体就16×16的点阵来说,把所有同一行的发光二极管的阳极连在一起,把同一列的发光二极管的阴极连在一起(共阳接法),先送出对应的第一行发光二极管亮灭的数据并锁存,然后选通第1行使其亮灭的时间,然后熄灭;再送对应的第二行的数据,依次下去,直到第16行。整个来回的时间只要能够达到每秒24次以上,由于人眼的视觉暂留现象,就可以看到显示在屏幕上的稳定的图像了。 2.2数据传输和显示方案 采用扫描方式进行显示时,每行一个行驱动器,各行的同名列共用一个列驱动器。显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。显示时要把一行中各列的数据都传送到相应的列驱动器上,这就存在着一个显示数据传输的问题。从控制电路到列驱动器的数据传输可以采用并行方式或串行方式。显然,采用并行方式时,从控制电路到列驱动器的线路数量大,相应的硬件数目多。当列数很多时,

太原理工大学现代科技学院 课程设计

……………………………………装………………………………………订…………………………………………线………………………………………并行传输的方案不可取。 采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面比较经济。但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都已传输到位后,这一行的各列才能并行地进行显示。这样,对于一行的显示过程就可以分解为列数据传输和列数据显示两个部分。 解决串行传输中列数据传输和列数据显示的时间矛盾问题,可以采用重叠处理的方法。即在显示本行各列数据的同时,传送下一行的列数据。为了达到重叠处理的目的,列数据的显示就需要具有锁存的功能。经过上述分析,归纳出列驱动器电路应具备的主要功能,对于列数据段传输来说,应能实现串入并出的移位功能;对于列数据显示来说,应具有并行锁存的功能。 综上所述,本次设计采用动态扫描方式驱动LED显示,采用串入并出的方法实现数据传输和采用并行锁存的方法实现数据显示。 2.3系统整体方案框图 经过分析,给出系统电路原理框图如图1-1。

列驱动器 单片机电源

行驱动器 LED点阵屏 图1-1 系统电路原理框图

太原理工大学现代科技学院 课程设计

……………………………………装………………………………………订…………………………………………线………………………………………三、系统硬件电路设计

硬件电路大致上可以分成单片机系统及外围电路、列驱动电路和行驱动电路三部分。

3.1单片机系统及其外围电路 本次设计采用单片机STC89C51,使用11.0592MHZ的晶振。单片机的串口与列驱动器相连,用来送显示数据。P1口低4位与行驱动器相连,送出行选信号;P1.5~P1.7口则用来送控制信号。P0和P2空着,在有必要时可以扩展系统的ROM和RAM.设计的显示界面可显示2个汉字,需要8个8×8 LED点阵模块,组成16×32的矩形点阵。 3.2行驱动电路 单片机P1口低4位输出的行号经4/16线译码器74LS154译码后生成16条行选通信号线,再经过驱动器驱动对应的行线当选通端(G1、G2)均为低电平时,可将地址端(ABCD)的二进制编码在一个对应的输出端,以低电平译出。 若将 G1 和 G2 中的一个作为数据输入端,由 ABCD 对输出寻址,54/74154 还可作 1 线-16 线数据分配器。一条行线上要带动16列的LED进行显示,按每一LED器件20mA电流计算,

32个LED同时发光时,需要640mA电流,选用三极管8550作为驱动管可满足要求。

3.3列驱动电路 列驱动器由集成电路74HC595构成。它具有一个8位串入并出的移位寄存器和一个8位输出锁存器的结构,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本行各列数据的同时,传送下一行的列数据,即达到重叠处理的目的。 引脚SI为串行数据输入端,与单片机串口RXD(P3.0)相连,用来传送数据;引脚SCK为移位寄存器的移位时钟脉冲,与单片机串口TXD(P3.1)相连;引脚SCLR信号是移位寄存器的清0输入端,低电平有效,接与单片机P1.5口;RCLK是输出寄存器的打入信号,与单片机P1.6口相接;

太原理工大学现代科技学院 课程设计

……………………………………装………………………………………订…………………………………………线………………………………………

图1-2 硬件电路原路图 四、主要元器件功能介绍

4.1 8×8点阵LED结构 LED点阵电子显示屏是利用发光二极管点阵模块组成的平面显示屏幕。8×8点阵是最基本的单元模块,由4

块8×8点阵可构成一块16×16点阵模块,由8块8×8点阵可构成一块18×32点阵模块。 单色8×8点阵外形及结构如图1-3:

图1-3

太原理工大学现代科技学院 课程设计

……………………………………装………………………………………订…………………………………………线………………………………………从图1-3中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;如要将第一个点点亮,则9脚接低电平13脚接高电平,则第一个点就亮了;如果要将第一行点亮,则第9脚要接低电平,而(13、3、4、10、6、11、15、16)这些引脚接高电平,那么第一行就会点亮;如要将第一列点亮,则第13脚接高电平,而(9、14、8、12、1、7、2、5)接低电平,那么第一列就会点亮。

4.2 74LS154芯片介绍

74LS154为4线-16线译码器,其管脚图如图1-4所示。

引脚A,B,C,D为译码地址输入端,低电平有效;G1,G2为选通端,低电平有效;0-15为输出端,低电平有

效。其功能表如图1-5所示。

太原理工大学现代科技学院 课程设计

……………………………………装………………………………………订…………………………………………线………………………………………图1-5

4.3 74LS595芯片介绍 74LS595是一个8位串行输入并行输出的移位寄存器和一个8位输出锁存器的结构。74HC595的内部结构如图1-6它的输入端有8个串行移位寄存器,每个移位寄存器的输出都连接一个输出锁存器。引脚SER是串行数据的输入端。引脚SRCLK是移位寄存器是移位时钟脉冲,在其上升沿发生移位,并将SER的下一个数据打入最低位。移位后的各路信号出现在各移位寄存器的输出端。RCLK是输出锁存器的打入信号,其上升沿将移位寄存器的输出打入输出锁存器。引脚E是输出三态门的开放信号,只要当其为低时锁存器的输出才开放,否则为高阻态。SRCLK*是寄存器的清零输入端,当其为低电平时输出全部为零。由于SRCLK和RCLK两个信号是互相独立的,所以能够作到输入串行移位与输出锁存互不干扰。芯片的输出端为Q0——Q7,最高位Q7可以做为多片74LS595级联应用向下级的芯片输入。但因Q7受输出锁存器打控制,所以还从输出锁存器前引出了QT作为级联输出。

太原理工大学现代科技学院 课程设计

……………………………………装………………………………………订…………………………………………线………………………………………图1-6

五、系统软件设计 显示屏软件的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。根据软件分层次设计的原理,可把显示屏的软件系统分成两大层:第一层是底层的显示驱动程序,第二层是上层的系统应用程序。显示驱动程序负责向屏体送显示数据,并负责产生行扫描信号和其它控制信号,配合完成LED显示屏的扫描显示工作。显示驱动程序由定时器T0中断程序实现。系统应用程序完成系统环境的设置、显示效果处理等工作,由主程序来实现。 5.1 显示驱动程序 显示驱动程序在进入中断后首先要对定时器T0重新赋初值,以保证显示屏刷新率的稳定,然后显示驱动程

太原理工大学现代科技学院 课程设计

……………………………………装………………………………………订…………………………………………线………………………………………序查询当前燃亮的行号,从显示缓寸区内读取下一行的显示数据,并通过串口发送给移位寄存器。为消除在切换行显示数据的时候产生的拖尾现象,驱动程序先要关闭显示屏,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显示。

图1-7是显示驱动程序的流程图。

进去中断 定时器赋初值 读取行号并增1 送新行显示数据 消隐 切换显示数据 送新行号、打开显示 退出中断

图1-7 5.2系统主程序

系统主程序开始以后,首先是对系统环境初始化,包括设置串口、定时器、中断和端口以及显示效果。如、左移、右移等。系统主程序的流程图如图1-8所示。

太原理工大学现代科技学院 课程设计

……………………………………装………………………………………订…………………………………………线………………………………………开始 系统初始化 左移显示效果 两边对移显示效果 上移显示效果 图1-8

六.调试及性能分析

6.1硬件调试 首先检查各个焊接点的焊接是否焊接正确,看是否有短路和断路,看各条线连接是否确,对照原理图逐条线逐个点的检查;然后检查芯片的没个引脚的功能,看其是否有实现,一部分一部分的检查。直至检查出错误或保证电路完全正确。在本次设计中由于连线过多加至板面有限,布线时线布的过于密,因此要防止相邻的两条线之间短路,所以要一条线一条线的检查,把短路的给分离开,把断路的给补上。硬件调试时首先要检查晶振是否会正常起振,既看AT89S52的18脚是否有约12MHZ的频率,看30是否有1/6的晶振频率;然后再检查74LS154的使能端是否正常工作;再看74LS595的SER端是否有脉冲并检查其它引脚的脉冲和时序是否都正常工作。最后再检查LED灯的各行和各列是否都连接正确。各部分都调试正常之后就可以进行软件调试了。

6.2软件调试 软件部分需要调试的分需要调试的主要有显示屏的刷新率及显示效果部分。 显示屏的刷新率由定时器T0的溢出率和单片机的晶振频率决定。显示驱动程序在进入中断后首先要对定时器T0重新赋初值,以保证显示屏的刷新率的稳定。定时器T0设定为工作方式1,即16位定时器模式,晶振频率f为11.0592MHZ,通过计算得定时器T0的初值TH0=0XFCH,TL0=0X18H. 显示效果处理程序的内容及方法非常广泛,本次采用的是左移、两边对移、和上移。 调试时要编一些检查LED灯是否完好、是否连接正确的小程序,看控制的端口的控制命令是否正确,

太原理工大学现代科技学院 课程设计

……………………………………装………………………………………订…………………………………………线………………………………………0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*-- 文字: 岁 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x01,0x00,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x04,0x00,0x04,0x00,0x0F,0xF8, 0x10,0x10,0x24,0x10,0x42,0x20,0x02,0x40,0x01,0x80,0x06,0x00,0x18,0x00,0x60,0x00, /*-- 文字: 拥 --* / /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

0x10,0x00,0x13,0xFE,0x12,0x22,0xFE,0x22,0x12,0x22,0x13,0xFE,0x16,0x22,0x1A,0x22,

0x33,0xFE,0xD2,0x22,0x12,0x22,0x12,0x22,0x14,0x22,0x14,0x22,0x58,0x2A,0x20,0x04,

/*-- 文字: 抱 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x11,0x00,0x11,0x00,0x11,0x00,0x11,0xFC,0xFE,0x04,0x12,0x04,0x17,0xE4,0x1A,0x24, 0x32,0x24,0xD3,0xE4,0x12,0x14,0x12,0x08,0x12,0x02,0x12,0x02,0x51,0xFE,0x20,0x00, /*-- 文字: 新 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

0x10,0x00,0x08,0x0E,0x7F,0x70,0x22,0x40,0x14,0x40,0xFF,0x7E,0x08,0x48,0x08,0x48, 0xFF,0x48,0x08,0x48,0x2C,0x48,0x2A,0x88,0x4A,0x88,0x89,0x08,0x2A,0x08,0x10,0x08, /*-- 文字: 生 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x80,0x10,0xC0,0x10,0x80,0x10,0x88,0x1F,0xFC,0x20,0x80,0x20,0x80,0x40,0x88,

0x9F,0xFC,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x84,0x7F,0xFE,0x00,0x00,

}; register unsigned char i,j,k,l;

SCON =0x00; TMOD =0x01;

TR0 =1;

P1 =0x3F; IE =0x82; 太原理工大学现代科技学院 课程设计

……………………………………装………………………………………订…………………………………………线………………………………………while (1) { for(i=0;i<16;i++) { for(j=0;j<2;j++) for(k=1;k<9;k++) { for(l=0;l<16;l++) { dispram[l*BLKN] = dispram[l*BLKN] << 1 | dispram[l*BLKN+1] >> 7; dispram[l*BLKN+1] =dispram[l*BLKN+1] <<1 | Bmp[i][l*2+j] >> (8-k);

dispram[l*BLKN+2] =dispram[l*BLKN+2] <<1 | dispram[l*BLKN+3] >> 7;

dispram[l*BLKN+3] =dispram[l*BLKN+3] <<1 | Bmp[i+1][l*2+j] >>(8-k); } delay(100); } }delay(2000);

for(i=0;i<4;i++) { for(j=0;j<2;j++)

for(k=1;k<9;k++) {

for (l=0;l<16;l++)

{dispram[l*BLKN] = dispram[l*BLKN] >> 1 | dy[i*2][l*2+1-j] << (8-k);

dispram[l*BLKN+1] =dispram[l*BLKN+1] >> 1 |dispram[l*BLKN] << 7; dispram[l*BLKN+2] =dispram[l*BLKN+2] << 1 | dispram[l*BLKN+3] >> 7; dispram[l*BLKN+3] =dispram[l*BLKN+3] << 1 | dy[i*2+1][l*2+j] >> (8-k); 太原理工大学现代科技学院 课程设计

……………………………………装………………………………………订…………………………………………线………………………………………} delay(30); }

delay(2000); }delay(2000); for(i=0;i<4;i++) {for(j=0;j<16;j++) { for(k=0;k<15;k++) {dispram[k*BLKN]=dispram[(k+1)*BLKN]; dispram[k*BLKN+1]=dispram[(k+1)*BLKN+1]; dispram[k*BLKN+2]=dispram[(k+1)*BLKN+2]; dispram[k*BLKN+3]=dispram[(k+1)*BLKN+3]; } dispram[60]=sgp[i*2][j*2]; dispram[61]=sgp[i*2][j*2+1]; dispram[62]=sgp[i*2+1][j*2]; dispram[63]=sgp[i*2+1][j*2+1];

delay(100); } }delay(2000); } }

void delay(unsigned int dt) { register unsigned char bt; for(;dt;dt--) for (bt =0;bt<255;bt++); 太原理工大学现代科技学院 课程设计

……………………………………装………………………………………订…………………………………………线………………………………………} void leddisplay(void) interrupt 1 using 1 { register unsigned char i,j=BLKN; TH0=0xFC; TL0=0x18;

i=P1; i=++i & 0x0f; do { j--; SBUF = dispram[i*BLKN+j];

while(!TI);TI=0;

} while(j); G=1; P1&=0xf0; RCLK = 1; P1 |=i; RCLK=0; G=0; }

附录二 系统PCB图 太原理工大学现代科技学院 课程设计

……………………………………装………………………………………订…………………………………………线………………………………………

太原理工大学现代科技学院 课程设计

……………………………………装………………………………………订…………………………………………线………………………………………目录

一、功能要求

二、方案论证

2.1 LED驱动显示方案

2.2数据传输和显示方案 2.3系统整体方案框图 三、系统硬件电路设计

3.1单片机系统及其外围电路

3.2行驱动电路

3.3列驱动电路

四、主要元器件功能介绍

4.1 8×8点阵LED结构

4.2 74LS154芯片介绍

4.3 74LS595芯片介绍

五、系统软件设计

5.1 显示驱动程序

5.2软件调试

六.调试及性能分析

6.1硬件调试

6.2软件调试

七.设计总结

参考文献 附录一: 完整源程序

附录二:系统PCB图

太原理工大学现代科技学院 课程设计

……………………………………装………………………………………订…………………………………………线………………………………………目录

一、功能要求

二、方案论证

2.1 LED驱动显示方案

2.2数据传输和显示方案 2.3系统整体方案框图 三、系统硬件电路设计

3.1单片机系统及其外围电路

3.2行驱动电路

3.3列驱动电路

四、主要元器件功能介绍

4.1 8×8点阵LED结构

4.2 74LS154芯片介绍

4.3 74LS595芯片介绍

五、系统软件设计

5.1 显示驱动程序

5.2软件调试

六.调试及性能分析

6.1硬件调试

6.2软件调试

七.设计总结

参考文献 附录一: 完整源程序

附录二:系统PCB图

本文来源:https://www.bwwdw.com/article/zf5w.html

Top