51单片机简单计算器实现(100行)附源码

这篇具有很好参考价值的文章主要介绍了51单片机简单计算器实现(100行)附源码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 不引流,项目最后附上本项目百行源码!!

如果对你有帮助不妨点个赞!

本项目使用:51单片机矩阵键盘四位数码管

使用LCD显示的思路相差不大,由于是仿真,包容性比较强,所以还有很大优化空间

先上仿真图!

51单片机计算器程序代码,单片机,51单片机,单片机,c语言

先上代码,看不太明白的接着往下看

#include <REGX52.H>		//程序核心:始终显示num,操作改变num
void display(int num1);			//显示函数
void DelayXms(unsigned int x);	//延时函数
void keyScan();					//按键扫描
void keyAdd();					//数字多位输入
void pd();						//判断
int n1, n2, n3, n4, numKey=10000, num=0, num0=0;//显示的个十百千位  键值,显示值,存储值1
char fuhao='0',fuhao0='0';		//键入的符号值,存储的符号值
unsigned char duan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void main(){
	while(1){
		keyScan();				//扫描键值
		pd();					//判断键值情况
		display(num);			//显示函数
	}
}
void keyAdd(){              //实现键入多位数的效果
	if(numKey<10000){
		num=num*10+numKey;
		numKey=10000;
	}
}
void pd(){
	keyAdd();				//判断为数字,则为数字输入
	if(fuhao=='c'){			//清零
		num=0;
		num0=0;
		fuhao0='0';
		fuhao='0';
	}
	if(fuhao=='+'){			//加法
		fuhao0='+';			//将符号'+'存到变量fuhao0
		fuhao='0';			//符号清零
		num0=num;			//将加数0存到变量num0
		num=0;
	}
	if(fuhao=='-'){			//减法		
		fuhao0='-';
		fuhao='0';
		num0=num;
		num=0;
	}	
	if(fuhao=='*'){			//乘法		
		fuhao0='*';
		fuhao='0';
		num0=num;
		num=0;
	}	
	if(fuhao=='/'){			//除法
		fuhao0='/';
		fuhao='0';
		num0=num;
		num=0;
	}
	if(fuhao=='='){			//检测到符号为等号,则进行运算
		if(fuhao0=='+')num=num0+num;
		else if(fuhao0=='-')num=num0-num;
		else if(fuhao0=='*')num=num0*num;
		else if(fuhao0=='/')num=num0/num;
		fuhao='0';
		num0=0;
	}
}
void keyScan(){
	P3=0xef;//1110 1111
	if(!P3_3){numKey=7;while(!P3_3);}if(!P3_2){numKey=8;while(!P3_2);}if(!P3_1){numKey=9;while(!P3_1);}if(!P3_0){fuhao='+';while(!P3_0);}
	P3=0xdf;
	if(!P3_3){numKey=4;while(!P3_3);}if(!P3_2){numKey=5;while(!P3_2);}if(!P3_1){numKey=6;while(!P3_1);}if(!P3_0){fuhao='-';while(!P3_0);}
	P3=0xbf;
	if(!P3_3){numKey=1;while(!P3_3);}if(!P3_2){numKey=2;while(!P3_2);}if(!P3_1){numKey=3;while(!P3_1);}if(!P3_0){fuhao='*';while(!P3_0);}
	P3=0x7f;
	if(!P3_3){fuhao='c';while(!P3_3);}if(!P3_2){numKey=0;while(!P3_2);}if(!P3_1){fuhao='=';while(!P3_1);}if(!P3_0){fuhao='/';while(!P3_0);}
}
void display(int num1){        //数码管动态显示
	n4=num1%10;
	n3=num1/10%10;
	n2=num1/100%10;
	n1=num1/1000%10;
	P2=0x01;
	P0=duan[n1];
	DelayXms(4);
	P2=0x02;
	P0=duan[n2];
	DelayXms(4);
	P2=0x04;
	P0=duan[n3];
	DelayXms(4);
	P2=0x08;
	P0=duan[n4];
	DelayXms(4);
}
void DelayXms(unsigned int x)		//@12.000MHz
{	unsigned char i, j;
	while(x--)
	{	i = 2;
		j = 239;
		do{while (--j);
		}while (--i);
	}
}

        实际上有一定编程基础的同学借助代码里的注释应该都能看明白,单片机程序要考虑很多问题,例如数码管的显示需要调动cpu资源,所以在程序的设计上就不能面向过程,而是采用如上面代码所示对各种情况做判断。判断键值,改变不同的参数,通过各种处理函数达到计算器的目的。

        我个人比较菜,喜欢使用全局变量,个人感觉比较直观,喜欢用指针的大神轻喷。

        技术能力有限,欢迎各位在评论区交流指正,使用以下GitHub链接可以直接下载。欢迎大家点赞支持。GitHub - biexuhao/51-jisuanqi: 比较简短的一种实现加减乘除计算功能的计算器,基于51单片机,使用数码管显示

为了方便观看,下面将各个功能分开列出来:

头文件引入,函数声明,定义变量

#include <REGX52.H>		//程序核心:始终显示num,操作改变num
void display(int num1);			//显示函数
void DelayXms(unsigned int x);	//延时函数
void keyScan();					//按键扫描
void keyAdd();					//数字多位输入
void pd();						//判断
int n1, n2, n3, n4, numKey=10000, num=0, num0=0;//显示的个十百千位  键值,显示值,存储值1
char fuhao='0',fuhao0='0';		//键入的符号值,存储的符号值
unsigned char duan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

主函数

void main(){
	while(1){
		keyScan();				//扫描键值
		pd();					//判断键值情况
		display(num);			//显示函数
	}
}

多位数字的键入实现函数

void keyAdd(){
	if(numKey<10000){
		num=num*10+numKey;
		numKey=10000;
	}
}

键值判断函数

void pd(){
	keyAdd();				//判断为数字,则为数字输入
	if(fuhao=='c'){			//清零
		num=0;
		num0=0;
		fuhao0='0';
		fuhao='0';
	}
	if(fuhao=='+'){			//加法
		fuhao0='+';			//将符号'+'存到变量fuhao0
		fuhao='0';			//符号清零
		num0=num;			//将加数0存到变量num0
		num=0;
	}
	if(fuhao=='-'){			//减法		
		fuhao0='-';
		fuhao='0';
		num0=num;
		num=0;
	}	
	if(fuhao=='*'){			//乘法		
		fuhao0='*';
		fuhao='0';
		num0=num;
		num=0;
	}	
	if(fuhao=='/'){			//除法
		fuhao0='/';
		fuhao='0';
		num0=num;
		num=0;
	}
	if(fuhao=='='){			//检测到符号为等号,则进行运算
		if(fuhao0=='+')num=num0+num;
		else if(fuhao0=='-')num=num0-num;
		else if(fuhao0=='*')num=num0*num;
		else if(fuhao0=='/')num=num0/num;
		fuhao='0';
		num0=0;
	}
}

矩阵键盘扫描函数

void keyScan(){
	P3=0xef;//1110 1111
	if(!P3_3){numKey=7;while(!P3_3);}if(!P3_2){numKey=8;while(!P3_2);}if(!P3_1){numKey=9;while(!P3_1);}if(!P3_0){fuhao='+';while(!P3_0);}
	P3=0xdf;
	if(!P3_3){numKey=4;while(!P3_3);}if(!P3_2){numKey=5;while(!P3_2);}if(!P3_1){numKey=6;while(!P3_1);}if(!P3_0){fuhao='-';while(!P3_0);}
	P3=0xbf;
	if(!P3_3){numKey=1;while(!P3_3);}if(!P3_2){numKey=2;while(!P3_2);}if(!P3_1){numKey=3;while(!P3_1);}if(!P3_0){fuhao='*';while(!P3_0);}
	P3=0x7f;
	if(!P3_3){fuhao='c';while(!P3_3);}if(!P3_2){numKey=0;while(!P3_2);}if(!P3_1){fuhao='=';while(!P3_1);}if(!P3_0){fuhao='/';while(!P3_0);}
}

数码管动态显示函数

void display(int num1){
	n4=num1%10;
	n3=num1/10%10;
	n2=num1/100%10;
	n1=num1/1000%10;
	P2=0x01;
	P0=duan[n1];
	DelayXms(4);
	P2=0x02;
	P0=duan[n2];
	DelayXms(4);
	P2=0x04;
	P0=duan[n3];
	DelayXms(4);
	P2=0x08;
	P0=duan[n4];
	DelayXms(4);
}

最后是延时函数

void DelayXms(unsigned int x)		//@12.000MHz
{	unsigned char i, j;
	while(x--)
	{	i = 2;
		j = 239;
		do{while (--j);
		}while (--i);
	}
}

      文章来源地址https://www.toymoban.com/news/detail-778854.html


到了这里,关于51单片机简单计算器实现(100行)附源码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于AT89C51单片机的计算器设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87759134?spm=1001.2014.3001.5503 源码获取 主要内容: 本次设计所提出的一种基于单片机技术的简易计算器的方案,能更好的解决计算机计算的问题,随着数字生活的到来,单片机在生活中越来越重要,它

    2024年02月03日
    浏览(43)
  • 基于AT89C51单片机四位加法计算器的设计

    1.设计任务 利用AT89C51单片机为核心控制元件,设计一个四位加法计算器,设计的系统实用性强、操作简单,实现了智能化、数字化。 1)、通过4*4矩阵键盘输入数字及运算符; 2)、可以进行4位十进制数以内的加法 运 算。如果计算结果超出四位数,则全部显示“E ” LED灯亮

    2024年02月04日
    浏览(48)
  • 基于AT89C51单片机的简易计算器的设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87755299?spm=1001.2014.3001.5503 源码获取 本设计是以单片机AT89C51为核心的简易计算器设计,要通过芯片AT89C51实现计算器程序运行来完成加、减、乘和除的简单计算功能。 基本要求: 1、采用软件设计与

    2024年02月03日
    浏览(57)
  • 【普中】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频)

    【普中开发板】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频) Proteus 仿真:Proteus 8.16(有低版本) 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:P04 普中开发板实验设计 本设计旨在设计一个基于51单片机的简易计算器仿真设计。 功能要求

    2024年02月02日
    浏览(58)
  • 单片机实现简易计算器功能,附有解析与代码

    目录 首先分为根据要实现的功能来选择硬件和软件: 硬件部分 软件部分 输入部分: 计算部分: 连续计算: 源代码示例: 主函数: 键盘输入: LCD1602显示: 蜂鸣器: 延时函数: 首先我们要实现的功能有:多位显示,小数计算,连续计算,符号按错修改,, 用到LCD1602显示

    2024年02月09日
    浏览(47)
  • 基于AT89C52单片机的计算器设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/88637995?spm=1001.2014.3001.5503 源码获取 B 源码+仿真图+课程设计+51 摘 要 计算器一般是指“电子计算器”,能进行数学运算的手持机器,拥有集成电路芯片,结构简单,功能较弱,但由于它使用方便、操

    2024年01月16日
    浏览(58)
  • 51单片机实现简单的洗衣机控制系统设计

    (1)设计一个洗衣机控制系统,用直流电机的转速表征三种不同洗衣方式:弱洗、强洗、漂洗; (2)用三个独立按键设置待洗衣物的不同洗涤方式,实现最长10分钟定时:     丝质衣服: 漂洗 定时3分钟 棉质衣服:弱洗 2分钟;强洗 5分钟;漂洗 3分钟; 化纤衣服: 强洗

    2023年04月19日
    浏览(46)
  • Qt实现简单计算器

    三级项目想用Qt做界面。 为了熟悉一下Qt操作,历时8h做了个计算器。 没用到数据库,布的控件也比较简单。 所以calculator.pro和widget.ui就不放了(太长了占地方) 文件压缩包放在下一篇了,需要自取。 自学时间较短,有很多不足欢迎指正。 ⭐:del按键上的图片用的是绝对路

    2024年02月11日
    浏览(48)
  • 用代码实现一个简单计算器

    作者主页: paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者: 大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于 《C语言》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将C语言基础知识一网打尽,希望可

    2024年02月08日
    浏览(42)
  • 【Python】简单计算器实现(四)

    解决思路: 最后,我们来看看最简单的运算函数和判断运算符函数。 定义函数: def calculate(n1, n2, operator) param n1: float param n2: float param operator: + - * / return: float 定义函数: def is_operator(e) param e: str return: bool 最后的调用 这里定义了两个变量 result 和 _ 来接收 final_calc 返回的两个

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包