单片机课程设计_16×16点阵式汉字显示(19页).doc

上传人:1595****071 文档编号:35958257 上传时间:2022-08-24 格式:DOC 页数:19 大小:516.50KB
返回 下载 相关 举报
单片机课程设计_16×16点阵式汉字显示(19页).doc_第1页
第1页 / 共19页
单片机课程设计_16×16点阵式汉字显示(19页).doc_第2页
第2页 / 共19页
点击查看更多>>
资源描述

《单片机课程设计_16×16点阵式汉字显示(19页).doc》由会员分享,可在线阅读,更多相关《单片机课程设计_16×16点阵式汉字显示(19页).doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-单片机课程设计_1616点阵式汉字显示-第 17 页目 录摘要1Abstract21设计原理31.1 MCS-51单片机的结构及编程方法31.2 16*16点阵LED原理51.3 3-8译码器原理62.设计方案介绍72.1 设计总体思路72.2 与题目相关的具体设计7程序设计流程图83.源程序,原理图和仿真图9程序清单(见附录)9电路图9电路原理图9电路图分析9仿真图104性能分析115.总结和心得126.参考文献13附录:程序代码14摘要LED点阵显示屏作为一种新兴的显示器件,是由多个独立的LED发光二极管封装而成. LED点阵显示屏可以显示数字或符号, 通常用来显示时间、速度、系统状态等

2、。文章给出了一种基于MCS-51单片机的1616 点阵LED显示屏的设计方案。包括系统具体的硬件设计方案,软件流程图和部分汇编语言程序等方面。在负载范围内, 只需通过简单的级联就可以对显示屏进行扩展,是一种成本低廉的图文显示方案。关键词:MCS-51;LED;单片机AbstractAs a popular display device component, LED dot-matrix display board consists of several independent LED (Light Emitting Diode). The LED dot-matrix display boar

3、d 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 chip minicomputer . The detail hardware scheme, software flow and assemble language programmer d

4、esign 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单片机的组成: CPU(进行运算、控制)、RAM(数据存储器)、ROM(程序存储器)、I/O口(串口、并口)、内部总线 和中断系统等。8051单片机的组成框图(1)cpu中央处理器 由运算器和控制器组成,是8

5、位的cpu,具有布尔运算和8位寻址功能。运算器完成算术运算和逻辑运算。CPU根据PC中的地址将欲执行指令的指令码从存储器中取出,存放在IR中,ID对IR中的指令码进行译码,定时控制逻辑在OSC配合下对ID译码后的信号进行分时,以产生执行本条指令所需的全部信号。(2) 存储器MCS-51单片机按程序存储器可分为内部无ROM型(如8031)和内部有ROM型(如8051)两种,连接时 引脚有区别。程序存储器结构如右图所示:程序存储器 :一般将只读存储器(ROM)用做程序存储器。可寻址空间为64KB,用于存放用户程序、数据和表格等信息。数据存储器:一般将随机存储器(RAM)用做数据存储器。可寻址空间为

6、64KB。MCS-51数据存储器可分为片内和片外两部分。(3) 特殊功能寄存器(SFR) MCS-51有21个特殊功能寄存器(也称为专用寄存器),包括算术运算寄存器、指针寄存器、I/O口锁存器、定时器/计数器、串行口、中断、状态、控制寄存器等,它们被离散地分布在内部RAM的80HFFH地址单元中(不包括PC) ,共占据了128个存储单元,构成了SFR存储块。其字节地址可被8整除的SFR可位寻址。SFR反映了MCS-51单片机的运行状态。 80C51内部结构(4) I/O接口 I/O接口是MCS-51单片机对外部实现控制和信息交换的必经之路,用于信息传送过程中的速度匹配和增加它的负载能力。805

7、1内部有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个定时器/计数器中断源和1个串行口中断源。8051的中断系统主要由中断允许控制器IE和中断优先级控制器IP等电路组成。1.2 16*16点阵LED原理 下图为88点阵LED外观及引脚图,

8、其等效电路如下图所示,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则Y0=1,X0=0即可。应用时限流电阻可以放在X轴或Y轴。 因为在当前Proteus仿真库中找不到16*16的LED点阵,所以在该设计中可以用4块8*8的LED连线来代替,这点不难理解。点阵LED扫描法介绍:点阵LED一般采用扫描式显示,实际运用分为三种方式:(1)点扫描; (2)行扫描;(3) 列扫描。 若使用第一种方式,其扫描频率必须大于1664=1024Hz,周期小于1ms即可。若使用第二和第三种方式,则频率必须大于168=128Hz,周期小于7.8ms即可符合视觉暂留要求。此外一次驱动

