STC 51单片机 开发板 计算器 LCD1602显示 浮点计算 设计 报告课件_第1页
STC 51单片机 开发板 计算器 LCD1602显示 浮点计算 设计 报告课件_第2页
STC 51单片机 开发板 计算器 LCD1602显示 浮点计算 设计 报告课件_第3页
STC 51单片机 开发板 计算器 LCD1602显示 浮点计算 设计 报告课件_第4页
STC 51单片机 开发板 计算器 LCD1602显示 浮点计算 设计 报告课件_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、第37页共37页嵌入式系统原理及应用课程设计报告姓名:学号:指导老师: 目录引言3第一章硬件介绍41.1单片机介绍41.2 设计所用开发板的介绍51.3 LCD1602的原理及其应用71.3.1开发板硬件连接关系71.3.2液晶屏LCD1602的功能及应用81.3.31602LCD的指令说明及时序91.3.4 1602LCD的RAM地址映射及标准字库表111.4开发板矩阵键盘原理及应用12第二章设计思路、仿真及调试152.1 设计方法152.2 硬件简介152.3 软件设计152.3.1 矩阵键盘152.3.2 LCD160222第三章设计结果24第四章设计总结27附录28引言目前单片机渗透到

2、我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴: (1)在智能仪器仪表上的应用 (2)在工业控制中的应

3、用 (3)在家用电器中的应用 (4)在计算机网络和通信领域中的应用 (5)单片机在医用设备领域中的应用 (6)在各种大型电器中的模块化应用 (7)单片机在汽车设备领域中的应用 此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。随着智能化的逐步提高,单片机在我们生活中得到了越来越广泛的应用,其是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计

4、算机系统。本设计要制作的就是单片机于生活中最为常见的异种应用简易计算器。本简易计算器是在普中HC6800 V3.0开发板的基础上,利用开发板上已有的资源设计开发的,本开发板上有着相对丰富的硬件资源,可以较好的完成一些设计。本设计所用的单片机为STC90C516RD+,具体的设计要求如下:通过矩阵键盘检测按下的数字和运算符号,在LCD1602液晶显示屏上面显示运算的结果,在第一行上显示输入的计算式,为左对齐;在第二行显示等于号以及最后的运算结果,为了较好的显示效果和使用的效果,第二行的计算结果显示设计为右对齐。这样在LCD1602的显示屏上可以有较好的显示效果,计算效果比较分明。总体上来说,作为

5、本嵌入式原理课程的设计作业,本设计的实现难度不大。第一章硬件介绍如上所述,本课程的课程设计是在普中的单片机开发板上面完成的,可以直接使用开发板上面的硬件设计,相对于普通的硬件设计而言,省去了很多硬件设计上面的过程和时间,提高了本设计的效率,加快了设计的流程。但在相应的软件设计之前,我们需要对开发板的硬件设计有着清楚的了解,以免在设计过程中出现一些不必要的麻烦和错误,影响设计进度。下面开始即对开发板的硬件连接做一些详细而必要的介绍。1.1单片机介绍单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控

6、制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。本设计所使用的单片机为STC的STC90C516RD。根据STC官方的介绍,本单片机有着以下特点:STC90C516RD+系列单片机是宏晶科技推出的新一代超高速/低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择,内部集成MAX810专用复位电路,时钟频率在12MHz以下

7、时,复位脚可直接接地。1.增强型6 时钟/ 机器周期,12 时钟/ 机器周期 8051 CPU2.工作电压:5.5V - 3.8V(5V 单片机)/3.8V - 2.4V(3V 单片机)3.工作频率范围:0-40MHz,相当于普通8051的 080MHz.4.用户应用程序空间 4K/6K/7K/8K/10K/12K/13K/16K/32K/40K/48K/56K/ 61K/字节5.片上集成 1280字节/512/256字节 RAM6.通用I/O口(35/39 个),复位后为: P1/P2/P3/P4 是准双向口/ 弱上拉(普通8051 传统I/O 口)P0口是开漏输出,作为总线扩展用时,不用加

8、上拉电阻,作为I/O 口用时,需加上拉电阻。7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器 / 仿真器可通过串口(P3.0/P3.1)直接下载用户程序,8K 程序3 - 5 秒即可完成一片8.EEPROM 功能9.看门狗10.内部集成MAX810专用复位电路,外部晶体12M以下时,可省外部复位电路,复位脚可直接接地。11.共3个16位定时器/计数器,其中定时器0还可以当成2个8位定时器使用12.外部中断4路,下降沿中断或低电平触发中断,Power Down模式可由外部中断低电平触发中断方式唤醒13.通用异步串行口(UART),还可用定时器软件实现多个UART14.工作温度范

