#include
#include
#include "lcd1602_8.h"
uint temp,num;//键盘扫描数值
uchar keynum1=0,keynum2=0,sign=0,i=0,j=0; //按键计数,符号标示
uchar num1[8]={0},num2[8]={0}; //按键存储数组
float ans1=0,ans2=0,ans=0,point=0; //运算数据
bit conflag=0; //继续运算标志位
bit newcalc=0; //新运算标志
bit ac=0; //清零标志,1为清零
bit beepflag=0; //蜂鸣器标志位
bit sqrtflag1=0; //开方1标志位
bit sqrtflag2=0; //开方2标志位
bit powflag=0;
sbit keybeep=P3^3;//蜂鸣器开关按键
sbit beep=P2^3; //蜂鸣器控制口
sbit keysqrt=P3^4;//开方按键
sbit keypow=P3^5;//任意次方按键
uchar keyscan();
void maininit(void);
/****主程序***/
void main(void)
{
maininit();//初始化
while(1) //整个系统大循环,让计算器一直处于工作状态
{
while(1) //第一运算数扫描
{
if(ac==1)
break; //若清零,则退出输入
if((keyscan()!='N')&&((num>=0&&num<=9)||num=='.')) //记录按下的数字
{
if(newcalc==1) //新一次运算开始
{
lcdwrite_com(0x01);//清屏
newcalc=0;
lcd_setxy(0,0);
}
if(keynum1<=7) //限制输入位数
{
if(num=='.')
{
lcdwrite_data('.'); //显示小数点
}
else
lcdwrite_num1(num);
num1[keynum1]=num;
keynum1++;
}
}
else if(num=='+'||num=='-'||num=='*'||num=='/'||num=='='||num=='^'||keysqrt==0)
{
if(keynum1==0&&num1[0]==0) //若直接输入运算符而没有输入数字则执行连续运算
{
here: ans1=ans;
sign=num;
lcdwrite_com(0x01);
delayms(5);
lcd_setxy(0,0);
lcdwrite_float(ans1);
if(sqrtflag2!=1&&num!='N')
lcdwrite_data(num);
break;
}
for(i=0;keynum1>0;i++) //计算按下的数字的大小
{
if(num1[i]!='.')
ans1=ans1*10+num1[i];
else if(num1[i]=='.')
break;
keynum1--;
}
for(keynum1--,i++,j=0;keynum1>0;j++,i++,keynum1--)
point=point*10+num1[i];
for(;j>0;j--)
point*=0.1;
ans1=ans1+point;
sqrtflag1=0; //清除开方标志
sqrtflag2=0;//清除开方标志
if(keysqrt==0) //计算开方
{
delayms(5);
if(keysqrt==0)
关键字:89c52 简易计算器 键盘扫描 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic481941.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
上一篇:单片机课程设计报告—温度报警器
下一篇:基于51的IIC通讯原理及协议详解(I2C)
- 关注eeworld公众号
快捷获取更多信息
- 关注eeworld服务号
享受更多官方福利
推荐阅读





404 Not Found
实战 培训 开发板 精华推荐
- STM8L051F3 IO表现异常
- STM8L 设置输入模式读取PIN脚高低电平就是个坑
- Azure ARM (7) ARM Template - 使用Visual Studio编辑
- Azure ARM (6) ARM Template简单介绍
- Azure ARM (5) ARM Template初探 - 本地JSON Template文件(1)
- Azure ARM (4) 开始创建ARM Resource Group并创建存储账户
- Azure ARM (3) ARM支持的服务类型
- Azure ARM (1) UI初探
- ST-Link STVP Cannot communicate with the device!