9、一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。1.3 3-8译码器原理 由于3-8译码器74LS138的原理及功能我们都已经很熟悉,在这里就不重复累赘了。2.1 设计总体思路 本次课程设计的要求是在1616点阵的显示器件上滚动显示,汉字由于要用16*16点阵显示汉字,而80C51的I/O接口是8位的,我们可以用4个8*8点阵来组成。由于80C51的I/O口不多(只有4组,32个),为了节约I/O口,我们用74HC138(3线-8译码器)作为点阵的列驱动,P2口和P0口作为数据线。为了显示16*16的点阵汉字,我们需建一个表先将要显示的汉字的点阵码存起来,然后编写一个合

10、适的查表程序就可以按给定要求显示汉字。 2.2 与题目相关的具体设计1).汉字的显示:可以采用扫描的方式,先使一个I/O口产生一个选行(列)信号(通过74HC138),先选中一行,对选中的行进行扫描,然后用另外2组I/O口输送数据,这样一个字的1/16就送到LED点阵上了,接着选下一行,这样经过16次就可以显示一个字了,再适当延时使显示的字清晰。2).汉字的移动:在LED上显示一个汉字并延时后,可以通过增加所取表的地址,这样下一次LED上显示的字就移动了一个点阵,可以通过适当的设计来控制汉字移动循环的的次数。3).键盘控制汉字:可以用单片机的P3口实现键盘的控制作用P3.0到P3.3作为行扫描

11、信号,P3.4到P3.7作为列扫描信号,这样的话4行4列可以形成16个按键。每个按键可以对应相应的汉字显示。开始进入中断系统初始化P3赋初值0选点阵行号并增一 送新行数据键盘进行扫描消隐 判断是那个键被按下切换显示数据执行相应的子程序 送新行号,打开显示退出退出中断 系统主程序流程图 显示驱动程序流程图3.源程序,原理图和仿真图3.1程序清单(见附录)电路原理图电路图分析该原理图中89C51单片机为基础一共分成三大部分:汉字显示部分,汉字移动部分以及键盘选择部分。P1.0到P1.3接两个74LS138给16*16点阵提供选行信号。P0.0到P0.7接16*16点阵的上半块作为数据线,给16*1

12、6点阵上部提供数据,点亮相应的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种不同的汉字。4性能分析 程序通过keil软件编译生成.hex文件加载到protues软件的原理原理图中能够进行仿真,该程序段要实现以下功能:1、点阵式汉字显示电路;2、单个汉字滚动显示功能;3、

13、多个汉字滚动显示功能;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*16点阵下部提供数据,点亮相应的LED。74LS138的八个输出Y0到Y7一次连到4个8*8LED用于对行进

14、行扫描与选通。P3.0到P3.7用作键盘扫描输入输出,接16个按键,P3.0到P3.3为行扫描信号,P3.4到P3.7为列扫描信号。通过键盘部分可以进行汉字选择,一个按键对应一个不同的字。那马就有16种不同的汉字显示。基本上实现了上述功能。 作为一名电信专业的大三学生,我觉得这个单片机是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,学习单片机已经有一年了,已经掌握了单片机的原理和如何用汇编语言编写程序,但是很少有机会取实践。我想做类似的课程设计,就为我们提供了良好的实践平台,这样能使我们对单片机及其应用认识和应用更加熟

15、练,为我们以后走向社会工作打下良好基础。 在做单片机课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。为了写好程序,完成任务需查阅很多的资料,首先要先搞懂原理,比如8*8点阵的组成及其是如何工作的,汉字在16*16点阵是如何显示的,键盘是如何扫描,怎样实现汉字滚动显示,只有搞懂这些才能更好的设计出一个完善的系统。其次,在这次单片机课程设计中,我们运用到了以前所学的专业课知识,如:单片机、汇编语言、模拟和数字电路知识等,还学会了应用新的软件(如PROTEUS,KEIL),虽然过去没用综合的应用过它们,但在做课程

16、设计过程中带着问题和目标去应用这些软件和知识,我发现效率很高,这是我做这次课程设计的又一收获。最后,要做好这个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。1周的单片机课程设计结

