ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:241.61KB ,
资源ID:4946383      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4946383.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机课程设计1616点阵式汉字显示.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机课程设计1616点阵式汉字显示.docx

1、单片机课程设计1616点阵式汉字显示摘要LED点阵显示屏作为一种新兴的显示器件,是由多个独立的LED发光二极管封装而成. LED点阵显示屏可以显示数字或符号, 通常用来显示时间、速度、系统状态等。文章给出了一种基于MCS-51单片机的1616 点阵LED显示屏的设计方案。包括系统具体的硬件设计方案,软件流程图和部分汇编语言程序等方面。在负载范围内, 只需通过简单的级联就可以对显示屏进行扩展,是一种成本低廉的图文显示方案。关键词:MCS-51;LED;单片机AbstractAs a popular display device component, LED dot-matrix display

2、board consists of several independent LED (Light Emitting Diode). The LED dot-matrix display board can display the number or sign, and it is usually used to show time, speed, the state of system etc. This paper introduces a kind of simple 1616 LED display screen design process based on MCS-51 single

3、 chip minicomputer . The detail hardware scheme, software flow and assemble language programmer design and so on is followed. The display part can be cascaded to meet the need. The practice proves the design is low-cost and effective. Key words: MCS-51;LED;MCU1设计原理1.1 MCS-51单片机的结构及编程方法 MCS-51单片机的组成:

4、 CPU(进行运算、控制)、RAM(数据存储器)、ROM(程序存储器)、I/O口(串口、并口)、内部总线 和中断系统等。8051单片机的组成框图(1)cpu中央处理器 由运算器和控制器组成,是8位的cpu,具有布尔运算和8位寻址功能。运算器完成算术运算和逻辑运算。CPU根据PC中的地址将欲执行指令的指令码从存储器中取出,存放在IR中,ID对IR中的指令码进行译码,定时控制逻辑在OSC配合下对ID译码后的信号进行分时,以产生执行本条指令所需的全部信号。(2)存储器MCS-51单片机按程序存储器可分为内部无ROM型(如8031)和内部有ROM型(如8051)两种,连接时 引脚有区别。程序存储器结构

5、如右图所示:程序存储器 :一般将只读存储器(ROM)用做程序存储器。可寻址空间为64KB,用于存放用户程序、数据和表格等信息。数据存储器:一般将随机存储器(RAM)用做数据存储器。可寻址空间为64KB。MCS-51数据存储器可分为片内和片外两部分。(3)特殊功能寄存器(SFR) MCS-51有21个特殊功能寄存器(也称为专用寄存器),包括算术运算寄存器、指针寄存器、I/O口锁存器、定时器/计数器、串行口、中断、状态、控制寄存器等,它们被离散地分布在内部RAM的80HFFH地址单元中(不包括PC) ,共占据了128个存储单元,构成了SFR存储块。其字节地址可被8整除的SFR可位寻址。SFR反映了

6、MCS-51单片机的运行状态。 80C51内部结构(4)I/O接口 I/O接口是MCS-51单片机对外部实现控制和信息交换的必经之路,用于信息传送过程中的速度匹配和增加它的负载能力。8051内部有4个8位并行接口P0, P1, P2, P3,有1个全双工的可编程串行I/O接口。(5)定时器/计数器 8051内部有两个16位可编程序的定时器/计数器,均为二进制加1计数器,分别命名为T0和T1。(6)中断系统 8051可处理5个中断源(2个外部,3个内部)发出的中断请求,并可对其进行优先权处理。外部中断的请求信号可以从P3.2, P3.3引脚上输入,有电平或边沿两种触发方式;内部中断源有3个,2个

7、定时器/计数器中断源和1个串行口中断源。8051的中断系统主要由中断允许控制器IE和中断优先级控制器IP等电路组成。1.2 16*16点阵LED原理 下图为88点阵LED外观及引脚图,其等效电路如下图所示,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则Y0=1,X0=0即可。应用时限流电阻可以放在X轴或Y轴。 因为在当前Proteus仿真库中找不到16*16的LED点阵,所以在该设计中可以用4块8*8的LED连线来代替,这点不难理解。点阵LED扫描法介绍:点阵LED一般采用扫描式显示,实际运用分为三种方式:(1)点扫描; (2)行扫描;(3) 列扫描。 若使用

