《片单机原理及应用课程设计led点阵显示屏--大学毕设论文.doc》由会员分享,可在线阅读,更多相关《片单机原理及应用课程设计led点阵显示屏--大学毕设论文.doc(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、单片机原理及应用课程设计指导书使用班级:电子专业指导教师: 编制教师: 长春工程学院电气与信息学院电子信息教研室2014年2月目 录一、课程设计目的1二、课程设计任务及内容1三、课程设计结果要求5四、课程设计具体时间安排及成绩考核5五、参考文献6附件1:实习(设计)报告书写格式及要求7附件2:论文书写范例:9附录3:参考文献书写方法12I一、课程设计目的单片机原理及应用课程设计是配合“单片机原理及应用”课程和实验教学的一个重要环节,它能起到巩固所学知识、加强综合能力、提高软、硬件设计调试方面的能力、启发创新思想的效果。同时,帮助学生将相关专业课程综合起来,融会贯通,形成系统的概念,迅速迈过从理
2、论到实际的门槛。本课程设计的目的是培训学生的综合设计能力、电子线路的组装调试能力和创新能力,通过查阅资料、选定方案、设计电路、安装调试、写报告等过程,使学生得到一次科学研究工作的启蒙训练。二、课程设计任务及内容1、资料查阅1)查阅与本人设计相关的文章、方案,列举3种以上设计方案;2)对以上设计方案进行分析、比较,选择本次设计所使用的设计方案;3)把以上设计方案及分析、比较过程以文字方式体现在设计报告中的方案选择中。2、设计题目(5)题目:LED点阵显示屏要求:1)设计由(48)个8*8LED点阵组成的显示屏系统;2)能够显示英文、汉字以及部分特殊图形;3)可以设置多种(不少于3种)的切换显示方
3、式;4)采用双色多三色LED点阵显示简单彩色图样*;5)显示简单动态图像或曲线等*。3、电路设计用Protel绘制电路原理图,并绘制PCB板图。要求原理图完整,清晰,参数准确。PCB板图布局合理、美观,走线清晰明了,制版尺寸小。4、仿真实现用Proteus软件对所设计内容进行仿真实验或使用硬件搭建,实现题目要求的内容。5、撰写论文按照所阅读的标准期刊文献文章格式撰写一篇所设计的单片机系统进行综合描述。要求有:摘要:对全篇文章进行简单扼要的介绍;引言:对所设计的题目背景进行简介;正文论述:各部分详细的设计方案分析及选择,软硬件设计、理论计算;Protus仿真过程及结果截图;原理图、PCB图等各种
4、图表;并以附录的形式提供单片机程序及程序框图。从硬件(各部分原理、整体系统组成原理)和软件(编程思想、流程图)等方面对系统进行全面的论述。结论:总结所设计的题目的实现情况及展望。三、课程设计成果要求1、开题报告主要内容:进行题目可行性论证,对设计方案进行选择,给出选择依据;2、电路图绘制主要内容:针对所设计题目绘制原理图、PCB图。原理图要求器件摆放合理、轴线清晰明了;PCB图要求布线合理、美观,制版尽可能小。3、软件系统仿真主要内容:使用Protus软件对所设计题目进行软件仿真或使用硬件搭建,验证系统的可行性并保留结果(答辩时需演示)。4、课程设计论文主要内容:撰写课程设计论文(论文详细要求
5、参见附件)。一组一份设计论文。分组建议:3人。四、课程设计具体时间安排及成绩考核1、时间安排:单元内 容时间1公布题目,布置任务,学生独立选题。1天2进行题目分析和系统分解,确定设计方案。1天3绘制Protel原理图和PCB图2天3绘制Proteus原理图或搭建硬件电路2天4编制程序,进行程序调试和系统功能测试3天5组织进行课程设计答辩,了解学生设计水平,是否独立完成及全面表现并由教师给出评语和成绩1天合计10天2、成绩考核:按平时表现、出勤情况、设计完成情况、报告的完整性和规范性以及答辩情况给出实习的综合成绩(五级分制)。给分比例如下:(1)平时表现、出勤情况(20%)(2)Protel电路
6、原理图及PCB板图(15%);(3)Proteus设计演示(15%);(4)设计论文(25%);(5)答辩(25%)。五、参考书1. 谷树忠等编著:Altium Designer 教程原理图、PCB设计与仿真 电子工业出版社,2011.11;2. 李晓林等编著:单片机原理与接口技术(第2版) 电子工业出版社,2011.2;3胡启明等编著:Proteus 从入门到精通100例电子工业出版社,2012.9;4. 刘波主编:51单片机应用开发典型范例基于Proteus仿真 电子工业出版社,2014.1 CHANGCHUN INSTITUTE OF TECHNOLOGY单片机原理及应用课程设计(英文标
7、题:Times New Roman 英文字体,3号,居中)设计题目: LED点阵显示屏 学生姓名: L 学院名称: 电气与信息工程学院 专业名称: 电子信息工程 班级名称: 电子 1241 学 号: L 完成时间: L 2015年 月 日任务分配表班级学号姓名完成主要任务电子124110赵玉莹Protel原理图及pcb板绘制整理实验报告电子124113崔贺Proteus图绘制电子124136王文立编程LED点阵显示屏赵玉莹1,崔贺1,王文立1(电子1241 10号,13号,36号)摘 要: 本设计基于单片机技术原理,以芯片AT89C51作为核心控制器,通过硬件电路的制作及软件程序的编制,设计制
8、作了一种4个8*8LED点阵组成的显示屏系统。实现LED的动态显,所谓动态显示就是一位一位的轮流点亮LED,在每一时刻只有一位显示器在工作(点亮),但由于人眼的视觉暂留效应和发光二极管熄灭时的余辉,将出现多个字符“同时”显示的现象。即在每一瞬间,所有LED 会显示相同的字,并实现文字、英文、图形的显示,以及图形的上移、左移、右移的移动效果并显示简单动态图像或曲线。关键词:AT89C51单片机,LED,显示0 引言(简介所设计的题目内容及设计的意义) LED 电子显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统,本设计实现了LED的动态、静态显,所谓动态显示就是一位一位的轮流
9、点亮LED,在每一时刻只有一位显示器在工作(点亮),但由于人眼的视觉暂留效应和发光二极管熄灭时的余辉,将出现多个字符“同时”显示的现象。即在每一瞬间,所有LED 会显示相同的字,并实现文字、英文、图形的显示,以及图形的上移、左移、右移的移动效果。基于LED的字符动态显示系统具有设计简单、显示方式和显示信息可控、扩容灵活和成本低等特点,非常适合一些汉字信息动态显示场合。 1 系统方案(包括方案论证,选择的过程和依据,用系统框图论述)建立以AT89C51 单片机为核心的控制器,采用串行传输、动态扫描技术,设计出拥有多功能的模块化16* 16 LED 点阵动态显示系统。通过仿真验证,该方法正确可行,
10、能有效缩短系统的开发周期、提高效率、节约成本1 LED 点阵动态显示系统原理2 系统硬件电路(包括硬件系统原理框图、各部分电路图及其工作原理简介)简介: 用到的器件有:AT89C51,74LS164,74LS595,MATRIX-8*8-GREEN.从理论上说,不论显示图形还是文字,只要控制与组成这些图形或文字的各个点所在位置相对应的LED器件发光,就可以得到我们想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。1616的点阵共有256个发光二极管,显然单片机没有这么多端口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,1 616的点阵需要256/8=32个锁存器。这
11、个数字很庞大,因为我们仅仅是1 616的点阵,在实际应用中的显示屏往往要大得多,这样在锁存器上花的成本将是一个很庞大的数字。因此在实际应用中的显示屏都不采用这种设计,而采用另一种称为动态扫描的显示方法。 动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套列驱动器。具体就1 616的点阵来说,把所有同l行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第1行发光管亮灭的数据并锁存,然后选通第l行使其燃亮一定的时间,然后熄灭;再送出第2行的数据并镇存,然后选通第2行使其燃亮相同的时间,然后熄灭;-第16行之后,又
12、重新燃亮第1行,腹轮回。当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形了。采用扫描方式进行显示时,每行有一个行驱动器,各行的同名列共用一个列驱动器。显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。从控制电路到列驱动器的数据传输可以采用并行方式或串行方式。显然,采用并行方式时,从控制电路到列驱动器的线路数量大,相应的硬件数目多。当列数很多时,并行传输的方案是不可取的。采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬
13、件方面无疑是十分经济的。但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都已传输到位之后,这一行的各列才能并行地进行显示。这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两个部分。对于串行传输方式来说,列数据准备时间可能相当长在行扫描周期确定的情况下,留给行显示的时间就太少了,以致影响到LED的亮度。解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。即在显示本行各列数据的同时,传送下一行的列数据。为了达到重叠处理的目的,列数据的显示就需要具有锁存功能。经过上述分析,可以归纳出列驱动器电路应具备的主要功能。对于列数据准备
14、来说,它应能实现串人并出的移位功能;对于列数据显示来说,应具有并行锁存的功能。这样,本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。图1为显示屏电路实现的结构框图。图1 显示屏电路框图硬件电路大致上可以分成单片机系统及外围电路、列驱动电路和行驱动电路三部分1.单片机系统及外围电路单片机采用89C51或其兼容系列的芯片,采用24MHz或更高频率的晶振,以获得较高的刷新频率,使显示更稳定。单片机的串口与列驱动器相连,用来送显示数据。P1口低4位与行驱动器相连,送出行选信号;P1.5P1.7口则用来发送控制信号。PO和P2 口空着,在有必要时
15、可以扩展系统的ROM和RAM。1616点阵显示屏的硬件原理图如图2所示。 图2 1616点阵显示屏的硬件原理图2.列驱动电路列驱动电路由集成电路74LS595构成。它具有一个8位串人并出的移位寄存器和一个8位输出锁存器的结构,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本行各列数据的同时,传送下一行的列数据,即达到重叠处理的目的。74LS595的外形及内部结构如图3所示。它的输入侧有8个串行移位寄存器,每个移位寄存器的输出都连接一个输出锁存器。引脚SI是串行数据的输入端。引脚SCK是移位寄存器的移位时钟脉冲,在其上升沿发生移位,并将SI的下一个数据打人最低位。移位后的各位信号出
16、现在各移位寄存器的输出端,也就是输出锁存器的输入端。RCK是输出锁存器的打人信号,其上升沿将移位寄存器的输出打人到输出锁存器。引脚G是输出三态门的开放信号,只有当其为低时锁存器的输出才开放,否则为高阻态。SCLR信号是移位寄存器的靖0输入端,当其为低时移位寄存器的输出全部为o。由于SCK和RCK两个信号是互相独立的,所以能够做到输人串行移位与输出锁存互不干扰。芯片的输出端为QAQH最高位QH可作为多片74LS595级联应用时,向上一级的级联输出。但因QH受输出锁存器打人控制,所以还从输出锁存器前引出了QH,作为与移位寄存器完全同步的级联输出。图3 74LS595的外形3.行驱动电路 单片机P1
17、口低4位输出的行号经416线译码器74LSl64译码后生成1 6条行选通信号线,再经过驱动器驱动对应的行线。一条行线上要带动16列的LED进行显示,按每一LED器件20 mA电流计算,16个LED同时发光时,需要320 mA电流,选用三极管8550作为驱动管可满足要求。4.系统程序的设计显示屏软件的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。根据软件分层次设计的原理,可把显示屏的软件系统分成两大层:第一层是底层的显示驱动程序,第二层是上层的系统应用程序。显示驱动程序负责向屏体送显示数据,并负责产生行扫描信号和其它控制信号,配合完成LED显示屏的扫描显示工作。显示驱
18、动程序由定时器T0中断程序实现。系统应用程序完成系统环境设置(初始化)、显示效果处理等工作,由主程序来实现。从有利于实现较复杂的算法(显示效果处理)和有利于程序结构化考虑,显示屏程序适宜采用c语言编写。5.显示驱动程序 显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打人输出锁存器并锁存,然后再输出新的行号,重新打开显示。图4为显示驱动程序(显示屏扫描函数)流程图。图4 显示驱动程序流程图3 系统软件设计(包括主流程图及各部分功能模块流程图,部分需要讲解的模块源码
19、) 主程序流程图显示 完成Ib=ib+1 下一屏 上下跑马显示 开 始定义端口和移动效果显示 系统数据初始化读取第一个数据的地址 显示数据左跑马 右跑马显示 等待单片机读取数据 开 始定义端口和移动效果显示 右跑马显示 显示数据左跑马读取第一个数据的地址 等待单片机读取数据 系统数据初始化跑马显示子程序流程图子程序结束 延时显示单字移动显示完成 开 始 读取字形的地址 判断是左右半字 对屏幕进行扫描显示当tmp为0指向下一个汉字将汉字进行8行或者8列移动 继续移动剩下的半个字节更新点阵 开 始 读取字形的地址 判断是左右半字 对屏幕进行扫描显示当tmp为0指向下一个汉字将汉字进行8行或者8列移
20、动 继续移动剩下的半个字节更新点阵 单字移动显示完成/*16x16点阵* /#include /预处理命令 reg51.h是一个库文件#include /移位库函数包含于此头文件中#define DATAOUT P2 /P2 作为数据输出端口#define SPEED 13void ymove(char dir,unsigned char *ptr,char speed); /定义纵向移动方向 ,指定*ptr指针为无符号字符型 ,定义速度(为字符)void xmove(char dir,unsigned char *ptr,char n,char speed);void delay(unsig
21、ned int a); /定义延时子程序 指定a为无符号整数型void display();/定义显示停顿延时void displaytime(char time); /定义显示延时时间 time为字符型void init164(); / 代表:74ls164?sbit ADATA= DATAOUT0; /定义输出端口p2 端口名称sbit ASCK= DATAOUT1;sbit LATCH= DATAOUT2;sbit BDATA= DATAOUT3;sbit BCLK= DATAOUT4;/上面的程序实现的是对所输入字形的横向和纵向的移动,加入的是xmove和ymove。同时也定义出了输出
22、端口。 /定义字形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 D32= 0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xE0,/D0x38,0x38,0x38,0x1C,0x38,0x0E,0x38,0x
23、0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1C,0x38,0x78,0x7F,0xE0,0x00,0x00,0x00,0x00;code unsigned char Z32= 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFC,0x38,0x18,0x20,0x30,0x00,0x60,0x01,0xC0, /Z0x03,0x80,0x03,0x00,0x0E,0x00,0x1C,0x06,0x38,0x0C,0x7F,0xFC,0x00,0x00,0x00,0x00;code unsigned char zhao32= 0x0
24、8,0x00,0x08,0x08,0x08,0x88,0x7E,0x88,0x08,0x50,0x0A,0x50,0xFF,0x20,0x08,0x20, /赵0x28,0x50,0x2E,0x48,0x28,0x8C,0x39,0x04,0x48,0x00,0x44,0x06,0x83,0xFC,0x00,0x00;code unsigned char yu32=0x00,0x08,0x7F,0xFC,0x01,0x00,0x01,0x00,/玉0x01,0x00,0x01,0x00,0x01,0x10,0x3F,0xF8,0x01,0x00,0x01,0x00,0x01,0x40,0x01
25、,0x30,0x01,0x10,0x01,0x04,0xFF,0xFE,0x00,0x00;code unsigned char ying32= 0x04,0x40,0x04,0x48,0x7F,0xFC,0x04,0x40,0x04,0x40,0x7F,0xFE,0x40,0x02,0xBF,0xF4, /莹0x01,0x00,0x01,0x10,0x3F,0xF8,0x01,0x00,0x01,0x40,0x01,0x24,0xFF,0xFE,0x00,0x00 ; code unsigned char cui32= 0x01,0x00,0x21,0x08,0x21,0x08,0x3F,0
26、xF8, /崔0x28,0x08,0x11,0x00,0x10,0x88,0x3F,0xFC,0x50,0x80,0x9F,0xF8,0x10,0x80,0x1F,0xF8,0x10,0x80,0x10,0x84,0x1F,0xFE,0x10,0x00;code unsigned char he32= 0x10,0x00,0x10,0x04,0x7F,0x7E,0x11,0x44, /贺0x11,0x44,0x25,0x7C,0x42,0x10,0x9F,0xF8,0x10,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x02,0xC0,0x0C,
27、0x30,0x30,0x08;code unsigned char wang32= 0x00,0x08,0x7F,0xFC,0x01,0x00,0x01,0x00, /王0x01,0x00,0x01,0x00,0x01,0x08,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00;code unsigned char wen32= 0x02,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,/文0x10,0x10,0x08,0x10,0x08,0x
28、20,0x04,0x20,0x04,0x40,0x02,0x80,0x01,0x00,0x02,0x80,0x04,0x60,0x08,0x10,0x30,0x0E,0xC0,0x04;code unsigned char li32= 0x02,0x00,0x01,0x00,0x01,0x00,0x00,0x08, /立0x7F,0xFC,0x00,0x00,0x00,0x10,0x10,0x10,0x08,0x20,0x08,0x20,0x04,0x40,0x04,0x40,0x04,0x80,0x00,0x04,0xFF,0xFE,0x00,0x00;code unsigned char
29、zhen32= 0x01,0x00,0x01,0x08,0x7F,0xFC,0x01,0x10,0x1F,0xF8,0x10,0x10,0x1F,0xF0,0x10,0x10, /真0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x14,0xFF,0xFE,0x08,0x20,0x10,0x18,0x20,0x08;code unsigned char niu32=0x01,0x00,0x11,0x00,0x11,0x10,0x1F,0xF8,0x21,0x00,0x21,0x00,0x41,0x00,0x01,0x04, /牛0xFF,0xFE,0x01,0x00,0
30、x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00;code unsigned char gth32=0x00,0x00,0x01,0x80,0x03,0xC0,0x03,0xC0, /!code为存储类型标识符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;/无符号字符型 数据 b
31、uffer 缓存 void main(void) unsigned char i; /定义无符号字符 iinit164();while(1) /循环语句对所输入字符的循环要求for(i=0;i32;i+)/扫描 心型显示心形bufferi=xini;displaytime(1); /加延时xmove(1,D,2,SPEED);/显示D和后面的一个字符 有速度限制 且为横向移动displaytime(1); / 实际方针中会有些许停顿xmove(1,zhao,3,SPEED); /同上displaytime(1);xmove(1,cui,2,SPEED);displaytime(1);xmove
32、(1,wang,3,SPEED);displaytime(1);ymove(1,0,SPEED); /纵向移动ymove(1,zhen,SPEED);ymove(1,niu,SPEED);ymove(1,0,SPEED);xmove(0,zhen,3,SPEED); /zhen niu ! 三个字符左右上下 移动ymove(0,gth,SPEED);ymove(0,0,SPEED);xmove(1,xin,1,SPEED);/这部分的程序是主程序,是将输入的字形上下左右移动,同时也加入了每一段字形显示后的延时displaytime(1),能够让实际效果更佳好看/* 子函数 */void del
33、ay(unsigned int a)/定义子函数 delay 延时子程序的编写 定义a为无符号整数型while(a-);/ 循环a减void display() /延时的定义unsigned char hang,ib,k,tmp;/定义无符号字符型 hang ib k tmp DATAOUT= 0x0; /数据初始输出值为0BDATA = 0; /位变量声明bdata 为0for(hang=0;hang16;hang+) /扫描16行 ASCK =0; /p2端口定义LATCH=0;BCLK =0;for(ib=0;ib2;ib+)tmp = bufferhang*2+ib;for(k=0;k
34、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) /设置停顿时间;unsigned char i; /定义无符号字节型 iwhile(time-)/用while语句实现延迟i=130;while(i-) display(); /这个模块是对延时程序的编写,其中应用了while语句,for循环语句。具体是对16行进行扫描的时候对输出端口的赋值不同来实现不同程度的延时。void init1
35、64()/子程序init164 的定义char i;BDATA=1;for(i=0;i16;i+)BCLK =0;BCLK =1;void xmove(char dir,unsigned char *ptr,char n,char speed) /* 方向 n是要移动的汉字个数 移动速度*/ unsigned char i=0, ib=0; /对i和ib的定义unsigned int tmp=0, speedm=0;unsigned char buffer216; /半个汉字的缓存n*=2; /左半字和右半字,所以要x2 for(i=0;i0;n-) if(ptr != 0)tmp = n%2;/判断是左半字还是右半字for(i=0;i0;tmp-) /要移动8列 ib=0;for(i=0;i16;i+) /要移16行,共16个字节 bufferib =1; /移第一个半字if(bufferib+1 & 0x80)bufferib+;ib+;bufferib=1; /移后半字if(buffer2i & 0x80) bufferib+;ib+;buffer2i=1;/缓冲左半字向左移一位speedm=speed;/更新点阵while(speedm-)display();
限制150内