17、束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作。1.单片机原理及接口技术 李全利 高等教育出版社 20042.单片机原理及应用 张毅刚 高等教育出版社 20063.微型计算机接口技术及应用 徐仁贵 机械工业出版社 19984.LED显示屏系统原理及工程技术 诸昌钤 电子科技大学出版社 20055.数字逻辑电路(第2版) 梅开乡 电子工业出版社 2005附录:程序代码#include#define uchar unsigned char #define uint unsigned intuchar temp,num;uchar a

18、,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,0x20,0x04,0x22,0x42,0x22,0x82,0xFE,0x7F,0x21,0x01,0x21,0x01,0x20,0x10

19、,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,0x00,0x00,0x00uchar code table2=0x00,0x00,0x00,0x00,0x00,0x00,0x00,

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

21、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,0x00uchar code table3=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,0

22、x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x

23、00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00uchar 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,0x00,0x00,0x00,0x08,0x00,0x08,0xF8,0x0B,0x28,0x09,0x29,0x09,0x2E,0x09,

24、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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00uchar code table5=0x00,0x00,0x00,0

25、x00,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,0x01,0x1F,0x01,0x10,0x01,0x10,0xFF,0x10,0x00,0x18,0x00,0x10,0x00,0x00,0

26、x00,/*片,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,0x00uchar code table6=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x

27、00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

28、0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00void init();/*主函数的初始化声名*/void init1();/*左移显示方式的初始化声名*/void disp1();/*左移显示子程序声名*/void delay(uint z);/*延时函数声名及定义*/uchar keyscan();void display1();void display2();void display3();void display4();void display5();void display6();uc

29、har 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(keyscan()=8) display2();if(keyscan()=9) display3();if(keyscan()=10) display4();if

30、(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; temp=P3; if(temp!=0xf0) temp1=P3; P3=0x0f; temp=P3; if(temp!=0x0f) temp2=P3; temp

31、=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 : n

32、um=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=32;for(i=0;i=a;i+)/判断左移的字符个数for(j=0;j=v;j+)/向左移动的速度由变量v控制for(k=i*2;k(i*2+32);)/显示一幕P0=table1k;

33、k+; P2=table1k; k+; P1=m; m+; if(m=0x10)m=0x00; delay(1);void display2()init(); init1();/左移显示初始化int a=32;for(i=0;i=a;i+)/判断左移的字符个数for(j=0;j=v;j+)/向左移动的速度由变量v控制for(k=i*2;k(i*2+32);)/显示一幕P0=table2k; k+; P2=table2k; k+; P1=m; m+; if(m=0x10)m=0x00; delay(1);void display3()init(); init1();/左移显示初始化int a=3

34、2;for(i=0;i=a;i+)/判断左移的字符个数for(j=0;j=v;j+)/向左移动的速度由变量v控制for(k=i*2;k(i*2+32);)/显示一幕P0=table3k; k+; P2=table3k; k+; P1=m; m+; if(m=0x10)m=0x00; delay(1);void display4()init(); init1();/左移显示初始化int a=32;for(i=0;i=a;i+)/判断左移的字符个数for(j=0;j=v;j+)/向左移动的速度由变量v控制for(k=i*2;k(i*2+32);)/显示一幕P0=table4k; k+; P2=ta

35、ble4k; k+; P1=m; m+; if(m=0x10)m=0x00; delay(1);void display5()init(); init1();/左移显示初始化int a=32;for(i=0;i=a;i+)/判断左移的字符个数for(j=0;j=v;j+)/向左移动的速度由变量v控制for(k=i*2;k(i*2+32);)/显示一幕P0=table5k; k+; P2=table5k; k+; P1=m; m+; if(m=0x10)m=0x00; delay(1);void display6()init();init1();/左移显示初始化int a=32;for(i=0;

36、i=a;i+)/判断左移的字符个数for(j=0;j=v;j+)/向左移动的速度由变量v控制for(k=i*2;k0;x-)for(y=110;y0;y-);void init()/主程序初始化EA=1;/CPU开放所有中断源的中断请求EX0=1;/允许外部中断0中断EX1=1;/允许外部中断1中断IT0=1;/外部中断0采用边沿触发方式产生中断IT1=1;/外部中断1采用边沿触发方式产生中断v=15;/设置移动速度的初值void init1()/左移显示方式各变量的初始化shuz=5;shub=1;a=shuz*16+shub*8+14;P0=0;P2=0;m=0;void timerr1() interrupt 1/外部中断0的中断程序v=15;/初始化移动速度m=0x00;n=0x00;f=0x00;void timerr0() interrupt 3v=v/3;if(v=0)v=150;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