8、第一种方式,其扫描频率必须大于1664=1024Hz,周期小于1ms即可。若使用第二和第三种方式,则频率必须大于168=128Hz,周期小于7.8ms即可符合视觉暂留要求。此外一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。1.3 3-8译码器原理 由于3-8译码器74LS138的原理及功能我们都已经很熟悉,在这里就不重复累赘了。2.设计方案介绍2.1 设计总体思路 本次课程设计的要求是在1616点阵的显示器件上滚动显示,汉字由于要用16*16点阵显示汉字,而80C51的I/O接口是8位的,我们可以用4个8*8点阵来组成。由于80C51的I/O口不多(只有4组,

9、32个),为了节约I/O口,我们用74HC138(3线-8译码器)作为点阵的列驱动,P2口和P0口作为数据线。为了显示16*16的点阵汉字,我们需建一个表先将要显示的汉字的点阵码存起来,然后编写一个合适的查表程序就可以按给定要求显示汉字。 2.2 与题目相关的具体设计1).汉字的显示:可以采用扫描的方式,先使一个I/O口产生一个选行(列)信号(通过74HC138),先选中一行,对选中的行进行扫描,然后用另外2组I/O口输送数据,这样一个字的1/16就送到LED点阵上了,接着选下一行,这样经过16次就可以显示一个字了,再适当延时使显示的字清晰。2).汉字的移动:在LED上显示一个汉字并延时后,可

10、以通过增加所取表的地址,这样下一次LED上显示的字就移动了一个点阵,可以通过适当的设计来控制汉字移动循环的的次数。3).键盘控制汉字:可以用单片机的P3口实现键盘的控制作用P3.0到P3.3作为行扫描信号,P3.4到P3.7作为列扫描信号,这样的话4行4列可以形成16个按键。每个按键可以对应相应的汉字显示。2.3程序设计流程图 系统主程序流程图 显示驱动程序流程图 3.源程序,原理图和仿真图3.1程序清单(见附录)3.2电路图3.2.1电路原理图3.2.2电路图分析该原理图中89C51单片机为基础一共分成三大部分:汉字显示部分,汉字移动部分以及键盘选择部分。P1.0到P1.3接两个74LS13

11、8给16*16点阵提供选行信号。P0.0到P0.7接16*16点阵的上半块作为数据线,给16*16点阵上部提供数据,点亮相应的LED,P2.0到P2.7接16*16点阵的下半块作为数据线,给16*16点阵下部提供数据,点亮相应的LED。74LS138的八个输出Y0到Y7一次连到4个8*8LED用于对行进行扫描与选通。P3.0到P3.7用作键盘扫描输入输出,接16个按键,P3.0到P3.3为行扫描信号,P3.4到P3.7为列扫描信号。通过键盘部分可以进行汉字选择,一个按键对应一个不同的字。就有16种不同的汉字。3.3仿真图 4性能分析 程序通过keil软件编译生成.hex文件加载到protues

12、软件的原理原理图中能够进行仿真,该程序段要实现以下功能:1、点阵式汉字显示电路;2、单个汉字滚动显示功能;3、多个汉字滚动显示功能;4、44键盘进行文字选择;5、显示内容可以保存在存储器中;系统开始显示后,汉字先从左向右移动,汉字显示很清晰明亮,效果很不错。用键盘进行汉字选择依次显示不同汉字。既可以单个汉字滚动显示,又可以多个汉字滚动显示。显示内容可以保存在存储器中。P1.0到P1.3接两个74LS138给16*16点阵提供选行信号。P0.0到P0.7接16*16点阵的上半块作为数据线,给16*16点阵上部提供数据,点亮相应的LED,P2.0到P2.7接16*16点阵的下半块作为数据线,给16

13、*16点阵下部提供数据,点亮相应的LED。74LS138的八个输出Y0到Y7一次连到4个8*8LED用于对行进行扫描与选通。P3.0到P3.7用作键盘扫描输入输出,接16个按键,P3.0到P3.3为行扫描信号,P3.4到P3.7为列扫描信号。通过键盘部分可以进行汉字选择,一个按键对应一个不同的字。那马就有16种不同的汉字显示。基本上实现了上述功能。5.总结和心得 作为一名电信专业的大三学生,我觉得这个单片机是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,学习单片机已经有一年了,已经掌握了单片机的原理和如何用汇编语言编写

14、程序,但是很少有机会取实践。我想做类似的课程设计,就为我们提供了良好的实践平台,这样能使我们对单片机及其应用认识和应用更加熟练,为我们以后走向社会工作打下良好基础。 在做单片机课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。为了写好程序,完成任务需查阅很多的资料,首先要先搞懂原理,比如8*8点阵的组成及其是如何工作的,汉字在16*16点阵是如何显示的,键盘是如何扫描,怎样实现汉字滚动显示,只有搞懂这些才能更好的设计出一个完善的系统。其次,在这次单片机课程设计中,我们运用到了以前所学的专业课知识,如:单片机、

15、汇编语言、模拟和数字电路知识等,还学会了应用新的软件(如PROTEUS,KEIL),虽然过去没用综合的应用过它们,但在做课程设计过程中带着问题和目标去应用这些软件和知识,我发现效率很高,这是我做这次课程设计的又一收获。最后,要做好这个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设

