C51简易计算器微机课设
目前实现功能:
1.末尾数置0
2.加减乘的五位数计算
3.计算结果溢出时,报错“ERROR”
4.有删除键
#include <REGX52.H>
int digit[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//0~9数字数码管的段选
int zero[]={0xff,0xc0};//0xff即数码管全灭,用作末位置0
unsigned long box[5]={0};//计算器的个十百千万位
int i;
unsigned int KeyValue; //用于定义16个按键
unsigned int KeySwitch; //用于判断按下的是数字还是符号
int w; w=0; //用于判断计算器是否该置0
//延时函数
void delay(int ms)
{int x,y;for(x= ms;x>0;x--)for(y=110;y>0;y--);
}
//显示函数void display() { if (w==0) //w初值赋为0,只有检测到有按键被按下时才为1{P2=0x01; //将前四位全灭,第五位亮0P0=zero[0];delay(10);P2=0x02; P0=zero[0];delay(10); P2=0x04;P0=zero[0];delay(10);P2=0x08;P0=zero[0];delay(10);P2=0x10;P0=zero[1];delay(10);}//当有按键被按下后,w赋为1,开始显示box列表里的值,box列表中五个值初值都置0,通过按下数字0~9来往里赋值if (w!=0){P2=0x01; //万位P0=digit[box[4]]; delay(10); P2=0x02; //千位P0=digit[box[3]]; delay(10);P2=0x04; //百位P0=digit[box[2]]; delay(10);P2=0x08; //十位P0=digit[box[1]];delay(10);P2=0x10; //个位P0=digit[box[0]];delay(10); }}
//按键函数void KeyDown(void){ int n;n=0; P3=0x0f; //定义好初值if(P3!=0x0f) //检测是否有按键被按下,查找到被按下的键,并给w赋为1{delay(20);if(P3!=0x0f){ P3=0x0f; //先检测列switch(P3){case(0X07): KeyValue=0;w=1;break;///将十六个键与keycalue联系起来,通过case(0X0b): KeyValue=1;w=1;break;///keyvalue来定义每个键的意义case(0X0d): KeyValue=2;w=1;break;case(0X0e): KeyValue=3;w=1;break;}P3=0xf0;///检测行switch(P3){case(0Xe0): KeyValue=KeyValue;w=1;break;case(0Xd0): KeyValue=KeyValue+4;w=1;break;case(0Xb0): KeyValue=KeyValue+8;w=1;break;case(0X70): KeyValue=KeyValue+12;w=1;break;}if(KeyValue==0 || KeyValue==1 || KeyValue==2 || KeyValue==3 || KeyValue==4 || KeyValue==5 || KeyValue==6 || KeyValue==7 || KeyValue==8 || KeyValue==9){KeySwitch=1;//用keyswitch来区分数字和符号,数字0-9时为状态1}while((n<50)&&(P3!=0xF0)) //检测按键是否松开{delay(100);n++;}}}}
//主函数
void main(){ unsigned long a,b,c;while(1){display(); //调用显示函数和按键函数 KeyDown();if(KeySwitch==1) //如果被按下的是数字键,往box里赋值{ for(i=4;i>0;i--) {box[i]=box[i-1];} //多个数字被按下时前面的数字左移box[0]=KeyValue; KeySwitch=0; //结束时将keyswitch置0 }
//回删减if(KeyValue==15) //按下删除键,显示屏最后一位数字被删除,其他数字依次右移一位 { for(i=0;i<4;i++) {box[i]=box[i+1];} //之前box里储存的数字依次取代右一位box[4]=0; //全部取代完后,首个数字置0KeyValue=16; //随便将KeyValue赋个新值,不然主程序一直运行进来将所有数置0}
//清0键if(KeyValue==10) //计算器清零键,box里所有储存的值清0,并且w置0,计算器末位为0 { for(i=0;i<5;i++)box[i]=0; w=0;display(); }
//加法else if(KeyValue==12) {a=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000;//个十百千万存储到a delay(10);for(i=0;i<5;i++)box[i]=0; //清空box,以便后续存储加数while(1) {display();KeyDown(); if(KeySwitch==1) //输入加数{ for(i=4;i>0;i--){box[i]=box[i-1];}box[0]=KeyValue;KeySwitch=0;}//当按下加法键以后,程序进入加法死循环中,不按等号出不去,想用删除就要重新把删除段代码添加进来,减法,除法一样。 if(KeyValue==15) { for(i=0;i<4;i++){box[i]=box[i+1];}box[4]=0;KeyValue=16;}if(KeyValue==11) break; }b=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000; //加数存储到b delay(10);c=a+b; //被加数与加数相加box[0]=c%10; //结果取余计算,返回到box中,个位数直接除10取余box[1]=c/10%10; //十位先除十,再除十取余box[2]=c/100%10;box[3]=c/1000%10;box[4]=c/10000%10;delay(10);display(); //显示结果 后续减法乘法除法过程雷同}//减法else if(KeyValue==13) {a=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000;for(i=0;i<5;i++)box[i]=0;delay(100);while(1){ display();KeyDown();if(KeySwitch==1){ for(i=4;i>0;i--){box[i]=box[i-1];}box[0]=KeyValue;KeySwitch=0;}if(KeyValue==15) { for(i=0;i<4;i++){box[i]=box[i+1];}box[4]=0;KeyValue=16;}if(KeyValue==11) break;}b=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000; delay(100);c=a-b;box[0]=c%10; box[1]=c/10%10;box[2]=c/100%10;box[3]=c/1000%10;box[4]=c/10000%10;delay(100);display();}//乘法else if(KeyValue==14) {a=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000;for(i=0;i<5;i++)box[i]=0;delay(100); while(1){ display();KeyDown();if(KeySwitch==1){ for(i=4;i>0;i--){box[i]=box[i-1];}box[0]=KeyValue;KeySwitch=0;}if(KeyValue==15) { for(i=0;i<4;i++){box[i]=box[i+1];}box[4]=0;KeyValue=16;}if(KeyValue==11) break;}b=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000;delay(100); c=a*b;box[0]=c%10; box[1]=c/10%10;box[2]=c/100%10;box[3]=c/1000%10;box[4]=c/10000%10;delay(100);display();}}}
C51简易计算器微机课设相关推荐
- 【微机课设分享】基于8086和LCD12864液晶显示仿真设计-基于8086直流电机调速控制系统设计-基于8086计数器仿真系统设计-基于8086计算器系统仿真设计-基于8086家具房间灯光控制设计
1184基于8086和LCD12864液晶显示仿真设计-设计全套资料 本设计完整的实现基于8086红外报警仿真设计,protues仿真中, 红外传感用按键模拟(红外原理也是通过高低电平来检测感知的), ...
- 基于8086的波形发生器(汇编语言微机课设)
目录 一.设计要求 二.设计方案及功能 三.元器件清单 四.原理图 五.代码 一.设计要求 采用8086/8088控制器和8位数/模转换芯片DAC0832设计实现波形发生器,编写软件程序. 基本要求: ...
- java简单计算器课程设计_java仿windows简易计算器课程设计 源码+报告
[实例简介] java仿windows简易计算器课程设计 源码+报告 课直接运行. [实例截图] [核心代码] Java课设-简易计算器 └── Java课设-简易计算器 ├── Java课程设计.d ...
- 合肥工业大学宣城校区2018年-2019年第一学期(大三上学期)物联网工程专业资料汇总(含课件、个人实验报告、实验代码、课设报告等)
我已经把所有文件都上传到GitHub."CSDN下载"和百度网盘(提取码:8r4r )上了,可以自行下载.包含的课程有:<模拟电路课程设计(含EDA)>.<硬件工 ...
- Java课设-百行代码实现简易计算器
成绩: __________ Java程序设计 工程实践 --简易计算器的设计 院. 系 计算机与软件学院 专业 信息安全 姓 名 指导教师 2022年 6 月 11 日 目录: 一. 设计简介 2 ...
- 微机原理实验8254计算机钢琴,GitHub - SincereXIA/PianoMFC: 西电微机原理课设项目,键盘电子乐器演奏程序设计(电子琴),MFC...
PianoMFC 西电微机原理课设项目,键盘电子乐器演奏程序设计(电子琴),MFC 需要连接西电微机原理实验室提供的 QTH9054 微机试验箱,使用其蜂鸣器发声,若不连接,程序会直接播放 mp3 文 ...
- C++课设 简易图像处理系统
目录 前言 一.总体设计 1.1 主要功能 1.2 UML类图 二.代码实现 2.1 父类method 2.2 子类线性增强算法 2.3 gamma校正 2.4 管理类Manage.h 2.5 选择图 ...
- 计算机微机原理心得体会,微机原理课设体会心得体会
微机原理课程设计心得体会 实得这学期通过对微机原理和微机实验学习,对微机系统和它的工作原理有了的了解. 微机实验课,总共做了十几个实验,回想起来受益匪浅,主要是加深了对计算机的一些硬件情况和运行原理的 ...
- 【C51单片机】简易计算器设计(仿真)
1.功能描述 设计一个简易计算器,模拟常见计算器的加减乘除运算功能,通过1602液晶屏来显示数字.4*4的矩阵按键来模拟计算机的按键, 2.PROTEUS中设计的电路图 3.源代码 #include ...
最新文章
- 坑你没商量!盘点Java中最常见的事故现场,你都中过哪些招?
- MariaDB Spider:实现MySQL横纵向扩展的小能手
- 第3章:分布式文件系统 HDFS
- vc6.o--fatal error C1010错误的解决
- 零拷贝机制在文件传输中的使用手法
- REVERSE-PRACTICE-BUUCTF-25
- WinForm 中 comboBox控件之数据绑定
- 广州软件性能测试培训,Loadrunner企业级性能测试课程 广州八神软件性能测试实战教程 炼数性能测试视频...
- 海康监控摄像头能做视频直播那些事!
- 缺失.NET Framework组件的解决方法
- 产品经理的简历怎么写?
- 06 第五章 一阶逻辑等值演算与推理
- 木马可以损坏计算机硬件么,台式电脑总是自动重启怎么处理
- Google Chrome显示粉红色屏幕
- Javascript代码优化的8个知识点 1
- 《微信小程序开发实战》学习笔记chapter1微信小程序人门
- Getfasta--根据Acession Number(Ac号)批量下载GenBank分子序列数据的自动化程序
- GeneXus的科技基础(GeneXus背后的理论)
- 网上下载别人的vue项目如何运行在本地
- 自动驾驶系统入门(八)- 自动驾驶仿真技术
热门文章
- 服务器维护 志愿填报时间顺延,因系统维护 西藏高考志愿填报截止时间顺延两日...
- [全流程案例]壮汉:2. 添加装饰物(Blender)
- 计算机主机房临时停电应急预案,校园网中心机房停电应急预案管理规定
- 距离差分矩阵DDM算法
- 计算机专业英语BD,计算机专业英语
- 微视频试水社交网站 渐趋移动互联应用
- bzoj2683:简单题(树状数组套CDQ分分治)
- ubuntu向日葵和Todesk连接不了的桌面管理环境问题
- oracle ora 39111,数据迁移 有几个用户 imp导入时候 报错 ORA-39111,ORA-39112 - Oracle论坛 - 51CTO技术论坛_中国领先的IT技术社区...
- 【一头扎进JMS】(4)----RabbitMQ概述