9、围:0-75/-40-+8515.封装:LQFP-44,PDIP-40,PLCC-44 1.2 设计所用开发板的介绍本课程设计是在开发板普中HC6800 V3.0基础上完成的,开发板的外观图如图1.1所示。本开发板在硬件上配置了以下硬件:1五线四相步进电机216*16点阵3LCD1602液晶显示屏4.1个静态数码管+8个动态数码管5.四线双极性步进电机6.4*4矩阵键盘+8个独立按键7.TFT彩屏/12864/192648.RS485通信9.继电器10.蜂鸣器11.AD/DA/光敏/热敏12.18B20温度传感器13.红外14.三色交通灯本实验将在开发板现有的硬件基础上设计一个简易的计算器,按

10、照设计要求,我们将会用到开发板上外接的LCD1602液晶显示屏、矩阵键盘。因为设计周期的限制,将不加其他的功能,比如蜂鸣器等。开发板单片机部分的连接关系如下图所所示:图1.1设计所用开发板图1.2开发板MCU的硬件连接1.3LCD1602的原理及其应用1.3.1开发板硬件连接关系开发板上LCD1602这一部分的硬件连接原理图如图1.1所示。图1.3开发板LCD1602的硬件连接关系可见,本开发板上LCD1602的硬件连接设计相对于常见的电路设计而言,并没有什么相对特殊的地方,可以硕士比较常见的设计。液晶屏的数据端口与单片机的P0口相连接,VCC和GND端口均有设计连接。此外通过调节变阻器RJ6

11、可以调节液晶显示屏的图像对比度。图1.4调节图像对比度1.3.2液晶屏LCD1602的功能及应用LCD1602已很普遍了,具体介绍我就不多说了,市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样。LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,本设计所用的LCD1602为带有背光的16脚。其中各引脚接口说明如表1-1所示:表1-

12、1 LCD1602各引脚功能编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时

13、进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。1.3.31602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表1-2所示:表1-2控制命令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开

14、/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:

15、屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF

16、:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。读写操作时序如图1.5的a、b所示:aLCD1602读写操作时序bLCD1602读写操作时序图1.6 LCD1602读写操作时序1.3.4 1602LCD的RAM地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图1.5是1602的内部显示地址。图1.6 1602LCD内部显示地址例如第二行第一个字符的地址是40H,那么是否直接写入40H

17、就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是010

18、00001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”图1.7字符代码与图形对应图1.4开发板矩阵键盘原理及应用本设计需要使用开发板上面的按键完成数据的输入,需要用到开发板上的4*4的矩阵键盘,以完成作为计算器的数字19以及+、*、/的输入。本开发板的矩阵键盘的硬件连接关系如下图所示。图1.8矩阵键盘的硬件连接关系可见本开发板的硬件上,矩阵键盘通过和单片机的P11口连接,检测按键的按下。按键需要完成的是全部10个数字的输入和运算符号的输入,相应的按键分配情况如下表所示。表1-3按键位置设计789/456*123-CE0=+矩阵键盘工作原理:由于按键没有接

19、地,4行4列正好占用8个I/O如果4行我们送 P3.0到P3.3送入0 1 1 1 然后去读取 4列的值,如果P3.0的按键按下那么P3.4-P3.7的值等于 0 1 1 1,假如是第2个键按下的话那么读回来的值是 1 0 1 1 ,如果第3个键按下去读回来的值是 1 1 0 1 ,如果第4个键按下去读回来的值是 1 1 1 0 ,如果没有键按下去读回来就是1 1 1 1。所以我们就根据读回来的值来判断按下去的是那个键。当然这是对P3.0这一行,因为矩阵键盘是扫描的,所以下次把P3.0 给1 P3.1 给0对第2行,陆续的第3 行第4行, 0111 1011 1101 1110 而每次都去从新

20、扫描一遍列值列有4个值,以确定是那个键按下。无论何时任何一个时间有一个按键被按下就跳出循环。当然不可能有2个键刚好一起按下你的手没有这么好的力度,就算有2个键一起按键,程序也有先后检测的顺序,只能检测一个后面的检测不到。根据实验资料上的表述,开发板在设计时,在使用矩阵键盘时需要按照以下要求操作:(1)拔下1602下面的JP165以及通过排线将JP8和JP4连接起来。效果如下图所示。图1.9开发板准备工作主要时由于其他的硬件连接的原因,需要拔下JP165。在原理图中,JP165的连接如下所示:为了正常的使用矩阵键盘,我们按照开饭的设计拔下JP165,连接好相应的引脚。图1.10 JP165的硬件

