基于89c52的简易计算器设计

2019-12-04来源: 51hei关键字:89c52  简易计算器  键盘扫描

 

#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)

[1] [2] [3] [4] [5]
关键字:89c52  简易计算器  键盘扫描 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic481941.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:单片机课程设计报告—温度报警器
下一篇:基于51的IIC通讯原理及协议详解(I2C)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STC89C52RC单片机控制步进电机仿真与程序
本单片机是STC89C52RC,本程序应用于step motor--28BYJ,小型步进电机,供电电压DC5V,可直接接于单片机通过ul2003驱动芯片驱动,数码管是共阴极接口,控制步进电机启动/停止,正反转,加减速,并有运行,及转换状态显示。是初学者的好例程。实物图: 仿真原理图如下 单片机源程序如下:/*本单片机是STC89C52RC,本程序应用于step motor--28BYJ,小型步进电机,   供电电压DC5V,可直接接于单片机通过ul2003驱动芯片驱动,数码管是共阴极接口,*/#include <STC89C5xRC.H>#define uchar
发表于 2019-12-05
STC89C52RC单片机控制步进电机仿真与程序
基于51的IIC通讯原理及协议详解(I2C)
;}----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------底层驱动完成以后,我们需要对实际的芯片使用通讯协议来进行操作。目前大多的情况下一般比较受欢迎的是AT24cxx 系列。AT24Cxx系列主要有:    以下系列:以下仅以AT24C02为例来进行说明:AT24C02芯片地址为:1010,其控制字格式如下:其中A2,A1,A0为可编程选择地址,此处A2
发表于 2019-12-04
基于51的IIC通讯原理及协议详解(I2C)
AT89C51单片机十字路口交通灯设计
制作出来的实物图如下: 这是一个十字路口的交通灯设计仿真原理图如下(proteus仿真工程文件可到本帖附件中下载) keil单片机源程序如下:#include<include.h>sbit NS_GRE = P2^5;      sbit NS_YEL = P2^4; sbit NS_RED = P2^3;   sbit EW_GRE = P2^2;  sbit EW_YEL = P2^1;  sbit EW_RED = P2^0;   uint8  EW_Timer = unused8; &
发表于 2019-12-03
AT89C51单片机十字路口交通灯设计
新手必看(STC89C52)单片机寻迹避障蓝牙四轮小车的简单实现
一、关于材料的选择           1.L289驱动电机x22.1.5V电池(可以买充电电池,我用了几十个电池了!!!)我是用8节1.5v构成12v电池单独给4个电机供电,另外3节1.5v给单片机供电,4.5v与           5v差不多。3.底板加4马达(电机)。4.有条件可以用电钻(我是在各个店单独购买的,所以底板孔与器件孔不搭配,自己钻的)5.若干杜邦线,公对公 母对母 公对母都买X3应该足够了,最短就好了不需要那么长,但是有钱可以买X16.淘宝上的板子STC89C52,有各种现成的接口,适合新手学习,学习
发表于 2019-12-03
STM8L052C6T6液晶LCD驱动过程
; LCD_Bias_1_3,   //            LCD_VoltageSource_Internal);//内部电压源              LCD_PortMaskConfig(LCD_PortMaskRegister_1, 0x08);//SEG11  0X08  LCD_PortMaskConfig(LCD_PortMaskRegister_2, 0x3C);//SEG18,SEG19,SEG20,SEG21 0X3C   
发表于 2019-12-02
STM8L052C6T6液晶LCD驱动过程
单片机做简易计算器源码(矩阵键盘输入+1602显示)
需要准备的元器件:1.stc89c52rc (本源码使用的mcu)2.1602液晶模块3.4*4矩阵键盘 单片机最小系统就可以,然后需要16个微动开关做成4*4矩阵键盘 。         我用的lcd  io定义为sbit rw=P3^6;                                   &nbs
发表于 2019-11-13
单片机做简易计算器源码(矩阵键盘输入+1602显示)
小广播
404 Not Found

404 Not Found


openresty
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved