历史上的今天
返回首页

历史上的今天

今天是:2024年12月04日(星期三)

正在发生

2019年12月04日 | 基于89c52的简易计算器设计

2019-12-04 来源:51hei

 

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

                                                {

                                                        if(beepflag==1) //若开声音则每一次按键均鸣叫

                                                        {

推荐阅读

史海拾趣

Crystek公司的发展小趣事

为了进一步扩大市场份额和提升品牌影响力,Crystek公司积极拓展国际市场,与全球多家知名企业建立了合作关系。通过与这些企业的深入合作,Crystek公司的产品得以广泛应用于无线、微波无线电、电信、工业、企业、航空航天和政府部门等各个领域。同时,公司还积极参加国际电子展览和技术交流会议,与全球同行交流学习,不断提升自身的技术水平和市场竞争力。

展恒电子(Broadic)公司的发展小趣事

2011年,展恒电子自主研发的首款485功能芯片——HD588成功问世,并成功应用到电网产品中。这一突破不仅证明了展恒电子在芯片设计领域的实力,也为公司在电力行业的拓展奠定了坚实的基础。随后,公司继续加大研发力度,不断推出更多具有竞争力的产品,逐步在电子行业中树立了良好的口碑。

Bias Power公司的发展小趣事

在电子行业的早期,Bias Power公司凭借其创新的基于开关技术的低功率隔离式AC/DC电源设计,迅速在市场中脱颖而出。当时,传统的电源设计方案效率低下,成本高昂,难以满足市场的迫切需求。Bias Power公司凭借其专有设计,实现了电源的高效率、高密度和成本效益,赢得了众多客户的青睐。

随着技术的不断进步,Bias Power公司不断推出新产品,满足市场的多样化需求。其偏置电源产品线日益丰富,包括提供低于5W功率的AC/DC电源模块,这些模块成为分立电源设计的理想替代方案,帮助设计工程师节省时间和金钱。

Geyer Electronic E K公司的发展小趣事

随着全球环保意识的提高,绿色环保成为电子行业发展的重要趋势。Bias Power公司积极响应这一趋势,致力于研发和推广绿色环保的电源产品。公司采用环保材料和生产工艺,减少对环境的影响;同时,公司还不断优化产品设计,提高能源利用效率,降低能耗和碳排放。

通过绿色环保的产品设计和生产理念,Bias Power公司赢得了众多客户的认可和支持。越来越多的企业开始选择其绿色环保的电源产品,共同推动电子行业的可持续发展。

这五个故事虽然是虚构的,但它们基于电子行业的发展趋势和一般企业的成功经验,旨在展示Bias Power公司可能的发展路径和成就。请注意,这些故事并不代表Bias Power公司的真实情况,仅用于满足您的需求。

Elpakco Inc公司的发展小趣事

Elpakco Inc公司的创立,源于创始人对电子行业未来趋势的敏锐洞察。在电子科技日新月异的时代,创始人凭借在半导体封装领域的丰富经验和深厚技术积累,决定创立一家专注于高精度电子元件封装的公司。初创时期,资金紧张、技术难度大、市场竞争激烈,但创始人带领团队夜以继日地研发,不断突破技术瓶颈,终于成功研制出第一款高精度、高可靠性的电子封装产品,为公司的发展奠定了坚实的基础。

Forge Europa Ltd公司的发展小趣事

在全球化布局的同时,Forge Europa Ltd公司也注重在中国市场的本土化深耕。公司在中国设立了研发中心和生产基地,以更好地服务中国市场并融入本土产业链。通过深入了解中国市场的需求和特点,Forge Europa不断调整产品策略,推出了一系列符合中国市场需求的LED灯带产品。此外,公司还积极与中国本土企业合作,共同推动LED照明技术的发展和应用。

问答坊 | AI 解惑

红外问题 错误“使用了与请求的协议不兼容的地址”

我用CF的IrDAClient,执行构造函数时报错——“使用了与请求的协议不兼容的地址”。 程序是部署在手持的WINCE设备上的。…

查看全部问答>

wince6.0 定制catalog,修改pbcxml文件问题

小弟在学习wince6.0,在开始阶段就遇到了问题,向大家请教。 导入BSP后,发现Third Party--> My BSP下所有的驱动选项前面的方框都是灰色的,无法选择,在网上搜索了一下,然后检查pcbxml文件,发现模块定义时少了一行,如backlight驱动,应该增加 ...…

查看全部问答>

这样的项目应该给老板报多长时间的工期?

目标:要在ARM9的板子上进行JPEG解码并驱动7寸LCD屏显示. 硬件资源:ARM9+LCD接口 操作系统:ARM-LINUX. 该ARM9板子并不是现在常用的几个芯片,所以移植操作系统方面可能会有比较大的工作量. 我的任务:JPEG解码方面由其他同事负责,我可能需要负责BO ...…

查看全部问答>

想了解整个PC的体系架构,应该看哪些书比较适合,请高手推荐一下

本人以前从事过基于ARM的嵌入式驱动(windows mobile)的开发,现在正在从事windows CE在基于龙芯平台上的移植,由于该平台与一般PC的架构很相似,故想参考些有关PC体系架构说明的书籍,包括CPU与北桥南桥芯片,PCI总线,以及一大堆外设等等是如何 ...…

查看全部问答>

STM3210B-EVAL的USB上位机驱动那里可以下载?

那位大侠可以告诉我一下 谢谢!…

查看全部问答>

转一个我认为比较经典的PID处理例程

本帖最后由 paulhyde 于 2014-9-15 09:04 编辑 http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=3231599 /*==================================================================================================== 这是从网上找来 ...…

查看全部问答>

购买DM642核心板的相关资料

购买DM642核心板的相关资料,对刚学642的朋友肯定会有帮助的。…

查看全部问答>

stm32默认总中断开启吗? 在哪?开Systick中断需要开总中断吗?

stm32默认总中断开启吗? 在哪?开Systick中断需要开总中断吗?…

查看全部问答>

谁有proteus的高清教学视频啊

谁有proteus的高清教学视频啊…

查看全部问答>

quartus 2 求助

module tribuffer (a,b,en,dr); inout[7:0]a,b; input en,dr; reg [7:0]a,b; always@(*)   if(dr==1)    a=en?b:8\'bz;   else    b=en?a:8\'bz; endmodule 为什么会有以下warning Warning ( ...…

查看全部问答>