21、连接第二章设计思路、仿真及调试2.1 设计方法本电路设计采用STC90C516RD单片机为核心,利用晶振产生的时钟脉冲信号,利用液晶屏LCD1602显示计算及其时间信息,通过对STC90C516RD单片机的编程控制液晶屏LCD1602的显示。显示计算和简易计算的信息同在LCD1602,通过按键切换选择。外部的矩阵键盘作为简易计算器的数值和计算方式的输入。2.2 硬件简介本系统以STC90C516RD单片机为核心,本系统选用12MHZ的晶振,使得单片机有合理的运行速度。起振电容30pF对振荡器的频率高低、振荡器的稳定性和起振的快速性影响较合适,复位电路为按键高电平复位。图2.1单片机复位电路设计

22、当复位按键按下之后,HRST接到高电平VCC。在按下复位健之前,三极管Q32TY时截止的。当HRST输入高电平之后,三极管导通,LRST的信号引脚输入高电平。完成对单片机的复位。2.3 软件设计本电路软件设计采用C语言编写程序(具体程序在附件中给出)。程序设计主要包括简易计算的编程,按键编程,液晶屏LCD1602的显示编程。2.3.1矩阵键盘void keyscan() / 键盘扫描程序P1=0xfe; /1111 1110if(P1!=0xfe) delay(20); /延迟20ms if(P1!=0xfe) temp=P1&0xf0; switch(temp) case 0xe0:num=

23、0;break; case 0xd0:num=1;break; case 0xb0:num=2;break; case 0x70:num=3;break; while(P1!=0xfe); if(num=0|num=1|num=2)/如果按下的是7,8或9 if(j!=0) write_com(0x01); j=0; if(flag=0)/没有按过符号键 a=a*10+tablenum; else/如果按过符号键 b=b*10+tablenum; else/如果按下的是/ flag=1; fuhao=4;/4表示除号已按 i=table1num; write_date(0x30+i);P1=0

24、xfd;/1111 1101if(P1!=0xfd) delay(5); if(P1!=0xfd) temp=P1&0xf0; switch(temp) case 0xe0:num=4;break;case 0xd0:num=5;break; case 0xb0:num=6;break; case 0x70:num=7;break; while(P1!=0xfd); if(num=4|num=5|num=6&num!=7)/如果按下的是4,5或6 if(j!=0) write_com(0x01); j=0; if(flag=0)/没有按过符号键 a=a*10+tablenum; else/如果

25、按过符号键 b=b*10+tablenum; else/如果按下的是/ flag=1; fuhao=3;/3表示乘号已按 i=table1num; write_date(0x30+i);P1=0xfb;if(P1!=0xfb) delay(5); if(P1!=0xfb) temp=P1&0xf0; switch(temp) case 0xe0:num=8;break; case 0xd0:num=9;break; case 0xb0:num=10;break; case 0x70:num=11;break; while(P1!=0xfb); if(num=8|num=9|num=10)/如果

26、按下的是1,2或3 if(j!=0) write_com(0x01); j=0; if(flag=0)/没有按过符号键 a=a*10+tablenum; else/如果按过符号键 b=b*10+tablenum; else if(num=11)/如果按下的是- flag=1; fuhao=2;/2表示减号已按 i=table1num; write_date(0x30+i);P1=0xf7;/1111 0111if(P1!=0xf7) delay(5); if(P1!=0xf7) temp=P1&0xf0; switch(temp) case 0xe0:num=12;break; case 0x

27、d0:num=13;break; case 0xb0:num=14;break; case 0x70:num=15;break; while(P1!=0xf7); switch(num) case 12:write_com(0x01);a=0;b=0;flag=0;fuhao=0;/按下的是清零 break; case 13: /按下的是0 if(flag=0)/没有按过符号键 a=a*10; write_date(0x30); P1=0; else if(flag=1)/如果按过符号键 b=b*10; write_date(0x30); break; case 14:j=1; if(fuha

28、o=1)write_com(0x80+0x4f);/按下等于键,光标前进至第二行最后一个显示处 write_com(0x04); /设置从后住前写数据,每写完一个数据,光标后退一格 c=a+b; while(c!=0) write_date(0x30+c%10); c=c/10; write_date(0x3d); /再写= a=0;b=0;flag=0;fuhao=0; else if(fuhao=2)write_com(0x80+0x4f);/光标前进至第二行最后一个显示处 write_com(0x04); /设置从后住前写数据,每写完一个数据,光标后退一格 if(a-b0) c=a-b;

