当前位置: 首页 > news >正文

项目三简易计算器 任务3-4四则运算计算器

任务描述:单片机连接8位共阳极数码管和4*4矩阵键盘,
利用矩阵键盘定义0~9数字键,并定义+、-、*、/、=等五个功能键。
编程实现两个一位十进制数的四则运算,并显示结果。

注意:与运算&&-->两个条件并列

位于运算&-->按位完成与,完成指定位置清零。

最低位清零^1111 1110

最高位清零^0111 1111

/************************* 项目名称:项目三简易计算器 任务名称:任务3-4四则运算计算器 任务描述:单片机连接8位共阳极数码管和4*4矩阵键盘, 利用矩阵键盘定义0~9数字键,并定义+、-、*、/、=等五个功能键。 编程实现两个一位十进制数的四则运算,并显示结果。 *************************/ #include<reg51.h> #include<intrins.h> //51单片机寄存器定义头文件 sbit row0=P1^0; sbit row1=P1^1; sbit row2=P1^2; sbit row3=P1^3; sbit col0=P1^4; sbit col1=P1^5; sbit col2=P1^6; sbit col3=P1^7; int n;//存放按键编号 int t;//存放运算类型编号1~+ 2~- 3~X 4~/ int m1,m2;//存放两个加数 int dis[2];//存放结果的十位和个位 int seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//定义0~9共阳极七段码,0xbf是-(负号) void key1();//等待按键按下,无限查询 void key2();//扫描按键位置,行列扫描 void key3();//处理按键请求,显示编号 void display();//显示两位结果子函数 /**********************************************/ void delay(int i) { int k,j; for(k=0;k<i;k++) for(j=0;j<100;j++); } /**********************************************/ void main() { while(1) { key1(); key2(); key3(); } } /**********************************************/ void key1() { while(1) { P1=0x0f; if(P1!=0x0f)//有变化,一定是有按键按下,导致某行某列短路 break;//退出查询 } } /**********************************************/ void key2() { P1=0xff;//行列都写1 col0=0;//清零0列 if(row0==0) n=0; if(row1==0) n=1; if(row2==0) n=2; if(row3==0) n=3; P1=0xff;//行列都写1 col1=0;//清零1列 if(row0==0) n=4; if(row1==0) n=5; if(row2==0) n=6; if(row3==0) n=7; P1=0xff;//行列都写1 col2=0;//清零2列 if(row0==0) n=8; if(row1==0) n=9; if(row2==0){m1=n;t=1;}//'+'键:保存数字1,运算类型编号1 if(row3==0){m1=n;t=2;}//'-'键:保存数字1,运算类型编号2 P1=0xff;//行列都写1 col3=0;//清零3列 if(row0==0){m1=n;t=3;}//'*'键:保存数字1,运算类型编号3 if(row1==0){m1=n;t=4;}//'\'键:保存数字1,运算类型编号4 if(row3==0) {m2=n;n=10;}//'=':保存数字2,并且按键编号10 } /**********************************************/ void key3() { if(n<10)//按下数字键,显示数字 { P2=0xfe;//1111 1110 P0=seg[n]; } else//按下等号键 display();//显示两位结果 } /**********************************************/ void display() { int i,j; switch(t) { case 1://求和 dis[0]=(m1+m2)/10;//求和并拆字得到十位显示值 dis[1]=(m1+m2)%10;//求和并拆字得到个位显示值 break; case 2://求差 if(m1>=m2)//差为正 { dis[0]=0; dis[1]=m1-m2; } else { dis[0]=10;//负号的查表值 dis[1]=m2-m1; } break; case 3://求积 dis[0]=(m1*m2)/10;//求积并拆字得到十位显示值 dis[1]=(m1*m2)%10;//求积并拆字得到个位显示值 break; case 4://求商 dis[0]=m1/m2;//个位的值 dis[1]=m1%m2*10/m2;//十分位的值 } while(1) { for(i=0,j=0xfd;i<2;i++)//1111 1101 { P2=j; P0=seg[dis[i]]; if(t==4 && i==0)//除法运算显示高位时 P0=P0 & 0x7f;//利用位于运算清零七段码最高位(dp字段),点亮小数点 delay(2); j=_cror_(j,1); } } }
http://www.rkmt.cn/news/1499790.html

相关文章:

  • 终极指南:5个实战技巧让Continue成为你的JetBrains AI编程搭档
  • Bluebeam Revu完整破解版:PDF专业编辑的终极解决方案
  • 青岛正规靠谱的防水修缮公司有哪些? - 青岛防水品牌推荐
  • 2026北京公司注册代办机构专业度排行:基于10000+案例的实测对比 - 互联网科技品牌测评
  • 2026深圳家庭/企业/长途搬迁全场景正规靠谱搬家机构名单,让搬家更省心 - 从来都是英雄出少年
  • 2026年6月最新版葫芦岛第三方CMACNAS甲醛检测治理机构口碑名单:万清CMA检测中心等5家公司深度测评万清CMA检测中心TOP1推荐 - 一修哥咨询
  • 项目三简易计算器 任务3-5六位密码锁
  • 武汉空调回收厂家排行 5家合规服务商实测对比 - 起跑123
  • AMD GPU终极指南:stable-diffusion-webui-directml如何释放你的显卡潜能
  • LLM Engine API详解:完整掌握Completion与FineTune接口使用
  • MobileOne模型性能对比:S0-S4五个版本速度与精度全面评测
  • 界面控件DevExpress WPF中文教程:Data Grid - 绑定数据
  • 2026年6月最新版黄冈第三方CMACNAS甲醛检测治理机构口碑名单:万清CMA检测中心等5家公司深度测评万清CMA检测中心TOP1推荐 - 一修哥咨询
  • PR计算题——2025
  • wgs-84高精度空间直角坐标转为CGCS2000坐标程序开发
  • 腾讯云Redis与自建方案技术经济性对比 - 领先技术探路人
  • 188数码管新版本,简单易懂
  • 2026北京公司注册代办机构实测排行:合规性+效率双维度对比(附避坑指南) - 互联网科技品牌测评
  • 重力场模型计算的布格重力异常值用于一、二等水准重力异常改正计算
  • 题解:学而思编程 降雨统计
  • 2026年6月最新版贺州第三方CMACNAS甲醛检测治理机构口碑名单:万清CMA检测中心等5家公司深度测评万清CMA检测中心TOP1推荐 - 一修哥咨询
  • Triton Inference Server自动扩缩容与负载均衡:生产环境最佳实践
  • 题解:学而思编程 优秀的排列
  • Sideloader跨平台支持对比:Linux、Windows、macOS三大平台安装与配置指南
  • 2026济南车灯实测|后浪灯改灯光升级,澳兹姆透镜夜间实景效果,后浪灯改实惠,靠谱 - Ayu8888
  • 礼品定制避坑与选型:五大实战服务商深度横评 - 品牌报告
  • Orz与其他压缩库对比:何时选择Orz最合适?
  • Apache 虚拟主机配置指南:从单站点到多站点
  • BRFlabbyTable与FlabbyListView对比:iOS与Android弹性列表实现差异终极指南
  • OpenAI最强编程助手Codex:下载安装、使用指南(含使用方式、提示技巧、趋势)