历史上的今天

今天是:2024年08月27日(星期二)

正在发生

2020年08月27日 | LCD1602简易计算器实物与仿真

发布者:人妙果华 来源: 51hei关键字:LCD1602  简易计算器 手机看文章 扫描二维码
随时随地手机看文章

proteus仿真:
微信截图_20180726222907.png

实物:
微信图片_20180726222950.jpg

/*******************************************************************************

*  标题:                       LCD1602简易计算器                               *

*  时间                      2018年7月26日22:32:18                                                   *

*                                                                                                                                                           *

*  实验说明:1602简易计算器,可以实现四位数以内的加减乘除,                                     *                                                      

********************************************************************************

* 实验心得:当内部ram不够用的时候,可以定义成xdata,使用外部ram,但是有一个问题*

就是在用proteus仿真的时候,如果有xdata的代码,可能仿真会出现点问题,因为peoteus*

不支持外部扩展ram                                                               *

********************************************************************************/

#include       

#include"lcd.h"

#include"math.h"


//--定义使用的IO口--//       

#define GPIO_KEY P1


//--定义全局变量--//

unsigned char code XuJian[16]="01470258=369+-x/";

long value[16];

unsigned char Num[8];//此处写成unsigend char xdata Num[8]时,实物可以用,但是仿真有点问题,因为proteus不支持外部扩展ram.

unsigned long result;//运算结果

unsigned int flag=0;//标志位

unsigned int  m;

unsigned int c=0;

long First=0;//输入的第一位数

long Second=0;//输入的第二位数

unsigned int Key;//符号判断,如果key=12,为+,13,为-,14为×,15为/。

unsigned char KeyValue=-1;

//用来存放读取到的键值


//--声明全局函数--//

int KeyScan(void);//键值判断函数

void Delay10ms(unsigned int c);   //误差 0us

void RES();//结果运算函数


/*******************************************************************************

* 函 数 名         : main

* 函数功能                   : 主函数

* 输    入         : 无

* 输    出         : 无

*******************************************************************************/

void main(void)