29、 else c=b-a; while(c!=0) write_date(0x30+c%10); c=c/10; if(a-b0) write_date(0x2d); write_date(0x3d); /再写= a=0;b=0;flag=0;fuhao=0; else if(fuhao=3)write_com(0x80+0x4f); write_com(0x04); c=a*b; while(c!=0) write_date(0x30+c%10); c=c/10; write_date(0x3d); a=0;b=0;flag=0;fuhao=0; else if(fuhao=4)write_c

30、om(0x80+0x4f); write_com(0x04); i=0; c=(long)(float)a/b)*1000); while(c!=0) write_date(0x30+c%10); c=c/10; i+; if(i=3) write_date(0x2e); if(a/b=0) write_date(0x30); write_date(0x3d); a=0;b=0;flag=0;fuhao=0; break; case 15:write_date(0x30+table1num);flag=1;fuhao=1; break; 2.3.2 LCD1602LCD1602需要通过单片机引

31、脚向液晶显示屏中输入数据和命令,相应的程序设计如下:void write_com(uchar com) / 写指令函数P0=com; /com指令付给P0口rs=0;rw=0;e=0;check();e=1;void write_date(uchar date) / 写数据函数 P0=date;rs=1;rw=0;e=0;check();e=1;初始化程序设计如下:void init() /初始化 num=-1;e=1; /使能信号为高电平write_com(0X01);/清屏delay(1);write_com(0x38); /8位,2行delay(1);write_com(0x0c); /

32、显示开,光标关,不闪烁*/delay(1);write_com(0x06); /增量方式不移位delay(1);write_com(0x80); /检测忙信号delay(1);write_com(0x01); /显示开,光标关,不闪烁delay(1);num_1=0;i=0;j=0;a=0; /第一个参与运算的数b=0; /第二个参与运算的数c=0;flag=0; /flag表示是否有符号键按下,fuhao=0; / fuhao表征按下的是哪个符号第三章设计结果通过在keil4中编译通过,如图3.1所示,将生成的.hex文件下载到开发板上的单片机内运行。图3.1程序编译通过在开发板上完成相应简

33、单的加减乘除运算效果如下所示:a.加法运算 b.减法运算c.乘法运算d.除法运算图3.2设计效果由于变量的内型决定了,当数据的位数过多时,程序的计算会出现一些错误,比如,当计算的位数过长时,会出现显示结果乱码,现象如图3.3所示。图3.3液晶显示屏显示乱码从总体上来说,本设计基本实现了预期简易计算器的功能,能够实现一些简单的加减乘除的运算。当数据过大时显示的乱码可能时数据类型的原因,也有可能是其他原因造成的,这里便不做具体深入的分析和探讨。第四章设计总结在用单片机实现简易计算的设计中使用到了STC的单片机、LCD1602及其4*4键盘。STC的单片机是目前使用相对比较广泛的51单片机,作为单片

34、机的入门是一个非常合适的选择,对于研究生阶段来说,是一个比较熟悉的硬件了。4*4的矩阵键盘也是有用比较广泛的硬件了,是一种比较常见的输入方式,1602液晶显示屏对于51单片机来说是比较合适的组合,虽然使用的功能比较有限,但是在51单片机的硬件条件下是比较好的选择。为了更好的使用体验,之后可以加入蜂鸣器和其他模块,当矩阵键盘的按键按下时,蜂鸣器发声,提示按键按下,一定程度上可以降低计算器在使用过程中出现的误操作。此外,也可以在现有的计算器的基础上加上时钟等其他功能,并通过按键进行状态和功能的切换,比加上18B20温度传感器,检测当时环境中的温度,加入时钟显示当时的日期和时间等。在设计过程中我通过在网上和图书馆查阅资料,收集了关于单片机和液晶屏LCD1602显示方面的资料,通过对这些资料的学习,我了解了单片机的基本结构和单片机在生活和生产中所发挥的作用;液晶屏LCD1602的原理和使用。本次设计完成的主要工作和任务如下:对设计方案的理论研究,单片机的合理选型,

温馨提示

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

评论

0/150

提交评论