单片机课程设计报告——16x16LED滚动显示_第1页
单片机课程设计报告——16x16LED滚动显示_第2页
单片机课程设计报告——16x16LED滚动显示_第3页
单片机课程设计报告——16x16LED滚动显示_第4页
单片机课程设计报告——16x16LED滚动显示_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上 16x16LED滚动显示课程设计: 单片机课程设计 专业名称: 电气工程及其自动化 学 号: 学生姓名: 同组人员: 指导教师: 2014年12月8日课程设计任务书 2014 2015 学年第1学期学生姓名: 专业班级: 电气工程及其自动化2012级(2)班 指导教师: 工作部门: 一、课程设计题目: 16x16LED滚动显示 1. 电机控制6. 篮球比赛计分器2. 简易电子琴设计7. 密码锁控制3. 公交车报站器设计8. 交通信号灯控制4. 键盘花样彩灯控制9. 温度控制系统5. 数码显示抢答器控制10.自选二、课程设计内容 1. 根据具体设计课题的技术指标和给定

2、条件,以单片机为核心器件,能独立而正确地进行方案论证和电路设计,完成仿真操作。要求概念清楚、方案合理、方法正确、步骤完整; 2. 熟悉、掌握各种外围接口电路芯片的工作原理和控制方法; 3. 熟练使用单片机汇编语言或C51进行软件设计; 4. 熟练使用Proteus、Keil软件进行仿真电路测试; 5. 熟练使用Protel软件设计印刷电路板; 6. 学会查阅有关参考资料和手册,并能正确选择有关元器件和参数; 7. 编写设计报告,参考毕业设计论文格式。(1)根据课题要求确定系统设计方案;(2)绘制系统框图、系统仿真原理图(印刷电路板图),列出元器件明细表;(3)计算电路参数和选择元器件,画出软件

3、框图,列出程序清单;(4)打印仿真结果,根据测试结果进行误差分析与修改调整; (5)对设计进行全面总结。三、进度安排1时间安排序 号内 容学时安排(天)1方案论证和总体设计12硬件设计测试13软件设计14仿真测试及PCB设计15答辩1合 计5设计指导地点:K2-407单片机、微机原理实验室2执行要求单片机应用课程设计共9个选题,学生可自选课题。每组不超过2人,为避免雷同,在设计中每个同学所采用的方案不可一样。四、课程设计考核办法与成绩评定根据过程、报告、答辩等确定设计成绩,成绩分优、良、中、及格、不及格五等。评定项目基本内涵分值设计过程考勤10分答 辩回答问题情况20分实物或仿真测试正常无故障

4、运行20分设计报告完成设计任务、报告规范性等情况50分90100分:优;8089分:良;7079分:中;6069分,及格;60分以下:不及格六、课程设计参考资料1贺哲荣.AT89S51单片机硬件设计与编程实例.北京:中国电力出版社.2012 2李泉溪.单片机原理与应用实例仿真.北京:北京航空航天大学出版社,2012.3王平.单片机应用设计与制作.北京:清华大学出版社, 2012.4彭为等.单片机典型系统设计实例精讲. 北京:电子工业出版社,20075王庆利等.单片机设计案例实践教程.北京:北京邮电大学出版社,20086韩志军等.单片机应用系统设计入门向导与设计实例.北京:机械工业出版社,200

5、57皮大能等. 单片机课程设计指导书. 北京:北京理工大学出版社,2010指导教师: 2014年12月8日 教研室主任: 2014年12 月8 日目录 三 6六 心得体会.17七 参考文献.181摘 要 本设计使用AT89C55系列高速单片机作为主控制模块,利用简单 的外围电路来驱动16×16的点阵LED显示屏。利用AT89C55系列高速单片机本身强大的功能,可以很方便的实现单片机与PC机间的数据传输及存储,并能利用软件方便的进行显示内容的多样变化,另一方面点阵显示屏广泛的应用于医院、机场、银行等公共场所,所以本设计具有很强的现实应用性。 本LED显示屏能够以动态扫描的方式同时显示4

