




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO/IEC 15415:2024 EN Automatic identification and data capture techniques - Bar code symbol print quality test specification - Two-dimensional symbols
- 2025年度化工生产工厂技术许可合同协议
- 2025年城市管道天然气项目建议书
- 设备管理科设备维护与更新计划
- 提升仓库服务质量的个人策略计划
- 社区个人工作计划改善社区供水设施
- 2025年特种大型铝合金型材合作协议书
- 新闻媒体安全管理的必要性计划
- 社团交流合作的网络平台计划
- 2025年中大型重载轴承项目建议书
- 2024年河南省《辅警招聘考试必刷500题》考试题库含答案【综合卷】
- 三叉神经痛的护理问题
- 2025北京平谷初三(上)期末数学真题试卷(含答案解析)
- 2024-2025学年成都市金牛区九年级上期末(一诊)英语试题(含答案)
- 2025年高压电工资格考试国家总局模拟题库及答案(共四套)
- 2024年01月河北2024沧州银行总行科技开发部招考笔试历年参考题库附带答案详解
- 自动化电气元器件介绍与使用
- 广东2024年广东金融学院招聘专职辅导员9人笔试历年典型考点(频考版试卷)附带答案详解
- 2025年研究生考试考研英语(二204)试卷与参考答案
- DB31∕731-2020 船舶修正总吨单位产品能源消耗限额
- 商洛职业技术学院《会计信息系统单统计学》2023-2024学年第一学期期末试卷
评论
0/150
提交评论