基于51单片机的计算器设计
(仿真+程序+原理图+PCB+设计报告)
功能介绍
具体功能:
1、 4*4 矩阵式键盘作为输入电路;
2、可以进行加、减、乘、除运算;
3、LCD1602 液晶显示输入数字和计算结果;
4、可以退位和复位;
#include "reg52.h"
#include "string.h"
#include "stdio.h"
#include "lcd1602.h"
#include "keyboard.h"
#define keydeng 14
#define keyzuoyi 12
code unsigned char KeyDisPlaybuf[16] =
{
'1', '2', '3', '+',\
'4', '5', '6', '-',\
'7', '8', '9', '*',\
'<', '0', '=', '/'
};
long Count(char *ch, char len)//简单计算器 仅支持+-*/
{
unsigned char i = 0;
char Operation;
long Num1=0,Num2=0;
while(i<len && ch[i]!='+' && ch[i]!='-' && ch[i]!='*' && ch[i]!='/')
{
Num1*=10;
Num1+=ch[i]-'0';
i++;
}
Operation=ch[i++];
while(i<len && ch[i]!='=')
{
Num2*=10;
Num2+=ch[i]-'0';
i++;
}
switch(Operation)
{
case'+':return Num1+Num2;
case'-':return Num1-Num2;
case'*':return Num1*Num2;
case'/':return Num1/Num2;
}
return 0;
}
void EasyCounter(void)
{
unsigned char buff[30];
unsigned char text[30];
unsigned char key;
unsigned char i = 0;
do
{
key = keycan();//读取键值
if(key!=0xff)//键值不等于0
{
text[i++]=KeyDisPlaybuf[key];//记录键值对应的字符
text[i]='\0';
LCD_ShowStr(0,0," ");
LCD_ShowStr(16-strlen(text),0,text);
}
if(key==keyzuoyi&&i>0)//按下"<"时删除一位
i-=2;
}while(key!=keydeng);//按下'='时结束输入
sprintf(buff, "%ld", Count(text, strlen(text)));
LCD_ShowStr(0,1," ");
LCD_ShowStr(16-strlen(buff),1,buff);
}
void main(void)
{
LCD_Init();
while(1)
{
EasyCounter();
}
}
硬件设计
使用元器件:
单片机:STC89C52;
(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)
晶振:11.0592;电容 :30pF,1uF;
按键开关;电阻:100Ω,10k;
LCD1602; 导线:若干;
流程图:
设计资料
01 仿真图
本设计使用proteus7.8和proteus8.7两个版本设计,向下兼容,无需担心!具体如图!
02 原理图
本系统原理图采用Altium Designer19设计,具体如图!
03 程序
本设计使用软件keil4和keil5两个版本编程设计,无需担心!具体如图!
04 设计报告
八千字设计报告,具体如下!
05 设计资料
全部资料包括仿真源文件 、程序(含注释)、AD原理图、参考论文、流程图、任务书等。具体内容如下,全网最全! !
下面是开源51单片机设计资料
大家共同学习进步:
链接:百度网盘 请输入提取码
提取码:57kf
点赞分享,一起学习进步!一起成长。