6、个8×8点阵汉字,并能通过上位机软件修改显示内容和显示效果等等。把字符内码存储在空闲的单片机程序存储器空间,使本LED显示系统能掉电存储1024个字符。设计中采用了SPI接口的GB2312标准字库,支持所有的国标字符和ASCII标准字符的显示。因为采用串行传输方式,使本系统的可扩展性得到提升,便于多个显示单元的级联。 本文从LED的显示原理入手,详细阐述了LED动态显示的过程,以及硬件电路的设计、计算和软件的算法。关键词:LED动态显示 AT89C55 点阵汉字显示 仿真2引 言 LED显示屏是一种通过控制半导体发光二极管的显示方式,用来显示文字、图形、图像、动画、行情、视频、录像信

7、号等各种信息的显示屏幕。图文显示屏可与计算机同步显示汉字、英文文本和图形;视频显示屏采用微型计算机进行控制,图文、图像并茂,以实时、同步、清晰的信息传播方式播放各种信息,还可显示二维、三维动画、录像、电视、VCD节目以及现场实况。LED显示屏显示画面色彩鲜艳,立体感强,静如油画,动如电影,广泛应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管理和其它公共场所。  它的优点:亮度高、工作电压低、功耗小、微型化、易与集成电路匹配、驱动简单、寿命长、耐冲击、性能稳定。当今社会在飞速发展无疑能源、健康、空间的利用,成了人们着重关注的对象。而在这个信息传递极

8、速的社会,LED的出现给人们带来了希望之光。LED的特色之处一是节能(直接功耗,间接耗能),二是基本无电离辐射,三提高空间利用率。而这些特色又恰好解决了上述的三种问题。然而LED点阵显示屏的特点不仅仅于此LED点阵显示屏用的是数码管,而数码管具有实用,便宜等优点。做出来的LED点阵显示很耐用。LED点阵显示屏之所以受到广泛重视而得到迅速发展,是与LED显示屏本身所具有的优点分不开的。LED点阵显示屏的发展前景极为广阔,目前正朝着更高亮度、更高耐气候性、更高的发光密度、更高的发光均匀性,可靠性、全色化方向发展。本文要求设计一个能显示16X16点阵图文LED显示屏,要求能显示图文或文字,显示图文或

