#include<iom16v.h>
#include "LCD1602.h"
#include "MatrixKey.h"
unsigned char L1[16];//显示第一行
unsigned char L2[16];//显示第二行
int result1 = 0; //存储第一个整数
int result2 = 0; //存储第二个整数
int Oper = 0; //存储运算符
unsigned int succeed_flag = 0,clear_flag=0;//计算完成标志位,清除标志位
void delay_1ms(void)
{
unsigned char i,j;
for(i=0;i<40;i++)
for(j=0;j<33;j++)
{;}
}
void delay_xms(unsigned int x)
{
unsigned int i;
for(i=0;i<x;i++)
{
delay_1ms();
}
}
void display_line1(void)//第一行输入显示
{
static unsigned int num=0;
unsigned char str = 0;
/*如果有计算完成标志,将显示内容清除,并将此标志位清零*/
if(succeed_flag == 1)
{
sprintf((char *)L1," ");
LCD_write_string(0,0,L1);
sprintf((char *)L2," ");
LCD_write_string(0,1,L2);
succeed_flag = 0;
num = 0;
}
switch(KeyResult)
{
case 0 : str = '0'; break;
case 1 : str = '1'; break;
case 2 : str = '2'; break;
case 3 : str = '3'; break;
case 4 : str = '4'; break;
case 5 : str = '5'; break;
case 6 : str = '6'; break;
case 7 : str = '7'; break;
case 8 : str = '8'; break;
case 9 : str = '9'; break;
case 10 : str = '+'; break;
case 11 : str = '-'; break;
case 12 : str = '*'; break;
case 13 : clear_flag = 1; break;
case 14 : str = '='; break;
case 15 : str = '/'; break;
default:break;
}
L1[num]=str;
num++;
if(clear_flag == 1)
{
sprintf((char *)L1," ");
LCD_write_string(0,0,L1);
sprintf((char *)L2," ");
LCD_write_string(0,1,L2);
num=0;
clear_flag=0;
}
LCD_write_string(0,0,L1);
key_flag=0;
if(num>=16)
{
num=0;
}
}
/*识别第一个数字*/
void distinguish_num1(void)
{
static int num = 0;
unsigned int key;
key=KeyResult;
/*如果被按下的是数字*/
switch(key)
{
case 0 : num = num * 10 + 0; break;
case 1 : num = num * 10 + 1; break;
case 2 : num = num * 10 + 2; break;
case 3 : num = num * 10 + 3; break;
case 4 : num = num * 10 + 4; break;
case 5 : num = num * 10 + 5; break;
case 6 : num = num * 10 + 6; break;
case 7 : num = num * 10 + 7; break;
case 8 : num = num * 10 + 8; break;
case 9 : num = num * 10 + 9; break;
default:break;
}
/*如果被按下的是运算符,则将之前的数字进行合成,然后保存运算符*/
if(key == 10)
{
/*加法*/
Oper = 1;
result1 = num;
num = 0; //将num清零,避免影响之后的计算
}
else if(key == 11)
{
/*减法*/
Oper = 2;
result1 = num;
num = 0; //将num清零,避免影响之后的计算
}
else if(key == 12)
{
/*乘法*/
Oper = 3;
result1 = num;
num = 0; //将num清零,避免影响之后的计算
}
else if(key == 13)
{
/*清除*/
result1 = 0;
Oper = 0;
num = 0;
}
else if(key == 15)
{
/*除法*/
Oper = 4;
result1 = num;
num = 0; //将num清零,避免影响之后的计算
}
}
/*识别第二个数字*/
void distinguish_num2(void)
{
static int num = 0;
/*如果被按下的是数字*/
unsigned int key;
key=KeyResult;
switch(key)
{
case 0 : num = num * 10 + 0; break;
case 1 : num = num * 10 + 1; break;
case 2 : num = num * 10 + 2; break;
case 3 : num = num * 10 + 3; break;
case 4 : num = num * 10 + 4; break;
case 5 : num = num * 10 + 5; break;
case 6 : num = num * 10 + 6; break;
case 7 : num = num * 10 + 7; break;
case 8 : num = num * 10 + 8; break;
case 9 : num = num * 10 + 9; break;
default:break;
}
if(key == 13)
{
/*清除*/
result2 = 0;
Oper = 0;
num = 0;
}
/*当等于号被按下时,识别第二个数字,并将结果计算,显示*/
if(key == 14)
{
result2 = num;
if(Oper == 1) /*加*/
{
result2 = result1 + result2;
}
else if(Oper == 2) /*减*/
{
result2 = result1 - result2;
}
else if(Oper == 3) /*乘*/
{
result2 = result1 * result2;
}
else if(Oper == 4) /*除*/
{
result2 = result1 / result2;
}
sprintf((char *)L2,"%d ",result2);
LCD_write_string(0,1,L2);
/*将第一,二个数字,运算符以及保存的num清零*/
result1 = 0;
result2 = 0;
Oper = 0;
num = 0;
/*计算完成标志置1*/
succeed_flag = 1;
}
}
void main()
{
LCD1602_init();
while(1)
{
Key_Scan();
if(key_flag)
{
display_line1();
/*当第一串数字没有识别时,执行此函数,识别第一串数字以及运算符*/
if(Oper == 0)
{
distinguish_num1();
}
/*当第一串数字以及运算符已经确定的时候,执行识别第二串数字函数*/
else
{
distinguish_num2();
}
}
}
}
木贞子
- 粉丝: 0
- 资源: 4
最新资源
- 基于STM32为电子香味项目,通过蓝牙模块传输数据,嵌入式硬件平台,RFID使用的是RC522.整个项目包括软硬件以及android程序详细文档+全部资料+高分项目+源码.zip
- 基于发布-订阅模型的多线程消息框架,用于嵌入式平台,纯C实现,性能和灵活性极高详细文档+全部资料+高分项目+源码.zip
- 基于嵌入式Linux的一套可视对讲设备代码,比较底层,写的比较好,里面的lib库是一些图像处理库详细文档+全部资料+高分项目+源码.zip
- php 实现各种排序和查找算法源代码.zip
- 基于嵌入式qt的车载系统详细文档+全部资料+高分项目+源码.zip
- 基于嵌入式的基础图形库详细文档+全部资料+高分项目+源码.zip
- 基于嵌入式平台ARM Linux的新冠肺炎疫情监控平台详细文档+全部资料+高分项目+源码.zip
- 基于嵌入式的视觉运动控制详细文档+全部资料+高分项目+源码.zip
- 基于嵌入式综合项目:STM32F407基于ARM Cortex-M4处理器,云服务器Linux操作系统,MySQL数据存储转发详细文档+全部资料+高分项目+源码
- 基于热风控制系统嵌入式项目,基于STM32F1芯片和RT-Thread实时系统开发出温度闭环控制和风速控制详细文档+全部资料+高分项目+源码.zip
- 基于全志V3S的嵌入式开发者打怪升级项目详细文档+全部资料+高分项目+源码.zip
- 基于事件型嵌入式驱动框架。详细文档+全部资料+高分项目+源码.zip
- 基于使用B-Tree作为索引,基于MMap的嵌入式键值数据库详细文档+全部资料+高分项目+源码.zip
- 基于三个嵌入式的小项目:一个是基于科大讯飞的语音识别系统,一个是智能音乐相册,一个是别踩白块小游戏详细文档+全部资料+高分项目+源码.zip
- 基于物联网模式开发的嵌入式程序详细文档+全部资料+高分项目+源码.zip
- 基于以太网通信的电力电子设备运行状态的远程监控嵌入式系统设计详细文档+全部资料+高分项目+源码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