51单片机简易计算器设计:仿真、程序、原理图及PCB设计报告
本设计:
基于51单片机的简易计算器设计(仿真+程序+原理图+PCB+设计报告)
仿真:proteus 7.8
程序编译器:keil 4/keil 5
编程语言:C语言
编号S0001
芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。
一、该简易计算器设计硬件电路采用三部分电路模块构成:
1、键盘模块电路, 采用 4*4 矩阵式键盘作为输入电路;
2、LCD1602 液晶显示模块;
3、以 51 单片机作为控制核心。
二、软件程序主要由三部分组成: 主程序、按键扫描程序和 LCD1602 显示程序。
三、 性能指标
(1) 用51单片机设计一个简易计算器, 并用 1602 液晶显示相应的数据。
(2) 可以进行简单的加减乘除运算。
(3) 最大可以 9999*9999, 。
(4) 可以通过 proteus 仿真。
仿真图(提供源文件):
原理图(提供源文件):
PCB图(提供源文件):
源程序(提供源文件):
复制到浏览器https://docs.qq.com/sheet/DS0xIa0llTmtNakRW
#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();
}
}
说明书:
全部资料如下:
资料获取方式