摩尔芯闻 > 行业新闻 > 半导体 > LCD1602简易计算器实物与仿真

LCD1602简易计算器实物与仿真

51hei ·2020-08-27 00:00·电子工程世界
阅读:1158

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

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

上一篇:单片机数字电流表电压表源码与电路图

下一篇:数码管动态扫描显示01234567显示

打开摩尔直播,更多新闻内容
半导体大咖直播分享高清观看
立即下载