《基于单片机的1616点阵的滚动显示.doc》由会员分享,可在线阅读,更多相关《基于单片机的1616点阵的滚动显示.doc(18页珍藏版)》请在三一办公上搜索。
1、 基于单片机的16*16点阵的滚动显示学 院 物电学院 专 业 通信工程专业 研 究 方 向 单板微机电路设计 学 生 姓 名 学 号 指导教师姓名 指导教师职称 讲 师 2011年4月 23日基于单片机的数字钟的设计摘要 本文的设计是基于单片机系统的基本模块的一部分。LED 点阵电子显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。同时也可广泛应用到军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等许多行业。本次设计的点阵显示屏主要是通过单片机直接控制行扫
2、描,然后用74LS138来控制列扫描。这个设计的软硬件都成功通过了PROTEUS的仿真调试。关键词:单片机;点阵;滚动显示Based on SCM 16*16 LED rolling display designAbstract: The design of this article is based on a part of the basic module SCM(Single-Chip-Microcomputer)system. LED electronic display screen is a large system which combined with micro-electr
3、onic technology and computer technology and information processing technology. It has become the ideal choice of numerous display media and out-door jobs display because of its advantages, including bright-colored flavor, wide dynamic state range, high brilliance, long life-span and stable and relia
4、ble work and so on. At the same time, it would be widely used in military affairs, stations, hotels, sports, news, finances, bonds, ads and traffic transportations etc. This design is mainly directly controlled by SCM in order to achieve row-scanning and the column-scanning achieved by the 74LS138.T
5、his design of hardware and software modules pass the PROTEUS simulation debugging successfully.Key words: SCM; LED; rolling display目 次1绪论11.1MCS-51系列单片机简介11.2单片机的应用模式和应用领域21.3主要工作任务32硬件设计32.1单片机系统的基本模块32.216*16点阵滚动显示的硬件设计43软件设计63.116*16点阵滚动显示的软件设计64软件仿真结果84.116*16点阵滚动显示仿真结果8结论9参考文献10致谢11附录相关源程序121绪论
6、 单片机(Single-Chip-Microcomputer)又称微控制器(Microcontroller),最基本的结构是将CPU和计算机外围功能单元,如存储器、I/O口、定时器/计数器、中断系统等集成在一个芯片上构成的。虽然单片机只是一个芯片,但无论从成还是功能上来看,它都具有了微机系统的特征。11.1MCS-51系列单片机简介1971年微处理器研制成功。1974年,美国仙童(Fairchild)公司研制出世界上第一台单片机微型计算机F8。该机由两块集成电路芯片构成,具有与众不同的指令系统,深受民用电器及仪器仪表领域的欢迎和重视。从此单片机开始迅速发展,应用领域也不断扩大。1976年Int
7、el公司推出MCS-48系列8位单片微型计算机,它以体积小、功能全、价格低等优点,赢得了广泛的应用,为单片机的发展奠定了基础。成为单片机发展过程中的一个重要阶段。在MCS-48成功应用的推动下,许多半导体公司和计算机公司也竞相研制和开发自己的单片机系列。到目前为止,世界各地厂商也相继研制出大约50个系列300多个品种的单片机产品,可以满足不同领域的需要。代表产品有Intel公司的MCS-51单片机,Motorola公司的MC6081、MC6082系列机,Zilog公司的Z-8系列机,TI公司的TMS7000系列机等,此外Rockwell、NS、GI和日本的NEC、松下、日立等公司也先后生产了自
8、己的单片机系列。1单片机的出现是近代计算机技术发展史上的一个重要里程碑,其诞生标志着计算机正式形成了通用计算机系统和嵌入式计算机系统两大分支。2然而,由于16位单片机销售量并不大,价格也比较贵,大量应用领域需要的仍然是8位单片机。因此,各公司1986年以来纷纷开发高性能、大容量和多功能新型8位单片机。这些单片机有Intel公司的8044(双CPU工作)、Zilog公司的Super8(含DMA通道)、Motorola公司的MC68CH11(内含E2PROM及A/D转换电路)和WDC公司的65C124(内含网络接口电路),等等。目前,单片机正朝着高性能和多品种方向发展,但以MCS-51为主的8位单
9、片机仍然占据着单片机的主导地位。单片机的应用日益广泛啊,如应用在仪器仪表、家用电器和专用设备的智能化以及过程控制等方面,单片机在人们的日常生活和工作中正扮演着越来越重要的角色。伴随着信息技术革命的不断深入,以及计算机技术的快速发展,单片机的应用越来越广泛了,并且已经逐渐地发展成为了一门比较关键的技术学科。单片机具有这样一些突出优点:体积小、质量轻 、耗电量小、 电源比较单一 、功能性强、价格低、运行速度比较快 、抗干扰的能力较强、利用率高等优点。 因而在通信、家电、工业中等特别是汽车等产品的应用当中都能够处处看到单片机的应用。31.2单片机的应用领域 单片机具有体积小、可靠性高、功能强、灵活方
10、便等优点,故可以广泛应用于国民经济的各个领域,对各行各业的技术改造和产品更新换代起到了推动作用。从应用规模来分,单片机应用系统常分为简单应用系统、常规应用系统和高级应用系统三类。 简单应用系统是指它在家用电器或仪器仪表中的应用,其特点是没有人机对话功能,程序和运行参数均可固化在ROM中。常规应用系统用于过程控制,通常配有一个键盘和若干个I/O端口,用以实现对被控制对象进行监视和控制;高级应用系统是指单片机在分布式计算机系统或计算机网络中的应用;在这类应用系统中,单片机通常用作下位机,而上位机一般是一台系统或网络工作站机。为了使读者了解单片机的应用情况,现就单片机在直接数字系统和分布控制系统中的
11、应用问题分别进行简单的介绍。(1) 单片机在直接数字控制系统中的应用 直接数字控制(Direct Digital Control),简称DDC。它是单片机在工业控制中应用最普遍的一种方式。在这种方式中,单片机作为系统的一个组成部分或环节,直接参与控制过程。一台单片机可以对多个被控参数进行巡回检测,并把检测结果和给定值进行比较,再按事先约定的控制规律进行运算处理,然后通过D/A和反多路开关控制执行机构动作,从而使生产过程始终处于最佳状态。(2) 单片机在分布式控制系统中的应用 分布式控制系统(Distributed Control System),简称DCS。它实际上是一个分级结构的计算机系统,
12、这类系统一般由一台或数台主计算机和若干单片机构成。单片机在工业控制中直接位于控制第一线,应用面广、应用量大,是工厂自动化的关键部件之一。41.3主要工作任务本文的设计是单片机系统基本模块的一部分,即利用单片机驱动显示屏工作。其中点阵行扫描由单片机直接驱动,列扫描由单片机驱动的74LS138直接驱动,通过程序写入代码从而实现点阵的显示。这部分电路在单片机的学习中很重要,我们要知道点阵的显示原理,了解行扫描和列扫描是怎么一回事,以及用什么来驱动行扫描和用什么来驱动列扫描,这里我们使用了74ls138来驱动列扫描,通过这个设计,我们可以更加明白74ls138的使用方法以及它的一些功能特性。对点阵显示
13、屏及其他的一些显示屏也能有更多的了解。2硬件设计2.1 单片机系统的基本模块基本模块的制作是基于单片机的16*16点阵滚动显示的基本思路,也是我们研究的基于单片机的16*16点阵滚动显示的重要依据。如图1所示基于单片机系统基本模块图。 单片机系统 显示部分单片机最小系统接口扩展部分 驱动部分 图1 单片机系统基本模块图其中,单片机最小系统包括复位电路、晶振电路和电源电路。显示部分即点阵显示电路,驱动部分即74LS138驱动电路,接口扩展在本次设计中暂未使用。2.2 16*16点阵滚动显示的硬件设计2.2.1 单个点阵显示基本原理一般的点阵都是8*8的,即横竖都有8个发光二极管,如图2所示。观察
14、二极管正负极,我们可以很容易发现,如果赋予P0=0xff;P2=0x00;那么所有的发光二极管将被点亮,从而点阵就可以实现全亮。类似的,如果需要实现某一列或者某一行全亮,也可以进行类似的赋值。比如,我们要实现第一列全亮,第一列全亮就要求P20=0;其他为1,则代码为P0=0xff;P2=0xfe; 图2 8*8点阵但是如果需要让点阵显示一个字符的话,上述赋 值则不能达到目的,这里,我们需要先知道扫描的概念。所谓扫描,就是每隔一个时间段,发送一组代码,当然,这个时间段要足够小。由于人眼有视觉暂留效应,人的肉眼无法分辨,因此,经过多次扫描,点阵上就能稳定的显示一个字符。那么程序上如何实现扫描呢?扫
15、描包括行扫描和列扫描,我们可以任意使用其中一种。假设我们使用行扫描,就是首先令P07为1,即P00=0x80;然后观察在这一行上有哪些二极管被点亮,点亮的那一列所对应的端口就为0,不亮的就为1,记下此时P2数值,短暂延时过后,令P06=1,即P00=0x40;然后观察在这一行上有哪些二极管被点亮,点亮的那一列就为0,不亮的就为1,记下此时P2数值,同理如此重复下去,直到P00=0x01;那么所有的P0和P2的数值就构成了两个长度为8的数组,我们可以在程序中每个一段时间按顺序发送一组代码,只要时间段足够短,那么我们就可以在点阵上看到稳定的字符了。以上就是单个点阵显示的基本原理。2.2.2 16*
16、16点阵的组成及显示原理图3 16*16点阵 所谓16*16点阵,就是行列各位16个长度的点阵,现实中我们可以通过4个8*8点阵进行拼凑来实现一个16*16的点阵。如图3所示。图中的16*16点阵由U6,U7,U8,U9四个单点阵组成,所有的行(X0-X7)都通过排阻接到单片机的P0口上,所有的列(Y00-Y07、Y10-Y17、Y20-Y27、Y30-Y37)接到不同的74ls138(U2,U3,U4,U5)上,U2控制U6,U3控制U7,U4控制U8,U5控制U9。74ls138直接由单片机的P2口进行驱动,这样就形成了一个完整的电路。如图4所示。其显示原理与单个点阵的显示原理类似,但是这
17、里需要先把代码写入U6,然后短暂延时后写入U7,直到U9。时间段控制合理的话,我们就可以看到显示屏上将显示稳定的字符。这里涉及到一个滚动显示的问题,所谓滚动显示,即字符是从屏幕右端慢慢往左边移动,好像是一个拉幕的效果,那么滚动显示在程序上如何实现呢?这里我们就要用到单片机的定时中断,中断一次,字符往左移动一次,如此循环,即实现了字符的滚动显示。这与上面单个点阵的静态显示是有区别的。 图4 74ls138驱动电路关于74LS138的使用,74ls138是3-8线译码器,当E1=1,E2,E3=0时,该译码器被选中,此时如果数据输入端ABC输入000-111八个数据,输出端Y0-Y7将依次输出0。
18、所以,我们可以依次选中四个译码器,向数据输入端写入数据来直接控制某个点阵的显示。以上就是16*16点阵的滚动显示原理。2.2.3 16*16点阵滚动显示的硬件设计如图5就是本次设计的全部硬件电路图:图5 本次设计完整电路图3软件设计3.1 16*16点阵滚动显示的软件设计在设计16*16滚动显示的软件部分时,我们必须要明白其中的原理。本次设计中我们需要注意以下几个问题:第一,怎么样让点阵显示我们需要的字符,即我们如何获得字符显示的代码。第二,如何实现字符的滚动显示。第三,如何使画面保持稳定。第一,如何取得代码。现在针对点阵的取字模软件很多,我们只需要打开软件,写入需要取字模的字,然后注意取字模
19、的顺序,是横向还是纵向就行了。我们这里采用纵向取模,设置字模为C51格式。这样当写入的字确定后,我们就可以直接复制字模到程序中来实现相应功能。如“欢”的字模就为:0x04,0x28,0x08,0x24,0x32,0x22,0xC2,0x21,0xC2,0x26,0x34,0x38,0x04,0x04,0x08,0x18,0x30,0xF0,0xC0,0x17,0x60,0x10,0x18,0x10,0x0C,0x14,0x06,0x18,0x04,0x10,0x00,0x00。第二,如何实现滚动显示。为了实现字符的滚动显示,我们加入了定时中断函数,如下:void timer0() interr
20、upt 1 using 3TH0=0xd8; TL0=0xf0; /这里实现10ms定时,10ms时间到后就产生中断 if (n1100) offset=0; n=0; 在主函数中,我们通过:P0=*(p+offset+2*i);这句话来实现字符的滚动显示,每中断10次后offset加2,即字符整体往左移动2个点,移动时间间隔为10*10ms=100ms,由于人眼的视觉暂留效应,我们看到的字符是在流畅的往左移动。第三,如何使画面保持稳定。画面的稳定有两个条件:一,中断的时间应控制在合理的范围之内,时间小了会看不清画面,时间大了画面不连续。二,选中各个点阵中间的延时,也应当控制在合理范围之内,延
21、时函数如下:void delay(void) int16 i;for (i=0;i50;i+);这两个条件控制好了,我们就可以看到显示的画面很稳定,很流畅。 4软件仿真结果4.1 16*16点阵滚动显示的仿真结果如图6、7、8、9为本次16*16点阵滚动显示的仿真结果: 图6 点阵显示“欢”字 图7 点阵显示“迎”字 图8 点阵显示“您”字 图9 点阵显示两个字之间图6:单片机调用字符代码通过驱动电路显示“欢”字图7:单片机调用字符代码通过驱动电路显示“迎”字图8:单片机调用字符代码通过驱动电路显示“您”字图9:单片机调用字符代码通过驱动电路滚动显示在两个字之间 结论本次设计的基于单片机的16
22、*16点阵的滚动显示经测试仿真结果良好,能清楚的看到字符的滚动显示,画面比较稳定,流畅。有时会出现字符显示不完整的现象,我认为这是程序在时间的控制上做的不够好。但程序思想还是很正确的,学生可以很容易就读懂程序,电路也很容易就看明白了。在最后的硬件设计时,我们要认真画原理图和PCB,尤其是在PCB布线时,我们要考虑板子的大小要适宜,太大了会浪费资源,太小了对于元件就不好摆放,还要注意元件的摆放位置要适宜布线,不要造成多处飞线的情况,最后,还要设置线宽,线太细的话容易断。最后再完成调试检测工作。通过这次的设计,我明白了点阵的工作原理,对单片机以及其他外部器件有了更深的理解,对市场上的元器件价格有了
23、了解,也对各式各样的点阵广告牌等电子显示屏的工作原理有了更深的认识同时,在考虑问题方面对于这部分的设计一定要结合所有的部分综合考虑,在我们初始设计的时候就应该有大致的整体框架。参考文献1 胡键.单片机原理及接口技术M.北京:机械工业出版社,20052 莫少莹.单片机原理及接口技术课程实验教学改革J。大众科技。2010,(9);175,773 曹丽燕.基于单片机的音乐盒的设计J。信息与电脑,2010,(4);584 陶国正.单片机与接口应用技术M.苏州:苏州大学出版社,20045 梅丽凤,单片机原理及接口技术M。王艳秋,汪毓铎。北京:清华大学出版社,2003,56 郑学坚.微型计算机原理与应用M
24、.北京:清华大学出版社,20017 徐爱钧,智能化测量控制仪表原理与设计M。北京:北京航空航天大学出版社,2004,98 张迎新,单片微型计数机原理,应用及接口技术M。北京:国房工业出版社,19939 李华. MCS-51系列单片机实用接口技术M.北京:北京航空航天大学出版社,199310 王幸之单片机应用系统抗干扰技术M.北京:北京航空航天大学出版社,199911 何立民. MCS-51系列单片机应用系统设计系统配置与接口技术M.北京:北京航空航天大学出版社,199012 薛均义,张彦斌MCS-51/96系列单片微型计算机及其应用M西安:西安交通大学出版社,199713 彭勇; 向云南; 李
25、书舟; “单片机”课程说课 J,教师,2009, 53 ;27-28致谢本论文是在我的指导老师杨保华讲师的亲切关怀和悉心指导下完成的。感谢周老师对本论文从选题、构思、资料收集到最定稿的各个环节给予细心的指引和教导,使我对于基于单片机的数字钟设计有较好的认识,并最终得以完成毕业论文。对此我表示衷心的感谢。周老师严谨的治学态度、渊博的知识、敏锐的学术思维、精益求精的工作态度、积极进取的科研精神以及诲人不倦的师者风范是我学习的楷模,此外还得到其他众多老师的关心支持和帮助,在此,谨向老师们致以衷心的感谢和崇高的敬意!在大学四年生活中,得到各位老师、同学的关心与帮助,特别要感谢我的好友张新泉同学对我的帮
26、助。我在学习和生活中不断得到友谊的温暖与关怀,最重要的是一种精神上的激励,让我非常感动。感谢父母对我二十多年来辛勤的养育,并让我获取了一定的知识并最终走向社会为社会贡献自己!最后,我要向在百忙之中抽时间对本文进行审阅、评议和参加本人论文答辩的各位老师表示衷心的感谢! 附录 相关源程序#include #define int8 unsigned char#define int16 unsigned intint8 n;int8 code table32= 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
27、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*显示一个空屏*/ 0x04,0x28,0x08,0x24,0x32,0x22,0xC2,0x21,0xC2,0x26,0x34,0x38,0x04,0x04,0x08,0x18,0x30,0xF0,0xC0,0x17,0x60,0x10,0x18,0x10,0x0C,0x14,0x06,0x18,0x04,0x10,0x00,0x00,/*欢*/ 0x02,0x02,0x04,0x82,0xF8,0x73,0x04
28、,0x20,0x02,0x00,0xE2,0x3F,0x42,0x20,0x82,0x40,0x02,0x40,0xFA,0x3F,0x02,0x20,0x42,0x20,0x22,0x20,0xC2,0x3F,0x02,0x00,0x00,0x00,/*迎*/ 0x00,0x01,0x04,0x02,0x1C,0x0C,0xC0,0x3F,0x1C,0xC0,0x02,0x09,0x02,0x16,0x92,0x60,0x4A,0x20,0x82,0x2F,0x02,0x20,0x0E,0x24,0x00,0x22,0x90,0x31,0x0C,0x20,0x00,0x00,/*您*/ 0x
29、44,0x10,0x44,0x14,0x88,0x54,0x88,0x54,0xD0,0x5F,0x30,0x50,0x60,0x50,0xFE,0x7F,0x40,0x50,0x20,0x90,0xB0,0x9F,0x98,0x92,0x8C,0x94,0x88,0x34,0x80,0x11,0x00,0x00,/*乘*/ 0x82,0x00,0x02,0x01,0x22,0x06,0x22,0x38,0x22,0x04,0x22,0x03,0x22,0x00,0xFE,0xFF,0xA2,0x00,0x22,0x01,0x22,0x02,0x22,0x3C,0x22,0x02,0x02,0
30、x01,0x02,0x00,0x00,0x00,/*坐*/ 0x00,0x00,0x80,0x00,0x04,0x01,0x0E,0x02,0x14,0x0C,0x24,0x70,0xC4,0x21,0x8C,0x00,0x08,0x00,0x08,0x70,0x28,0x08,0x1E,0x06,0x0C,0x03,0x80,0x01,0x00,0x01,0x00,0x00,/*公*/ 0x40,0x00,0x40,0x08,0x41,0x08,0x42,0x08,0x4C,0x08,0xF8,0x7F,0x50,0x08,0x40,0x08,0x40,0x08,0x60,0x08,0xD0
31、,0x7F,0x4C,0x08,0x47,0x08,0x42,0x08,0x40,0x00,0x00,0x00,/*共*/ 0x20,0x08,0x20,0x86,0x7F,0x60,0x80,0x0F,0x00,0x04,0x00,0x1A,0x00,0xEA,0x00,0x2A,0x00,0x2A,0x00,0x2A,0x00,0x2A,0xF0,0x2B,0x0C,0x28,0x02,0x20,0x0F,0x00,0x00,0x00,/*汽*/ 0x20,0x00,0x20,0x20,0x20,0x21,0x20,0x23,0x20,0x25,0x20,0x39,0x20,0xE1,0x
32、20,0x21,0xFF,0x2F,0x20,0x21,0x20,0x21,0x20,0x21,0x20,0x21,0x20,0x21,0x20,0x00,0x00,0x00,/*车*/ 0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*!*/ ;void delay(void);int16 offset;void main
33、(void) int8 i;int8 *p;n=0; TMOD=0x01; TH0=0xc5; TL0=0x68;/10ms定时 ET0=1; EA=1; TR0=1; p=&table00; while (1) for (i=0;i8;i+) /显示左半边屏幕 P0=*(p+offset+2*i); P2=i|0x08; /P2.4=0,P2.3=1 选中U2, 输出扫描码给U6 delay(); P0=*(p+offset+2*i+1); P2=i|0x10; /P2.4=1,P2.3=0 选中U3, 输出扫描码给U7 delay(); for (i=8;i16;i+) /显示右半边屏幕 P0=*(p+offset+2*i); P2=(i-8)|0x20; /P2.5=1 P2.4=0, P2.3=0 选中U4,输出扫描码U8 delay(); P0=*(p+offset+2*i+1); P2=(i-8)|0x40; /P2.6=1 P2.5=0, P2.4=0 选中U5,输出扫描码U9 delay(); void delay(void) int16 i; for (i=0;i50;i+);void timer0() interrupt 1 using 3TH0=0xd8; TL0=0xf0; if (n360) offset=0; n=0;