新基于51单片机的简易计算器_第1页
新基于51单片机的简易计算器_第2页
新基于51单片机的简易计算器_第3页
新基于51单片机的简易计算器_第4页
新基于51单片机的简易计算器_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、基于51单片机的简易计算器1、前言:本设计是基于51系列单片机来进行的数字计算器系统设计,可以完 成计算器的键盘输入,进行加、减、乘、除基本四则运算,并在lcd上显示相应 的结果;设计电路采用stc90c51单片机为主要控制电路,利用mm74c922作为计 算器4*4键盘的扫描ic读取键盘上的输入;显示采用字符lcd静态显示;软件 方面使用c语言编程,并用protues仿真。2、设计任务:计算器软件程序要完成以下模块的设计:(d键盘输入检测模块;(2) lcd显示模块;(3)算术运算模块;(4)错误处理及提示模块。3、主体设计部分:(1)、系统模块图:(2)、系统总流程图:4、硬件部分单片机部

2、分+矩阵键盘+1602显示如图所示为简易计算器的电路原理图。p3 口川于键盘输入,接4*4 矩阵键盘,键值与键盘的对应表如表一一所示,po 口和p2 口用于显示,p2 口用 于显示数值的高位,p。口用于显示数值的低位。r2tpi 0 pi ipi 9pi 2pi 48 w-isw-p3irgvcc,tn5 pollpetp7fpi 5mxu pi ts(wks pi呼叩 rest p2 0rjto pi p2 p2 pl内 3(ti) 四花 火十四 xtal-j 乂ml i 捌。vkc pci opdo) ra idd ra 2a5) pg 2ma) ra 始04) pa邱 pci邱国 团缪团

3、 ctvtp 4l(stgqgisj p2 5(ai4) g$gl 为 mdg因 g2gll) 声5缈1的k收) 0 omjkxl&j;kiiis ki2|丁 g g 4-2 i a 2 1a - ? 嬴三次cj-t=4五州$24 orc力rasid o o 力履$14oo2wj5ssis, o o ,swq它4耳g简易计算器电路原理图矩阵键盘有16个按键,满足对简易计算器的计算实现,显示部分采用lcd1602,笫一行显示计算的数值符号,笫二行显示计算结果。包回口口 b巨回w 。内叵巨ih 口匚回回口-z8什 y y|b . y i i /- lcd显示模块:本设计采用lcd液晶显示器来显示输

4、出数据。通过d0-d7引脚向lcd写指令 字或写数据以使lcd实现不同的功能或显示相应数据。5、软件部分#include#include#define uchar unsigned charsbit lcden=p27;sbit lcdrs=p2 6;sbit lcdrw=p25;sbit icdbf=po7;uchar temp, key, i, j, flag, fh, k;long a, b, c;uchar code table = l, 2, 3, 0,4, 5, 6, 0,7, 8, 9, 0,0, 0, 0, 0);uchar code table2 口二123+456-789*

5、000/;void delay(uchar ms)(uchar x, y;for(x=ms;x0;x-)for(y=110;y0;y);)/*对lcd 1602的操作 bit busy (void) 判断忙碌bit res;lcdrs=o;lcdrw=l;lcden=l;_nop_();_nop_();res=lcdbf;lcden=o;return res;)void write_inst (uchar cmd) 写命令(while (busy ()=1); 忙碌就等待lcdrs=0;lcdrw=0;lcden=0;_nop_();_nop_();p0=cmd;_nop_();_nop_()

6、;lcden=l;_nop_();nop_();lcden=o;)void write_com(uchar com) 写地址(write_inst(com 0x80);)void write_date (uchar dat) 写数据(while (busy () =1);lcdrs=l;lcdrw=0;lcden=0;p0=dat;_nop_();_nop_();lcden=l;_nop_();_nop_();lcden=0;void init () 初始化lcden=l;write.inst (0x38); /显示 8 位 2 行delay (5);write_inst (0x0c);显示开

7、,光标关,不闪烁delay (5);write_inst (0x06); 增量方式不位移delay (5);write_inst (0x80); 检测忙碌信号delay (5);write_inst(0x01);/delay (5);)/*键盘扫描*/void keyscan ()键盘扫描p3=0xfe;if(p3!=0xfe)delay (100);if (p3!=0xfe)temp=p3&oxfo;switch(temp)(case oxeo:key=o;break;case oxdo:key=l;break;case oxbo:key=2;break;case 0x70:key=3;br

8、eak;)while(p3!=0xfe);if (key-0 key1 key-2)(if(j!=o)(write_inst(0x01);尸0;if(flag=o)(a=a*10+tablekey;b=b*10+tablekey;write_date(table2key);)else(if (k=0)(flag=l;k= 1;fh= 1;write_date(table2key);)p3=0xfd;if(p3!=0xfd)delay(100);if (p3!二oxfd)temp=p3&oxfo;switch(temp)(case oxeo:key=4;break;case oxdo:key=5

9、;break;case oxbo:key=6;break;case 0x70:key=7;break;)while(p3!=0xfd);if (key4 key5 key-6)(if(j!=o)(write_inst(0x01);尸0;if(flag=o)(a=a*10+tablekey;if(flag=l)b=b*10+tablekey;write_date(table2key);)elseif (k=0)(flag=l;k=l;fh=2;write_date(table2key);)p3=0xfb;if(p3!=0xfb)delay(100);if(p3!=0xfb)temp=p3&oxf

10、o;switch(temp)(case oxeo:key=8;break;case oxdo:key=9;break;case oxbo:key=10;break;case 0x70:key=ll;break;)while(p3!=oxfb);if (key-8 key9 key-10)(if(j!=o)(%tite_inst(0x01);户0;if(flag=o)(a=a*10+tablekey;b=b*10+tablekey;write_date(table2key);else(if (k=0)(flag=l;k=l;fh= 3;write_date(table2key);)p3=0xf7

11、;if(p3!=0xf7)(delay(100);if(p3!=0xf7)temp=p3&0xf0;switch(temp)case oxeo:key=12;break;case oxdo:key=13;break;case oxbo:key=14;break;case 0x70:key=15;break;)while(p3!=0xf7);switch(key)(case 12: write_inst (0x01);a=0;b=0;flag=0;fh=o;j=0;k=0; break;case 13:if(flag=o)(a=a*10;write_date(0x30);pl=0;else if

12、 (flag=l)b=b*10;write_date(0x30); break;case 14:j= 1;if(fh=l)(write_com(0x4f);write_inst(0x04);c=a+b;while(c!=0)write_date(0x30+c%10);c=c/10;write_date(0x3d);a=0;b=0;flag=0;fh=0;k=0;)else if(fh=2)(write_com(0x4f);write_inst(0x04);if(a-b)0)c=a-b;elsec=b-a;if (c0)write_date(0x30+0);while(c!=0)(write_d

13、ate(0x30+c%10);c=c/10;)if (a-b)*(-l) 0)write_date(0x2d);write_date(0x3d);a=0;b=0;flag=0;fh=0;k=0;else if(fh=3)(write_com(0x4f);write_inst(0x04);c=a*b;if (c0)write_date(0x30+0);while(c!=0)write_date(0x30+c%10);c=c/10;)write_date(0x3d);a=0;b=0;flag=o;fh=o;k=0;)else if(fh=4)(write_com(0x4f);write_inst(0x04);i=0;c=(long) (float) a/b) *1000); 计算 c 的 数据if(c=0)write_date(0x30+0);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;fh=0;k=0; break;case 15:if (k=0)(wri

温馨提示

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

评论

0/150

提交评论