资源描述
课程设计说明书课程设计名称:单片机课程设计课程设计题目:点阵广告牌的设计学 院名称:电气信息学院专业班级:学生学号:学生姓名:学生成绩:指导教师:课程设计时间: 2017.10.30至 2017.11.5格式说明(打印版格式,手写版不做要求)(1)任务书三项的内容用小四号宋体,1.5 倍行距。(2)目录(黑体,四号,居中,中间空四格),内容自动生成,宋体小四号。(3)章的标题用四号黑体加粗(居中排)。(4)章以下的标题用小四号宋体加粗(顶格排)。(5)正文用小四号宋体,1.5 倍行距;段落两端对齐,每个段落首行缩进两个字。(6)图和表中文字用五号宋体,图名和表名分别置于图的下方和表的上方,用五号宋体(居中排)(7)页眉中的文字采用五号宋体,居中排。页眉统一为:武汉工程大学本科课程设计。(8)页码:封面、扉页不占页码;目录采用希腊字母I、II、III排列,正文采用阿拉伯数字1、2、3排列;页码位于页脚,居中位置。(9)标题编号应统一,如:第一章,1, 1.1,;论文中的表、图和公式按章编号,如:表1.1、表1.2;图1.2、图1.2;公式(1.1)、公式(1.2)。课程设计任务书一、课程设计的任务和基本要求(一) 设计任务1. 设计一款能够显示不同字符的LED点阵广告牌;2. 设计不同的字符切换效果(如闪烁,静止,平移等);3. 设计控制按钮,可以在不同的效果间切换;4. 能够显示图形或自定义字符。(二) 基本要求1. 有硬件结构图、电路图及文字说明;2. 有程序设计的分析、思路说明;3. 有程序流程框图、程序代码及注释说明;4. 完成系统调试(硬件系统可以借助实验装置实现,也可在 Proteus 软件中仿真模拟);5. 有程序运行结果的截屏图片。二、进度安排第9周,10.3011.51)10.30题目分析,文献查阅2)10.31方案比较,确定设计方案3)10.3111.1 硬件电路设计4)11.211.4 程序设计,程序调试,系统联调,系统改进5)11.5课程设计说明书撰写三、参考资料或参考文献1. 林立,张俊亮.单片机原理及应用基于Proteus和Keil C M.北京:电子工业出版社,20132. 张毅刚,彭喜元.单片机原理与应用设计M.北京:电子工业出版 社,20083. 马忠梅.单片机的C语言应用程序设计(第5版)M.北京:北京航空 航天大学出版社,20134. 罗中华.LED信息显示屏系统的设计D.南昌大学,2008.24-28.5. 陆彬.21天学通51单片机开发M.北京:电子工业出版 社,2010.21-23,352-362.本科生课程设计成绩评定表姓名II专业班级II学号课程设计题目:课程设计答辩记录:(手写)成绩评定依据:项目得分比例考勤记录设计结果报告撰写答辩成绩备注:成绩评定依据的项目内容和项目分值比例可以由老师按指导的专业进行调整,但成绩评定依据的项 目数不得少于3项。最终评定成绩:指导教师签名:年 月 日目录第一章 设计论证 11.1 主控芯片的选取方案论证 11.2 显示方面的选取方案论证 1第二章硬件设计 22.1硬件结构与工作原理 22.2单元电路设计 32.2.1 单片机最小系统 32.2.2 LED 点阵42.2.3 点阵行扫描电路5第三章软件设计83.1系统软件结构83.2功能子程序设计9第四章 系统调试与分析114.1调试过程与调试结果 114.2调试结果分析13第五章 设计小结14附录15第一章 设计论证1.1主控芯片的选取方案论证方案一:采用可编程逻辑器件(简称为PLD)系统来实现LED点阵内容的显示, 可以充分的利用器件里丰富的I/O 口资源来驱动LED点阵的行和列。但若采用中大规模 的PLD,设计多个接口电路,开发周期长,不易于进一步扩展,同时系统的成本会急剧 上升。方案二(采用):本次设计采用AT89S51单片机系统来实现,51单片机体积小, 可靠性高,适用范围广,使用方式灵活而简单,价格便宜,适用于学生学习。另一方面 51 单片机简单易学,对于数据的处理也速度比较快,因此是很多设计的优先选择。所以 我便买了一个51单片机,它里面点阵是已经和两片74HC595焊接好的,所以为了实物 能达到效果,便以此编写程序。并且使用74HC595芯片可以节省I/O 口达到驱动更加多 的LED,控制灵活方面再加上安装和调试的工作也比较的简单方便,使得本设计和制作 过程的难度得以降低。1.2显示方面的选取方案论证方案一:采用静态方式,这种方式就是直接把所有的发光二极管的一极跟单片机的 I/O 口连接,所有发光二极管的另外一极就通过电阻然后接到电源上。这种方法可以直 接驱动LED,原理也很简单且具有很强的驱动能力,对于LED的点亮方式则可通过限 流电阻来进行调节,十分方便,但这种方法的缺点就是很浪费单片机的I/O 口不能驱动 很多的LED,它适用于那些相对来说比较小的系统。方案二:采用动态扫描的方式,这一种方式也就是先把 LED 并联在一起然后跟驱 动芯片的输出引脚相连接,而LED发光二极管的另外一端就跟单片机的通用I/O 口相连 接,控制选通行所对应列 LED 灯的亮灭。采用这种扫描方案,能够达到驱动比较多的 LED的功能要求,控制起来也很灵活,还有一个优点就是占用较少的单片机的I/O 口。 动态扫描就是一行接一行的去点亮发光二极管,那样仅仅使用一套驱动器就可以驱动很 多行的同名列。根据对方案一和方案二进行比较,经过综合考虑可以发现,动态扫描方式占有较多 的优势。而本设计做的是8x8LED点阵广告牌,若采用静态显示也行,但连线电路复杂, 增加了仿真及实物连接的难度,所以本设计最后选择的方案是方案二。第二章硬件设计2.1硬件结构与工作原理硬件组成及工作原理硬件电路以AT89C51为核心为主控芯片,用单片机最小系统驱动,行列扫描电路 是由两片74HC595芯片及点阵构成,通过程序使字模信号串行输出给两片八位移位寄 存器74HC595,由两片74HC595把接收到的十六位(行+列)字模信号存储然后并行输 出给8x8的LED点阵,由行列信号控制点亮LED。如下图2.1。图2. 1总体框图2.2单元电路设计2.2.1单片机最小系统单片机最小系统是由晶振电路和复位电路两部分组成,其总体电路图如图2.2。39n 114P3QITO:D P3.1jT:D P3 JflNTD P3 SflNTTP3.4/T0P3.5n1 PlEfiV P3.7/RDU1XTAL2RSTncl=P30P2.CUAIP0.7JAD7PSEN ALE 窝图2. 2单片机最小系统30uF*1:2113jFR11 JU:XT*verX1CRYSTALPD WO PQ 1JAD1 PJ2ftD2PD 3JAD3PDPD 5W)5P2,2iA10-P2.4UA12P2.ayw3P2.0KA14.P2.7W5P1.2 P1 3MJMl .5PI 5P1.71)时钟电路系统的时钟电路设计采用内部方式,即利用芯片内部的振荡电路。STC单片机内部 有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是放大器的输 入端和输出端。这个放器与作为反馈元件的片外晶谐振器一起构成一个自激振荡器。外 接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。对外 接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳 定性、起振的快速性和温度的稳定性。因此,此系统电路的晶体振荡器的值为12MHz, 电容值为30pF。2)复位电路复位是对单片机进行初始化操作,即把特殊功能寄存器的数据刷新为默认数据,单 片机在运算过程中如果遇到外界干扰,寄存器中的数据就会发生混乱,以至于程序不能 正常运行,这样就需要单片机复位,以使程序重新开始。复位方式一般分两种:上电自 动复位和按键手动复位,本设计中的复位电路既可实现上电自动复位也可实现手动复 位,其电路的组成是在RST复位输入引脚上接一个电容至VCC端,还有按键,下接一 个电阻到地即可。2.2.2 LED 点阵1) 8X8点阵内部结构8X8点阵是由64个发光二极管组成,每个二极管都是分布在行线与列线的交点上, 其单点工作电压为1.8v,正向电流为8-10mA。如图2.3为行共阳8X8点阵,当某一行线为高电平而某一列线为低电平时,其行列 交叉点就被点亮,而当其某一列线为高电平时,其行列交叉点为暗;当其某一行线为低 电平时,无论列线如何,对应这一行的点全部为暗。行共阳8磁点阵显示器内部鰭构图图2. 3 8*8点阵2) LED驱动显示采用动态扫描方法动态扫描方式是逐行轮流点亮,这样扫描驱动电路就可以实现多行的同名列共用一 套列驱动器。以8X8点阵为例,把所有同一行的发光管的阳极连在一起,把所有同一 列的发光管的列极连在一起(行共阳的接法),先送出对应第1列(也就是八行)发光 管亮灭的数据(即字模信号)并锁存,然后选通第1列使其燃亮一定的时间,然后熄灭; 再送出第2列的数据并锁存,然后选通第2列使其燃亮相同的时间,然后熄灭;.第8 列之后,又重新燃亮第1列,反复轮回。当这样轮回的速度足够快(每秒24次以上), 由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形。该方法能驱动较多的LED,控制方式较灵活,而且节省单片机的资源。LED点阵显示屏广泛应用与汽车报站器,广告屏等。8X8 LED点阵是最基本的点 阵显示模块,理解8X8 LED点阵的工作原理就可以基本掌握LED点阵显示技术。2.2.3点阵行扫描电路1)74HC595芯片功能m叵叵叵叵叵叵5Q2Q3QQ5Qfi6NDGVCCQOE5E汨沁MRO7回0回封亘回F1图2.4 74HC595引脚图管脚说明:表2. 174HC595管脚说明吕教编号管脚名说明15、 1、 2、 3、 4、5、6、7Q0-Q7三态输出管脚8GND接地9Q7串行数据输出10MR (SCLR)移位寄存器清零端11SH_CP (SCK)数据输入(移位)时钟12ST_CP (RCK)输出储存器锁存时钟13OE数据输出使能端/OE,低电平有效14DS串行数据输入端,时钟上升沿数据移入16VDD电源VDD行列扫描电路是由两片74HC595芯片及点阵构成,74HC595是一款具有8位移位 寄存器和一个存储器,三态输出功能的驱动芯片,引脚图如图2.4,管脚功能如表2.1。 移位寄存器和存储器分别具有独立的时钟信号。数据在SHCP的上升沿输入,在STCP 的上升沿进入到存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄 存器早一个脉冲。移位寄存器有一个串行移位输入(DS),和一个串行输出(Q7), 和一个异步的低电平复位(MR),存储寄存器有一个并行8位的,具备三态的总线输 出,当使能OE时(为低电平),存储寄存器的数据输出到总线。3)工作原理PO.O/ADO P01/AD1 P0 2JAD2 PO 3/AD3 P0.4JNJ4 P06/AD5 P0.6/AD6 P07/AD7P2.o/AaF2 1/A9 P2 2TA10 P2 3W11 P2.4/A12 P2.5TA13 P2.&TA14 P2 7W15P3.0/RXDPa.I/TXDP3.2/INTDP3.3/irTTTP3.4fTOP3.5iT1P3.6/WRP3.7/RDii1137i ii1ii1 i321_11工1112E1122113BIIi1Q111 1II121nI11片15iif1I7111U2121 013SH_CPDSMROEU3141211SH_CPDSST_CPMR0E74HC595图2. 5单片机与74HC595接线图如图2.5,每当单片机P3.5输出给U2 (低位74HC595)的数据移位时钟SH_CP(11脚)一个脉冲时,U2便通过串行数据输入端DS(14脚)从单片机的P3.4 口移入一位二进制数,当第九个移位脉冲到来时,U2 (低位片)便将第一个移入的一位二进制数从Q7(9脚)输出经由DS送到U3 (高位片),直到行列信号(一共十六位二进制数) 都送入 U2、U3 之后,单片机 P3.6 口便输出一个脉冲经由输出储存器锁存时钟 ST_CP(12脚)送给U2、U3,然后U2、U3同时锁存并输出(即并行输出)行列各八位电平 信号给8X8点阵,即可点亮点阵,控制行列信号便可以输出想要得到的文字和图形, 代码可以通过字模软件获取,当然也可以自己编写!第三章 软件设计3.1 系统软件结构图 3. 1 主程序流程图如图 3.1 所示,在初始化(即设置 I/O 口,定义变量,赋初值等)后,进入 while 循环判断显示的字符数 k 是否小于 6,如果小于 6 就发送字符的行列选值,用扫描的方 式显示,如果 k 大于 6,就将 k 赋值为零,从 0 到 5 依次滚动显示六个字符即循环。而 开关是用来选定效果的,此次设计有两种效果滚动显示和变换显示,滚动显示就是在扫 描的时候设置偏移量,循环一次后发生偏移,并且同时在偏移后空出的位置扫描下一个 字符,依次类推直到六个字符都显示后循环;开关按下后,每次按下状态取反,切换变 换效果,变换显示就是不设置偏移量,显示第一个字符一段时间后,k+1,选定第二个字符信号,扫描显示,依次循环。3.2功能子程序设计图 3. 2 滚动及变换显示流程图如下面程序当w=1时,即滚动显示,单片机发送字模的代码信号给74HC595,通 过拉高拉低74HC595的输出锁存器时钟ST_CP的电平将信号输出给点阵,从第八列到 第一列依次扫描就显示了一个字符,然后偏移量x加一,从x列(第八列为0)开始显 示第一个字符,同时 8x 列开始显示第二个字符,依次偏移一,就可以产生滚动效果 了;变换显示就是不加偏移量,显示第一个字符一段时间后,k+1,显示第二个字符, 以此类推。当然显示字符时要调用延时程序,这里是直接调用延时函数DelayMS,就不 过多介绍了。核心程序: for(j=0; j8; j+) /循环 8 次发送行和列值if(w=1)Send_Byte(tabelkj); 发送列选值 Send_Byte(ROW(8-x);/发送行选值R_CLK = 1; /拉高输出锁存器,把移位寄存器中数据输出R_CLK = 0; /拉低输出锁存器ROW = _cror_(ROW, 1);/右移,选择下一行elseSend_Byte(tabelkj); 发送列选值Send_Byte(ROW); /发送行选值R_CLK = 1; /拉高输出锁存器,把移位寄存器中数据输出R_CLK = 0; /拉低输出锁存器ROW = _cror_(ROW, 1);/右移,选择下一行if(S0=0)w=w;DelayMS(15);第四章系统调试与分析4.1调试过程与调试结果1)以下图4.1是程序最后的调试结果,从起初的断续显示,切换不流畅,在室友的帮助F不断修改添加,到最后流畅切换,正常显示效果,基本达到设计要求。图4. 1程序调试图2)以下图4.2是proteus最后的仿真效果图,由程序编译生成hex文件,在proteus仿真 中单片机加载hex文件,运行仿真。基本达到程序设定的效果。VIChfgTftLU2CCONDJ I0PODWCflFfl UftDTPOZDZRO.itADiR0.5jGM5RSTFt.讥PJOM吩刚P2JW10F9ENP2 3ft11ALEP2.4i1 2EAP2.5ft1 3P2.i6ft14P2.7ftl5P1 JOrJ 口址Pl 1P3 I ffKDF12尸3 ZflvTOPl 1U1NT1P14pi ePJJEhWPl T7iFDAFFC51 fl St PH烷H CPQD训Q2沖T_芋3Q*&56MRQ7QTTikC-SiKvrc-RND一1僵1 JB图4. 2仿真调试图3)实物效果图图4. 3实物图4.2调试结果分析调试主要就是硬件调试和软件调试。在硬件调试的过程应该分模块,逐个进行调试, 而且要在保证软件正确的情况下去对硬件进行测试,这样就才容易找到错误的所在。对 于软件的调试主要是把用C语言编写好的程序复制到Keil uVision3软件进行编译,不断 的修改错误的地方直到编译成功,以及proteus的画图仿真。我们常用的编程语言就是C 语言汇编和汇编语言,在编写的时候需要有先验的知识主体,了解单片机的概念。硬件 的调试主要分为LED点阵显示屏的调试和单片机最小系统的调试。第五章 设计小结在设计制作本系统的过程中,我深切的体会到了实践能力的重要性,只有理论基础 是不能做好一个完美的设计的。本系统的研制主要应用到了 LED 点阵汉字显示原理、 单片机控制技术、LED点阵驱动芯片等多方面的知识,本系统达预期的要求,操作方便、 价格便宜、广告牌的各点亮度均匀、充足,可以显示文字内容,显示的文字稳定、清晰 无串扰。在调试方面,经过多次对任意的测试操作,稳定的性能得到了认可。同时此系 统通过软件设计,实现了内容显示的多样化,大大提高了广告牌的吸引力。在完成本设 计之前,要看很多的书籍,了解所用到的芯片,它们工作的原理,没有知识的来源就没 有操作的进行。于是我学会了利用网上和图书馆丰富的资源,在发现问题的时候通过查 阅资料来解决问题。在本次设计中我也发现了自己还有很多不足的地方,还需要不断的 去加强自己的动手能力,知识面也有很狭窄还需要通过不断的阅读来提高自己的能力。从硬件电路的设计和制作到软件的设计,这过程中有遇到不少的问题,但凡是生生 相克,有问题出现就有解决问题的方法。了解了 LED 的显示原理,了解了驱动芯片的 作用,进而进行软件方面的设计。为了实现LED点阵显示内容的效果,就需要对C语 言的掌握。学会合理利用图书馆的资源,增加自己的知识,提高自己的实践能力。在本 设计的整个过程中,我可以发现我有很多的不足,对专业理论知识的掌握过少,动手能 力也有所欠缺。但本设计让我学到的东西是很多的,首先我加深了对本专业知识的理解, 学会了不懂就要问,遇到问题不要抱怨,更不能放弃,只要想学就一定能学会,我相信 我会不断的超越自己,努力的做得更好。附录:完整程序:/*8X8点阵屏循环显示“l”“J”“Y”“1”“2”“特殊符号*/#include #include /循环右移头文件sbit SO = P3A0;按键接口sbit DIO =卩3人4;串行数据口sbit S_CLK = P3A5;/移位寄存器时钟sbit R_CLK = P3A6;/输出锁存器时钟/*点阵字形码*/unsigned char code tabel68= OxFF,Ox7F,Ox7F,Ox7F,Ox7F,Ox7F,OxO,OxFF,/LOxFF,OxFE,OxFE,Ox8O,Ox7E,Ox7E,Ox9F,OxFF,/JOxFE,OxFD,OxFB,Ox7,OxFB,OxFD,OxFE,OxFF,/Y Ox7F,Ox7F,Ox7F,OxO,Ox7D,Ox7B,Ox7F,OxFF,/1OxFF,Ox7F,Ox79,Ox76,Ox6E,Ox5E,Ox39,Ox7F,/20xFF,0xE7,0x14,0xC0,0x14,0xE7,0xFF,0xFF,/符 号;/*595 发送一字节*/void Send_Byte(unsigned char dat)unsigned char i; /循环次数变量S_CLK = 0;/拉低移位寄存器时钟R_CLK = 0;/拉低输出锁存器时钟for(i=0; i= 1;/数据右移S_CLK = 1;/拉高移位寄存器时钟,数据移位S_CLK = 0;/拉低移位寄存器时钟void DelayMS(unsigned int x) 延时unsigned char i;while(x-)for(i=0;i120;i+);void main()unsigned char j, k, l, x, ROW,w;j发送8列和8行字形码,k低字符数量,1高字符数量,x扫描偏移量,ROW行 值 ,w 标志位unsigned int z; /动态扫描延时变量w=0x1;whi1e(1)for(k=0; k6; k+)/k 需要显示的字符数量1=k+1;if(1=6)1=0;x=0;for(z=0; z1000; z+)/z 刷新次数ROW = 0x80;/行选初值 if(x=9)x=0; if(z%125=0)x+;for(j=0; j8; j+) /循环8次发送行和列值if(w=1)Send_Byte(tabelkj); 发送列选值 Send_Byte(ROW(8-x);/发送行选值R_CLK = 1; /拉高输出锁存器,把移位寄存器中数据输出R_CLK = 0; /拉低输出锁存器ROW = _cror_(ROW, 1);/右移,选择下一行elseSend_Byte(tabelkj); 发送列选值Send_Byte(ROW); /发送行选值R_CLK = 1; /拉高输出锁存器,把移位寄存器中数据输出R_CLK = 0; /拉低输出锁存器ROW = _cror_(ROW, 1);/右移,选择下一行if(S0=0)w=w;DelayMS(15);
展开阅读全文