{

        LcdInit();

//        for(i=0;i<7;i++)

//        {

//                LcdWriteData(TiShi[i]);

//        }


        while(1)

        {

            KeyValue=KeyScan();

                switch(KeyValue)

                {

                        case(0):

                        LcdWriteCom(0x01);

                        KeyValue=-1;

                        First=0;

                        Second=0;

                        c=0;

                        break;


                        case(1):                       

                        if(flag==0)//flag为0时,正常计算

                        {

                        LcdWriteData(XuJian[1]);

                        KeyValue=-1;

                        if(c==0)

                        First=10*First+1;

                        else if(c==1)

                        Second=10*Second+1;

                        }


                        else if(flag==1)//flag为1时,可以在第一次运算好后,继续输入数字,开始第二次计算

                        {

                    LcdWriteCom(0x01);

                        LcdWriteData(XuJian[1]);

                        KeyValue=-1;

                        First=0;

                        Second=0;

                        c=0;

                        flag=0;

                       

                        if(c==0)

                        First=10*First+1;

                        else if(c==1)

                        Second=10*Second+1;       

                        }

                        break;


                        case(2):

                        if(flag==0)

                        {

                        LcdWriteData(XuJian[2]);

                        KeyValue=-1;

                        if(c==0)

                        First=10*First+4;

                        else if(c==1)

                        Second=10*Second+4;       

                        }


                        else if(flag==1)

                        {

                        LcdWriteCom(0x01);

                        LcdWriteData(XuJian[2]);

                        KeyValue=-1;

                        First=0;

                        Second=0;

                        c=0;

                        flag=0;

                       

                        if(c==0)

                        First=10*First+4;

                        else if(c==1)

                        Second=10*Second+4;               

                        }

                        break;


                        case(3):

                        if(flag==0)

                        {

                        LcdWriteData(XuJian[3]);

                        KeyValue=-1;

                        if(c==0)

                        First=10*First+7;

[1] [2] [3] [4]
关键字:LCD1602  简易计算器 引用地址:LCD1602简易计算器实物与仿真

上一篇:数码管动态扫描显示01234567显示
下一篇:单片机数字电流表电压表源码与电路图

推荐阅读

2018年初,清华大学快营销研究院孙巍在谈及消费升级时指出,消费升级是“从物质层面到精神层面的需求升级”。即在“余乐化”时代的今天,“余乐”中产们,不仅要得到实际利益,还要获得精神享受,在追求“富裕”的基础上追求精神“富余”。如今,这种从物质层面到精神层面的升级,已不再局限于传统的衣食住行,在消费电子领域也表现得尤为突出。以笔记本为...
当前,5G正在加速推进。在4G向5G过渡的过程中,消费者的疑虑和观望都可以理解。这就需要运营商及时加强与消费者沟通,积极回应诉求和关注,增进消费者对于4G与5G政策的了解,防止产生误解。最近,有传言称运营商为了推广5G正在降低4G网速,还有一些用户通过4G使用体验表示感受到4G网速明显下降,引起不少消费者热议。 虽然5G离消费者越来越近了,但人们对4...
在整理 7 月零售数据的时候,我觉得有必要把混动单独拉出来讲,如下图所示,长期来看混动(不管是 48V 还是基于 200~300V 的系统)可能都会存在很长的时间。这个现象其实在欧洲也能观察到,早布局混动对于燃油车往 2025 和 2030 年的演进是非常有帮助的。如下图所示,HEV 目前 7 月份销售了 4.97 万台,市场份额为 2.97%;PHEV1.72 万台,...
8月27日消息,据外媒报道,Alphabet旗下自动驾驶部门Waymo的发言人周四表示,已停止向其他公司出售激光探测及测距(光学雷达)传感器。Waymo发言人在一份声明中表示:“我们正在逐步缩减商业激光雷达业务,因为我们仍然专注于开发和部署我们的Waymo Driver,保持对Waymo One(网约车)和Waymo Via(货运)部门开发和部署的关注。”不过他表示,公司将继...

史海拾趣

问答坊 | AI 解惑

大三学生求暑假实习工作

本人上海电力学院大三本科学生,专业电子科学与技术.成绩优良,在校期间各方面表现良好~!希望暑假能找到一份半导体/集成电路技术公司的实习工作~!学过candence软件  以及EDA设计如果有机会,我会好好把握!~ 邮箱 donglei0208@hotmail.com…

查看全部问答∨

无线收发cc1100相关资料

本帖最后由 paulhyde 于 2014-9-15 04:07 编辑 cc1100相关  …

查看全部问答∨

DG128板子的问题

小弟的DG128的板子 总是用一段时间BDM就下不进程序去了 BDM调试时问题让选择频率 然后一大堆错误 这是什么原因  高手们以前有没有类似情况啊…

查看全部问答∨

Can not perform this operation on a closed dataset-- delphi

多物料进出仓系统  在添加物料时出现 这个错误提示:Can not perform this operation on a closed dataset if RbtnMulti.Checked = true then //多物料   begin       //构造字符串    & ...…

查看全部问答∨

关于寄存器

IE的默认值是不是00000000 P1P2P3的端口值是不是11111111 怎样确定寄存器的初始值 …

查看全部问答∨

嵌入式从底层到高层

我研究嵌入式,驱动也写过。至今有个问题,如果给我一个芯片,我怎么从最低层做到最高层,哪怕是最简单的也好。我要从最低层用汇编来分配引脚和片选地址,然后用c语言写驱动,驱动写好后,我要用java写应用层的程序,具体来讲,比如我写了个扫描仪 ...…

查看全部问答∨

如何将一个隐藏分区Mount成一个文件

大家有没有知道一个软件-Junction(Windows Junction creater and repaser point)是怎么做的? 或者知道如何可以将一个隐藏分区Mount成一个文件,我之前用DefineDosDevice给这个隐藏分区一个MS-DOS的device name了,然后呢? 多谢啊~~…

查看全部问答∨

CycloneII中如何实现信号的LVDS transmitter

用的DE2开发板,用LFSR的方法实现了伪随机数的产生,想将伪随机数据变换成LVDS差分信号送出去,如何将单转成差分信号呢?在I/O配置里面实现么?…

查看全部问答∨

ADC10序列通道单次转换数据怎样使用

//******************************************************************************//  MSP430F21x2 Demo - ADC10, DTC Sample A2-0, AVcc, Single Sequence, DCO////  Description: Sample A2/A1/A0 as single sequence with referenc ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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