基于51单片机的计算器设计—液晶显示

基于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

点赞分享,一起学习进步!一起成长。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值