太原理工大学单片机课程设计.docx
《太原理工大学单片机课程设计.docx》由会员分享,可在线阅读,更多相关《太原理工大学单片机课程设计.docx(32页珍藏版)》请在冰豆网上搜索。
太原理工大学单片机课程设计
太原理工大学现代科技学院
嵌入式系统基础课程设计
设计名称16×16点阵LED电子显示屏
专业班级
学号
姓名
指导教师
专业班级自动化09-2学号成绩
……………………………………装………………………………………订…………………………………………线………………………………………
16×16点阵LED电子显示屏的设计
一、功能要求
设计一个16×16点阵LED电子显示屏。
要求在目测条件下LED显示屏各亮点度均匀、充沛,可显示图形和文字,显示图形和文字稳定、清晰无串扰、图形或文字显示有静止、移动/移出等显示方式。
二、方案论证
2.1LED驱动显示方案大屏幕显示广泛应用于各个领域,动态大屏幕显示系统显示的文字,数字,图形等生动逼真,立体感强。
用单片机驱动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。
单片机
……………………………………装………………………………………订…………………………………………线………………………………………
三、系统硬件电路设计
硬件电路大致上可以分成单片机系统及外围电路、列驱动电路和行驱动电路三部分。
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口相接;
……………………………………装………………………………………订…………………………………………线………………………………………
四、主要元器件功能介绍
4.18×8点阵LED结构
LED点阵电子显示屏是利用发光二极管点阵模块组成的平面显示屏幕。
8×8点阵是最基本的单元模块,由4块8×8点阵可构成一块16×16点阵模块,由8块8×8点阵可构成一块18×32点阵模块。
单色8×8点阵外形及结构如图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.274LS154芯片介绍74LS154为4线-16线译码器,其管脚图如图1-4所示。
引脚A,B,C,D为译码地址输入端,低电平有效;G1,G2为选通端,低电平有效;0-15为输出端,低电平有
效。
其功能表如图1-5所示。
4.374LS595芯片介绍
74LS595是一个8位串行输入并行输出的移位寄存器和一个8位输出锁存器的结构。
74HC595的内部结构如图1-6它的输入端有8个串行移位寄存器,每个移位寄存器的输出都连接一个输出锁存器。
引脚SER是串行数据的输入端。
引脚SRCLK是移位寄存器是移位时钟脉冲,在其上升沿发生移位,并将SER的下一个数据打入最低位。
移位后的各路信号出现在各移位寄存器的输出端。
RCLK是输出锁存器的打入信号,其上升沿将移位寄存器的输出打入输出锁存器。
引脚E是输出三态门的开放信号,只要当其为低时锁存器的输出才开放,否则为高阻态。
SRCLK*是寄存器的清零输入端,当其为低电平时输出全部为零。
由于SRCLK和RCLK两个信号是互相独立的,所以能够作到输入串行移位与输出锁存互不干扰。
芯片的输出端为Q0——Q7,最高位Q7可以做为多片74LS595级联应用向下级的芯片输入。
但因Q7受输出锁存器打控制,所以还从输出锁存器前引出了QT作为级联输出。
……………………………………装………………………………………订…………………………………………线………………………………………
五、系统软件设计
显示屏软件的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。
根据软件分层次设计的原理,可把显示屏的软件系统分成两大层:
第一层是底层的显示驱动程序,第二层是上层的系统应用程序。
显示驱动程序负责向屏体送显示数据,并负责产生行扫描信号和其它控制信号,配合完成LED显示屏的扫描显示工作。
显示驱动程序由定时器T0中断程序实现。
系统应用程序完成系统环境的设置、显示效果处理等工作,由主程序来实现。
5.1显示驱动程序
显示驱动程序在进入中断后首先要对定时器T0重新赋初值,以保证显示屏刷新率的稳定,然后显示驱动程
……………………………………装………………………………………订…………………………………………线………………………………………
序查询当前燃亮的行号,从显示缓寸区内读取下一行的显示数据,并通过串口发送给移位寄存器。
为消除在切换行显示数据的时候产生的拖尾现象,驱动程序先要关闭显示屏,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显示。
图1-7是显示驱动程序的流程图。
5.2系统主程序
系统主程序开始以后,首先是对系统环境初始化,包括设置串口、定时器、中断和端口以及显示效果。
如、左移、右移等。
系统主程序的流程图如图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灯是否完好、是否连接正确的小程序,看控制的端口的控制命令是否正确,
……………………………………装………………………………………订…………………………………………线………………………………………
显示的字是否亮度均匀、充足、显示的文字是否稳定、清晰无串绕。
我在做本次设计中,主要是硬件调试,在程序调试时观察字左移显示是否完全显示完.,还在字段间加空格使得显示更加美观,另外显示的延时也要取得恰当。
七.设计总结
两周的课程设计终于圆满落下帷幕了。
经过这次的课程设计,让我更深刻体会到了把理论学习联系到实践应用当中的重要性。
应该说我们所选择的课题16×16点阵LED电子显示屏的设计是一项硬件相对复杂、软件相对简单的设计,一开始由于对设计原理没有做到很深入的理解,导致一开始画原理图出现了点小错误,后来在老师的指导下画出了正确的原理图,后来的画PCB和做板的过程中又出现了问题,画PCB中由
于理解错误把8*8点阵LED的位置放错了,以致在做板过程中经过一番修改才做出了正确的PCB板。
在软件设计时,参考了很多网上搜索的资料,经过无数次的修改和调试,最后确定了这次设计的源程序。
总之,经过这次课程设计,让我们的实践动手能力得到了很大的提高,在接下来的学习中,我们应该更多的把学习的理论知识应用到实践当中。
参考文献
[1]李晓林.单片机原理与接口技术第二版.:
电子工业出版社.2005.8
[2]《AT24C02数据手册》
完整源程序
#include
#defineBLKN4
sbitG=0x97;
sbitRCLK=0x96;
sbitSCLR=0x95;
voiddelay(unsignedint);
unsignedchardatadispram[64];
voidmain(void)
{
unsignedcharcodeBmp[][32]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
……………………………………装………………………………………订…………………………………………线………………………………………
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*--文字:
请--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x00,0x40,0x47,0xFC,0x30,0x40,0x23,0xF8,0x00,0x40,0x07,0xFE,0xF0,0x00,0x13,0xF8,
0x12,0x08,0x13,0xF8,0x12,0x08,0x13,0xF8,0x16,0x08,0x1A,0x08,0x12,0x28,0x02,0x10,
/*--文字:
乘--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x00,0x78,0x3F,0x80,0x01,0x04,0xFF,0xFE,0x09,0x20,0x79,0x2C,0x09,0x30,0x09,0x22,
0x39,0x3E,0xCB,0x80,0x07,0x60,0x0D,0x30,0x31,0x1C,0xC1,0x08,0x01,0x00,0x00,0x00,
/*--文字:
客--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x02,0x00,0x01,0x00,0x3F,0xFE,0x44,0x04,0x44,0x08,0x07,0xF0,0x0C,0x20,0x12,0x40,
0x21,0x80,0x06,0x70,0x3F,0xFE,0xC8,0x14,0x08,0x10,0x08,0x10,0x0F,0xF0,0x08,0x10,
/*--文字:
保--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x10,0x00,0x1B,0xF8,0x12,0x08,0x22,0x08,0x32,0x08,0x63,0xF8,0xA0,0x40,0x2F,0xFE,
0x20,0xE0,0x21,0x60,0x21,0x50,0x22,0x58,0x24,0x4E,0x28,0x44,0x20,0x40,0x00,0x00,
/*--文字:
管--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x20,0x80,0x3E,0xFC,0x51,0x20,0x8A,0x10,0x01,0x00,0x7F,0xFE,0x40,0x04,0x1F,0xE0,
0x10,0x20,0x1F,0xE0,0x10,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,
/*--文字:
好--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x10,0x00,0x11,0xFC,0x10,0x08,0x10,0x10,0xFC,0x20,0x24,0x20,0x24,0x20,0x27,0xFE,
0x44,0x20,0x64,0x20,0x18,0x20,0x08,0x20,0x14,0x20,0x26,0x20,0x44,0xA0,0x80,0x40,
/*--文字:
随--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x00,0x20,0xF8,0x20,0x95,0xFE,0x94,0x40,0xA0,0xF8,0xC1,0x88,0xAC,0x88,0x94,0xF8,
……………………………………装………………………………………订…………………………………………线………………………………………
0x94,0x88,0x94,0xF8,0xD4,0x88,0xA4,0xA8,0x84,0x90,0x8B,0x00,0x90,0xFE,0x80,0x00,
/*--文字:
身--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x02,0x00,0x04,0x00,0x0F,0xF0,0x08,0x10,0x0F,0xF0,0x08,0x14,0x0F,0xF6,0x08,0x14,
0x08,0x18,0x7F,0xFE,0x00,0x70,0x01,0x90,0x06,0x10,0x18,0x10,0x60,0x50,0x00,0x20,
/*--文字:
贵--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x01,0x00,0x1F,0xF0,0x11,0x10,0x1F,0xF0,0x01,0x00,0xFF,0xFE,0x00,0x00,0x1F,0xF0,
0x10,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x12,0x90,0x04,0x40,0x18,0x38,0x60,0x10,
/*--文字:
重--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x01,0xF0,0x3F,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,0x1F,0xF0,0x11,0x10,0x1F,0xF0,
0x11,0x10,0x1F,0xF0,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,
/*--文字:
物--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x10,0x80,0x10,0x80,0x50,0x80,0x51,0xFC,0x7D,0x54,0x52,0x54,0x94,0x94,0x14,0x94,
0x19,0x24,0x32,0x24,0xD4,0x44,0x10,0x84,0x11,0x04,0x12,0x04,0x14,0x28,0x00,0x10,
/*--文字:
品--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x00,0x00,0x0F,0xF0,0x08,0x10,0x08,0x10,0x08,0x10,0x0F,0xF0,0x08,0x10,0x00,0x00,
0x7E,0xFC,0x42,0x84,0x42,0x84,0x42,0x84,0x42,0x84,0x7E,0xFC,0x42,0x84,0x00,0x00,
/*--文字:
以--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x00,0x10,0x24,0x10,0x22,0x10,0x23,0x10,0x22,0x10,0x20,0x10,0x20,0x10,0x21,0x10,
0x22,0x10,0x2C,0x30,0x38,0x30,0x70,0x68,0x20,0xC4,0x01,0x07,0x06,0x02,0x00,0x00,
/*--文字:
免--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x04,0x00,0x04,0x00,0x0F,0xF0,0x10,0x20,0x20,0x40,0x5F,0xF8,0x11,0x08,0x11,0x08,
……………………………………装………………………………………订…………………………………………线………………………………………
0x1F,0xF8,0x12,0x48,0x02,0x40,0x04,0x40,0x04,0x42,0x08,0x42,0x10,0x3E,0x20,0x00,
/*--文字:
丢--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x00,0x10,0x03,0xF8,0x3D,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,
0xFF,0xFE,0x01,0x00,0x03,0x20,0x06,0x10,0x08,0x08,0x1F,0xFC,0x08,0x08,0x00,0x00,
/*--文字:
失--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x01,0x00,0x09,0x00,0x09,0x00,0x11,0x00,0x1F,0xF8,0x21,0x00,0x41,0x00,0x01,0x00,
0x7F,0xFE,0x01,0x00,0x02,0x80,0x02,0x40,0x04,0x20,0x08,0x30,0x10,0x1C,0x20,0x08,
};
unsignedcharcodedy[][32]={