9、文字应稳定、清晰,图文或文字显示,以卷帘形式向上下左右滚动显示。  3一 16×16LED点阵的总体设计1.1 设计的功能要求 设计一个能显示16X16点阵图文LED显示屏,要求能显示图文或文字,显示图文或文字应稳定、清晰,图文或文字显示,以卷帘形式向上滚动显示。1.2 设计论证 1.图文显示采用动态扫描的显示方法,逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套驱动器。具体就1616的点阵来说,把所有同1行的发光管的阳极连在一起,把所有同1列的发光管的阴极连在一起(共阳极的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第1行使其燃亮一定

10、时间,然后熄灭;再送出第二行的数据并锁存,然后选通第2行使其燃亮相同的时间,然后熄灭;以此类推,第16行之后,又重新燃亮第1行,反复轮回。当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能够看到显示屏上稳定的图形了。  2.采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。但是,在行扫描周期确定的情况下留给行显示的时间就太少了,以致影响到LED的亮度。  解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。即在显示本行各列数据的同时,传送下一列数据。为了达到重叠处理的目的,列

11、数据的显示就需要具有所存功能。经过上述分析,就可以归纳出列驱动器电路应具有的功能。对于列数据准备来说,它应能实现串入并处的移位功能;对于列数据显示来说,应具有并行锁存的功能。这样,本行已准备好的数据打入 并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。1.3 实验原理 16×16扫描LED点阵的工作原理同8位扫描数码管类似。它有16个共阴极4输出端口,每个共阴极对应有16个LED显示灯。所以其扫描译码地址需4位信号线。要使16点阵上某个点亮,如第10行第4列的LED点亮,只要让列选信号为“0100”,从而选中第4列,再给第10行一个高电平,即可点亮

12、该LED。本实验通过74LS164和74LS595芯片写入字形,产生扫描信号。为了显示整个汉字,首先分布好汉字的排列,以行给汉字信息;然后以大于24HZ的频率扫描列,即每行逐一加高电平,根据人眼的视觉残留特性,使之形成整个汉字的显示。1.4 总体设计框图 二 硬件设计2.1主要芯片介绍1.AT89C55介绍AT89C55为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整5控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信

13、等。主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。P0P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(3239 脚)被定义为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚定义为IR输入端,10 脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12 脚、27 脚及28 脚定义为握手信号功能端口,连接主板CPU 的

14、相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。 图2.1 AT89C55单片机引脚图2. 74LS595介绍74595的数据端: Q1-Q7:八位并行输出端,可以直接控制数码管的8个段。 Q7':级联输出端。我将它接下一个595的SI端。 6DS:串行数据输入端。STcp:存储寄存器的时钟脉冲输入口SHcp:移位寄存器的时钟脉冲输入口OE:的非输出使能端MR:的非芯片复位端 图2.2 74LS595芯片引脚图3.74LS164介绍 清除端(CLEAR)为低电平时,输出端(QAQH)均为低电平。 串行数据输入端(A,B)可控制数据。当

15、 A、B任意一个为 低电平,则禁止新数据输入,在时钟端(CLOCK)脉冲上升沿作用下Q0 为低电平。当A、B 有一个为高电平,则另一个就允许输入数据,并在CLOCK 上升沿作用下决定Q0 的状态。  引脚功能: LOCK :时钟输入端LEAR: 同步清除输入端(低电平有效) 1,2 :串行数据输入端 8Q15: 输出端 7图2.3 74LS164芯片引脚图2.2 16×16LED点阵显示制作以UCDOS中文宋体字库为例,每一个字由16行

16、16列的点阵组成显示。即国家标准汉字库中的每一个字均由256点阵来表示。我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。事实上这个汉字屏不仅可以显示汉字,也可以显示在256像素范围内的任何图形。这里我们以“魏”字说明,如下图所示:图2.4为字模提取软件提取16x16LED汉字显示代码 82.3 用4个8×8LED点阵构成16×16LED点阵 Proteus中只有5×7和8×8等LED点阵,并没有16×16LED点阵,而在实际应用中,要良好地显示一个汉字,则至少需要16×16点阵。下面我们就首先介绍使用8×

17、8点阵构建16×16点阵的方法,并构建一块16×16LED点阵,用于本例的显示任务。 从Proteus的元件库中找到“MATRIX-8X8-RED”元器件,并将四块该元器件放入Proteus文档区编辑窗口中。此时需要注意,如果该元器件保持初始的位置(没有转动方向),我们要首先将其左转90°,使其水平放置,那么此时它的左面8个引脚是其行线,右边8个引脚是其列线(当然,如果你是将右转,则右边8个引脚是行线)。然后我们将四个元器件对应的行线和列线分别进行连接,使每一条行线引脚接一行16个LED,列线也相同。并注意要将行线和列线引出一定长度的引脚,以便下面我们使用。连接好

18、的16×16点阵如下图。图2.5 16×16点阵图 2.4 实验电路及连线电路主要由单片机和一些外部设备连接而成,利用4个8*8LED显示组装成16*16LED显示,2个74LS595和2个74LS164组成。该显示器采用AT89C55单片机作为控制器,12MHz晶振,其中P0口作为字符数据输出口,P2口作为显示器扫描输出口,第31管脚(EA)接电源。电路包括单片机、电源电路、时钟电路、复位电路、驱动电路和LED点阵电路等。本设计的核心是利用单片机读取显示字9型码,通过驱动电路对16×16LED点阵进行动态扫描,以实现汉字的滚动显示。图2.6 总电路接线图三 软件

19、设计3.1实验要求及程序流程图 本软件要求实现如下要求:汉字要稳定、明亮并且文字要以一定速度上升滚动显示。显示屏软件模块:初始化程序、主程序、多字滚动、显示程序、扫描程序。显示程序的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。软件设计中,显示屏的软件系统分为两层;第一层是底层的显示驱动程序,第二层是上层的系统应用程序。显示驱动程序负责向屏体送显示数据,10并负责产生行扫描信号和其他控制信号,配合完成LED显示屏的扫描显示工作。显示驱动器程序由定时器T0中断程序实现。系统应用程序完成系统环境设置(初始化)、显示效果处理等工作,由主程序来实现。 显示驱动程序在进入中断

20、后首先要对定时器T0重新赋初值,以保证显示屏刷新率的稳定,1/16扫描显示屏的刷新率(帧频)计算公式如下: 刷频率(帧频)=1/16×T0溢=1/16×f/12(65536-t)其中f位晶振频率,t为定时器T0初值(工作在16位定时器模式)。 然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显示。图3.1系统主程序流程图113.2 程序清单#include <reg51.h>#i

21、nclude <intrins.h>#define DATAOUT P2 /P2 use as data#define SPEED 13void ymove(char dir,unsigned char *ptr,char speed);void xmove(char dir,unsigned char *ptr,char n,char speed);void delay(unsigned int a);void display();void displaytime(char time);void init164();sbit ADATA= DATAOUT0;sbit ASCK=

22、DATAOUT1;sbit LATCH= DATAOUT2;sbit BDATA= DATAOUT3;sbit BCLK= DATAOUT4;code unsigned char xin32=0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x38, /心 0x1F,0x7C,0x3F,0xFE,0x3F,0xFE,0x3F,0xFE, 0x1F,0xFC,0x0F,0xF8,0x07,0xF0,0x03,0xE0, 0x01,0xC0,0x00,0x80,0x00,0x00,0x00,0x00;code unsigned char zhong32= 0x01,0x00,

23、0x01,0x00,0x01,0x04,0x7F,0xFE, /中 0x41,0x04,0x41,0x04,0x41,0x04,0x41,0x04, 0x7F,0xFC,0x41,0x04,0x01,0x00,0x01,0x00, 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00;code unsigned char guo32=0x00,0x04,0x7F,0xFE,0x40,0x24,0x5F,0xF4, /国 0x41,0x04,0x41,0x04,0x41,0x44,0x4F,0xE4, 0x41,0x04,0x41,0x44,0x41,0x24,0x41

24、,0x04, 0x5F,0xF4,0x40,0x04,0x7F,0xFC,0x40,0x04;code unsigned char dui32= 0x7C,0x40,0x44,0x40,0x48,0x40,0x48,0x40, /队 0x50,0x40,0x48,0x40,0x48,0x40,0x44,0xA0, 0x44,0xA0,0x44,0xA0,0x69,0x10,0x51,0x10, 0x42,0x08,0x44,0x06,0x48,0x04,0x00,0x00;code unsigned char jia32= 0x10,0x00,0x10,0x00,0x10,0x04,0x12,

25、0x7E, /加 0xFF,0x44,0x12,0x44,0x12,0x44,0x12,0x44, 0x12,0x44,0x22,0x44,0x22,0x44,0x22,0x44, 0x22,0x44,0x4A,0x7C,0x84,0x44,0x00,0x00;code unsigned char you32= 120x00,0x40,0x40,0x40,0x30,0x40,0x10,0x44, /油 0x87,0xFE,0x64,0x44,0x24,0x44,0x0C,0x44, 0x14,0x44,0x27,0xFC,0xE4,0x44,0x24,0x44, 0x24,0x44,0x24,

26、0x44,0x27,0xFC,0x24,0x04 ;code unsigned char gth32=0x00,0x00,0x01,0x80,0x03,0xC0,0x03,0xC0, /! 0x03,0xC0,0x03,0xC0,0x03,0xC0,0x01,0x80, 0x01,0x80,0x01,0x80,0x00,0x00,0x01,0x80, 0x03,0xC0,0x01,0x80,0x00,0x00,0x00,0x00;unsigned char idata buffer32;void main(void)unsigned char i;init164();while(1)for(i

27、=0;i<32;i+)bufferi=xini;displaytime(1);xmove(1,zhong,3,SPEED);displaytime(1);ymove(1,0,SPEED);ymove(1,jia,SPEED);ymove(1,you,SPEED);ymove(1,0,SPEED);xmove(0,jia,3,SPEED);ymove(0,gth,SPEED);ymove(0,0,SPEED);xmove(1,xin,1,SPEED); /* 子函数 */void delay(unsigned int a) while(a-); void display() unsigne

28、d char hang,ib,k,tmp; DATAOUT= 0x0;BDATA = 0;for(hang=0;hang<16;hang+)ASCK =0;LATCH=0; BCLK =0;for(ib=0;ib<2;ib+) tmp = bufferhang*2+ib;13for(k=0;k<8;k+) tmp <<=1;ASCK =0; ADATA =CY;ASCK =1; DATAOUT|=0x14;/LATCH=1;/BCLK=1;BDATA=1; delay(64);ASCK =0;ASCK =1; void displaytime(char time)

29、 unsigned char i;while(time-) i=130;while(i-) display(); void init164() char i;BDATA=1;for(i=0;i<16;i+) BCLK =0;BCLK =1; void xmove(char dir,unsigned char *ptr,char n,char speed) /*方向 n是要移动的汉字个数 移动速度*/ unsigned char i=0, ib=0;unsigned int tmp=0, speedm=0;unsigned char buffer216; /半个汉字的缓存 n*=2; /左

30、半字和右半字,所以要x2 for(i=0;i<16;i+) /清零buffer2i=0;if(dir = 1) /* 向左移动 */for(n;n>0;n-) if(ptr != 0) tmp = n%2;/判断是左半字还是右半字for(i=0;i<16;i+)buffer2i=ptri*2+tmp; if(tmp)/tmp为1时,将地址指向下一个汉字ptr+=32; for(tmp=8;tmp>0;tmp-) /要移动8列ib=0;14 for(i=0;i<16;i+) /要移16行,共16个字节 bufferib <<=1; /移第一个半字 if(

31、bufferib+1 & 0x80)bufferib+;ib+;bufferib<<=1; /移后半字if(buffer2i & 0x80) bufferib+;ib+;buffer2i<<=1;/缓冲左半字向左移一位speedm=speed;/更新点阵while(speedm-)display(); /-/else /* 向右移动 */for(n;n>0;n-)if(ptr != 0) tmp = (n+1) % 2 ;/判断左半字还是右半字for(i=0;i<16;i+)buffer2i=ptri*2+tmp;if(tmp = 0)/tm

32、p为0时,将地址指向下一个汉字ptr+=32; for(tmp=8;tmp>0;tmp-) /要移动8列ib=0;for(i=0;i<16;i+) /要移16行,共16个字节 bufferib+1 >>= 1; /移右半字if(bufferib & 0x01)bufferib+1 |=0x80 ;bufferib >>= 1; /移左半字if(buffer2i & 0x01) bufferib |= 0x80;ib+=2;buffer2i >>=1;/下个汉字的右半字向右移一位speedm=speed;while(speedm-)

33、 /更新点阵display(); 15 void ymove(char dir,unsigned char *ptr, char speed) /dir=1上移动,dir=0为下移动char i=0, j=0, ib=0;unsigned int tmp=0, speedm=0;if(dir=0) /* 向下移 */ib=31; for(i=16;i>0;i-) /下移16行for(j=29;j>-1;j-)bufferj+2=bufferj;/将上一行的内容复制到下一行if(ptr=0)/移空时,buffer的首行用0移入buffer0=0;buffer1=0;else/否则,处

34、理buffer的首行元素 buffer1=ptrib;buffer0=ptrib-1;ib=ib-2speedm=speed;while(speedm-) /更新点阵display(); /* 向上移 */elseib=0; /数组元素序号for(i=0;i<16;i+) /上移16行for(j=0;j<30;j+) /将下一行的内容复制到上一行 bufferj=bufferj+2;if(ptr=0) /移入为空,buffer的末行用0移入buffer30=0;buffer31=0; else/否则,处理buffer的末行元素buffer30=ptrib;buffer31=ptri

35、b+1;ib=ib+2; speedm=speed;/更新点阵while(speedm-)display(); 16四 实验结果 五 系统调试 软件调试:软件为网络所提供,其原理在上一模块已作说明,在这里再作说明,软件经调试无误,直接将其下再到单片机中,看是否达到所要的效果软件部17分是先参考书上的例子,然后自己根据硬件电路写程序,由于以前所学是单片机汇编语言,所以这个系统在编写程序过程中都采用汇编语言编写。刚刚开始,编写不会一次性通过,经过仔细分析修改最后编译成功。但是,在实际写如C52中,LED显示屏出现各种各样的乱码,通过再次认真仔细分析多次修改程序后,程序能够正常运行。u 硬件调试:在对各个硬件模块进行调试时,要保证软件正确情况下去测试软 件,要不然会发生错误,硬件仿真前要认真检验点阵及线路的好坏,检查无误后才下载主程序。六 心得体会 本文设计的1616的点阵

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论