lcd1602计算器.doc_第1页
lcd1602计算器.doc_第2页
lcd1602计算器.doc_第3页
lcd1602计算器.doc_第4页
lcd1602计算器.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1.实验目的。1、掌握单片机定时器、中断、键盘扫描、动态显示及数值计算的综合运用能力;2、掌握编程的运用能力;3、设计一只简易的16键计算器。2实验内容。图5-1 简易16键计算器编程实现图5-1的简易16键4位十进制整数计算器的功能。要求:1设计4*4的键盘,其中10个数字键09,其余6个为“+” “-” “*”“/” “=”和“C”2设计4位LED接口电路或LCD显示电路3实现2位数的简单运算编程提示:1、定时显示开辟一显示缓冲区,显示中断程序定时读取缓冲区显示各位数字,每位显示2.5ms,显示4位需要10ms,也就是显示的刷新频率是100Hz。这样既保证亮度又不闪烁,同时CPU还有足够时间做其他事情。2、键盘中断扫描利用键盘中断扫描程序,读出按键的键码,存入键盘缓冲区,供主程序读取。3、计算器的主程序读取键盘缓冲区的键码,驱动计算器的运行。 4、计算中需要十进制与十六进制(或二进制)转化。3、系统硬件设计电路图矩阵键盘的硬件接线仿真图LCD1602的接线仿真图P0.0P0.7引脚接lcd的D0-D7,P3口接矩阵键盘。单片机的P2.4、P2.0、P2.3脚分别接到LCD的RS、R/W、E管。整体电路图为:显示电路,LCD1602A的引脚详细介绍: 采用LCD1602A来显示,要求能显示两行。它的引脚分别接到单片机的P0.0P0.7引脚;RS、R/W、E管脚分别接到单片机的P2.4、P2.0、P2.3 。具体连接见后面的电路图。以下是1602的16进制ASCII码表4、 软件设计。包含程序主框图,所有程序。分析可知共分为七个模块:键盘扫描部分,定义各个位置上的键值部分,延迟部分,存贮部分,液晶显示部分,运算部分,动态显示部分。运用了proteus软件仿真电路,使用keil软件进行程序的编写与调试。Keil软件编写过程截图:Proteus软件仿真电路图编写过程截图:主程序流程图如下:判断是否有键按下否有按下数字键则将键值存入指定内存单元,并在液晶上显示出来,若是第二次则须完成四则运算并将结果保存在指定内存单元按下加减乘除四个功能按键时,将数码管显示清零,以等待下一个数字键值输入若按下的是等号键时,则要将运算结果在数码管上显示出来液晶显示电路,将各种输入值和运算结果显示出来键盘扫描代码:#include #define uint unsigned int #define uchar unsigned charsbit lcden=P23; sbit rs=P24;sbit rw=P20;sbit busy=P07;char i,j,temp,num,num_1;long a,b,c; float a_c,b_c;uchar flag,fuhao; uchar code table=7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0;uchar code table1=7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0x2b-0x30;void delay(uchar z) uchar y;for(z;z0;z-) for(y=0;y0) c=a-b; 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_com(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; main()init();while(1) keyscan();运行后的截图:5、请写出实验过程中曾出现的问题和你的解决方法,你对实验有何感想和体会?一开始,看到实验要求,可以使用八位数码管和lcd1602进行显示数据,我就想着使用lcd1602进行显示数据的了,因为虽然使用数码管显示比较简单,但是数码管一共就只有八位,除去运算符号和结果之外能进行的显示就只有一两位。所以使用lcd602可以进行两行数据显示,这样看起来比较简单明了。一开始我想着使用实物板子进行操作的,可是代码在仿真的时候可以,就是烧进板子之后就是不行,没按下一次按键就会把前面的一位数据给覆盖,而且控制的显示位置也不行,可是在仿真的时候都没出现过上述的问题,所以在尝试了两天之后我放弃使用实物板子进行试验,转而使用了仿真,可能失败的原因使自己对自己的板子不是经常的去勤加练习去熟悉板子。我仿真的接线图与实物板子是大致相同的,所以我一开始就是按照仿造别人的代

温馨提示

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

评论

0/150

提交评论