16、计过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。1周的单片机课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作。6.参考文献1.单片机原理及接口技术 李全利 高等教育出版社 20042.单片机原理及应用 张毅刚 高等教育出版社 20063.微型计算机接口技术及应用 徐仁贵 机械工业出版社 19984.LED显示屏系统原理及工程技术 诸昌钤 电子科技大学出版社 20055.数字逻辑电路(第2版) 梅开乡 电子工业出版社 2005附录:程序代码#include#define

17、 uchar unsigned char #define uint unsigned intuchar temp,num;uchar a,v,m,n,f;uchar i,j,k,shuz,shub;/*各变量值的初始化*/uchar code table1=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,0x20,0x04,0

18、x20,0x04,0x22,0x42,0x22,0x82,0xFE,0x7F,0x21,0x01,0x21,0x01,0x20,0x10,0x20,0x10,0xFF,0x08,0x20,0x07,0x22,0x1A,0xAC,0x21,0x20,0x40,0x20,0xF0,0x00,0x00,/*我,0*/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

19、,0x00,0x00,0x00;uchar code table2=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,0x00,0x40,0x40,0x20,0xB2,0xA0,0x96,0x90,0x9A,0x4C,0x92,0x47,0xF6,0x2A,0x9A,0x2A,0x93,0x12,0x91,0x1A,0x99,0

20、x26,0x97,0x22,0x91,0x40,0x90,0xC0,0x30,0x40,0x00,0x00,/*爱,1*/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;uchar code table3=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0

21、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x19,0x08,0x21,0x88,0x20,0x88,0x20,0x08,0x11,0x08,0x0E,0x00,0x00,/*5,2*/0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,/*1,3*/0x00,0x00,0x00,0x00,0x00,0x

22、00,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;uchar code table4=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

23、,0x00,0x00,0x00,0x08,0x00,0x08,0xF8,0x0B,0x28,0x09,0x29,0x09,0x2E,0x09,0x2A,0x09,0xF8,0xFF,0x28,0x09,0x2C,0x09,0x2B,0x09,0x2A,0x09,0xF8,0x0B,0x00,0x08,0x00,0x08,0x00,0x00,/*单,3*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x

24、00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;uchar code table5=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,0x00,0x80,0x00,0x40,0x00,0x30,0xFE,0x0F,0x10,0x01,0x10,0x01,0x10,0x01,0x10,0x01,0x10

25、,0x01,0x1F,0x01,0x10,0x01,0x10,0xFF,0x10,0x00,0x18,0x00,0x10,0x00,0x00,0x00,/*片,5*/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;uchar code table6=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

26、,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x08,0x03,0xC8,0x00,0xFF,0xFF,0x48,0x00,0x88,0x41,0x08,0x30,0x00,0x0C,0xFE,0x03,0x02,0x00,0x02,0x00,0x02,0x00,0xFE,0x3F,0x00,0x40,0x00,0x78,0x00,0x00,/*机,6*/0x00,0x00,0x

27、00,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;void init(); /*主函数的初始化声名*/ void init1(); /*左移显示方式的初始化声名*/void disp1(); /*左移显示子程序声名*/ void delay(uint z);/*延时函数声名及定义*/uchar keyscan();void display1();voi

28、d display2();void display3();void display4();void display5();void display6();uchar keyscan();void main() if(keyscan()=1) display1(); if(keyscan()=2) display2();if(keyscan()=3) display3();if(keyscan()=4) display4();if(keyscan()=5) display5();if(keyscan()=6) display6();if(keyscan()=7) display1();if(ke

29、yscan()=8) display2();if(keyscan()=9) display3();if(keyscan()=10) display4();if(keyscan()=11) display5();if(keyscan()=12) display6();if(keyscan()=13) display1();if(keyscan()=14) display2();if(keyscan()=15) display3();if(keyscan()=16) display4();uchar keyscan() uchar temp1,temp2,temp,num; P3=0xf0; te

30、mp=P3; if(temp!=0xf0) temp1=P3; P3=0x0f; temp=P3; if(temp!=0x0f) temp2=P3; temp=temp1temp2; switch(temp) case 0x7e : num=1; break; case 0x7d : num=2; break; case 0x7b : num=3; break; case 0x77 : num=4; break; case 0xbe : num=5; break; case 0xbd : num=6; break; case 0xbb : num=7; break; case 0xb7 : num=8; break; case 0xde : num=9; break; case 0xdd : num=10; break; case 0xdb : num=11; break; case 0xd7 : num=12; break; case 0xee : num=13; break; case 0xed : num=14; break; case 0xeb : num=15; break; case 0xe7 : num=16; break; return num; void display1() init(); init1(); /左移显示初始化 int a=

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1