#include "mega16.h"

#include "1602.h"

#include "key.h"

float k1,k2;              //记录最终输入运算的两个数

uint one,two,three,four;   //记录每次输入的数字

uint flag;                //计数标志位

uint flag1,flag2;   //第一个数   第二个数 完成标志位

uint flag3;//记录加减乘除标志位

long Result;     //最后运算的结果

void main()

{

init();  //液晶初始化

// write_com(0x80+15);

// write_date('0');

Init_Keypad();   //键盘初始化

flag1 = 1;

while(1)

{

Key_Event();  //扫描键盘

if(key_Flag == 1)

{

key_Flag = 0;

if(key_val <= 10)   //小于10  则为需要的数字

{

if(flag1)       //flag1为1  表示正在输入第一个数字

{

switch(flag)

{

case 0:

flag = 1;

one = key_val%10;

write_com(0x80+6);

write_date(tab[key_val]);

k1 = (float)one;

break;

case 1:

flag = 2;

two = key_val%10;

write_com(0x80+7);

write_date(tab[key_val]);

k1 = (float)(one*10 + two);

break;

case 2:

flag = 3;

three = key_val%10;

write_com(0x80+8);

write_date(tab[key_val]);

k1 = (float)(one*100 + two * 10 + three);

break;

case 3:

flag = 4;

four = key_val%10;

write_com(0x80+9);

write_date(tab[key_val]);

k1 = (float)(one*1000 + two * 100 + three*10 + four);

break;

case 4:

flag = 0;

break;

}

}

if(flag2)        //flag2为1  表示正在输入第2个数字

{

switch(flag)

{

case 0:

flag = 1;

one = key_val%10;

write_com(0x80+12);

write_date(tab[key_val]);

k2 = (float)one;

break;

case 1:

flag = 2;

two = key_val%10;

write_com(0x80+13);

write_date(tab[key_val]);

k2 = (float)(one*10 + two);

break;

case 2:

flag = 3;

three = key_val%10;

write_com(0x80+14);

write_date(tab[key_val]);

k2 = (float)(one*100 + two * 10 + three);

break;

case 3:

flag = 4;

four = key_val%10;

write_com(0x80+15);

write_date(tab[key_val]);

k2 = (float)(one*1000 + two * 100 + three*10 + four);

break;

case 4:

flag = 0;

break;

}

}

}

else if(key_val>=13 || key_val <= 16)  //判断运算符

{

flag1 = 0;

flag2 = 1;

flag = 0;

switch(key_val)

{

case 13:

write_com(0x80+11);

write_date('+');

flag3 = 1;

break;

case 14:

write_com(0x80+11);

write_date('-');

flag3 = 2;

break;

case 15:

write_com(0x80+11);

write_date('*');

flag3 = 3;

break;

case 16:

write_com(0x80+11);

write_date('/');

flag3 = 4;

break;

}

}

if(key_val == 12)           //等于

{

switch(flag3)

{

case 1:

Result = k1 + k2;

write_com(0xc0);

write_date(tab[Result/100000]);

write_date(tab[Result%100000/10000]);

write_date(tab[Result%10000/1000]);

write_date(tab[Result%1000/100]);

write_date(tab[Result%100/10]);

write_date(tab[Result%10]);

break;

case 2:

Result = k1 - k2;

write_com(0xc0);

if(Result < 0)

{

write_date('-');

Result = 0 - Result;

}

write_date(tab[Result/100000]);

write_date(tab[Result%100000/10000]);

write_date(tab[Result%10000/1000]);

write_date(tab[Result%1000/100]);

write_date(tab[Result%100/10]);

write_date(tab[Result%10]);

break;

case 3:

Result = k1 * k2;

write_com(0xc0);

write_date(tab[Result/100000]);

write_date(tab[Result%100000/10000]);

write_date(tab[Result%10000/1000]);

write_date(tab[Result%1000/100]);

write_date(tab[Result%100/10]);

write_date(tab[Result%10]);

break;

case 4:

//write_com(0x80+11);

//write_date('/');

Result = k1*100 / k2;

write_com(0xc0);

//write_date(tab[Result/100000]);

//write_date(tab[Result%100000/10000]);

write_date(tab[Result%10000/1000]);

write_date(tab[Result%1000/100]);

write_date('.');

write_date(tab[Result%100/10]);

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

AVR单片机计算器C语言源程序,AVR单片机简单计算器的Proteus仿真实现+源码相关推荐

  1. 基于51单片机的简易数字计算器Proteus仿真(源码+仿真+全套资料)

     资料编号:115 全套资料齐全,功能说明: 该计算器系统51 系列的单片机进行的数字计算器系统设计,可以完成计算器的键盘输入, 进行加. 减.乘.除的简单四则运算,并在 LCD屏幕上相应的显示结果. ...

  2. 基于51单片机的八路电压表采集Proteus仿真(源码+仿真+原理图+全套资料)

    资料编号:110 程序语言:C语言 仿真软件:Proteus8.9版本 功能讲解如下: 利用单片机及其外围器件(A/D转换器等)实现一款简易电压表,实现以下功能: 1   电压表能够进行8路模拟电压测 ...

  3. 基于stm32单片机的台历日历计时器万年历Proteus仿真(源码+仿真+全套资料)

    资料编号:151 视频讲解: 151-基于stm32单片机的台历日历计时器万年历Proteus仿真(源码+仿真+全套资料) 采用stm32单片机作为主控,LCD屏幕上部分显示电子日历,下半屏幕显示台历 ...

  4. 基于51单片机的室内温度可燃气体检测报警系统Proteus仿真(源码+仿真+全套资料)

    资料编号:133 讲解视频: 133-基于51单片机的室内温度可燃气体检测报警系统Proteus仿真(源码+仿真+全套资料) 功能介绍: 采用51单片机作为主控,LCD1602显示当前温度和可燃气体浓 ...

  5. 基于51单片机智能农业大棚恒温恒湿Proteus仿真(源码+仿真+全套资料)

    资料编号:134 视频讲解: 134-基于51单片机智能农业大棚监测恒温恒湿Proteus仿真(源码+仿真+全套资料) 功能介绍: 采用51单片机作为主控芯片,可以采集当前的温湿度,并且LCD1602 ...

  6. 基于stm32单片机农业智能温室大棚温湿度光照测量报警系统Proteus仿真(源码+仿真+论文)

    资料编号:146 视频讲解: 146-基于stm32单片机农业智能温室大棚温湿度光照测量报警系统Proteus仿真(源码+仿真+论文) 设计内容 本次嵌入式课程设计综合实验的内容为基于proteus的 ...

  7. 基于51单片机的自动售货机Proteus仿真(源码+仿真+设计报告)

    资料编号:137 视频讲解: 137-基于51单片机的自动售货机Proteus仿真(源码+仿真+设计报告) 功能介绍: 基本原理:通过矩阵键盘来选择货物的种类与数量过后自动售货机提示投币.自动售货机的 ...

  8. 基于stm32单片机的甲醛气体检测proteus仿真(源码+仿真+参考论文)

    资料编号:056 检测当前的甲醛气体浓度,LCD1602显示,并且可以自动打开关闭风扇,也可以通过手动按键打开关闭风扇通风,全套资料齐全,具体功能请看下方演示视频 56-基于stm32单片机的甲醛气体 ...

  9. 基于stm32单片机多功能可调时钟闹钟万年历计时器闹铃提醒Proteus仿真(源码+仿真+原理图+PCB)

     资料编号:148 视频讲解: 148-基于stm32单片机多功能可调时钟闹钟万年历计时器闹铃提醒Proteus仿真(源码+仿真+原理图+PCB) 本设计采用stm32单片机作为主控,LCD1602显 ...

  10. c语言设计程序计算器,C语言程序设计,做一个简单计算器

    题目: C语言程序设计,做一个简单计算器 程序内容有:加减乘除和平方,立方,开方等.用if或者swith结构来编程. 算加法时只输出加法的结果,算减法时只出减法的结果,如此类推. 解答: 已发送, # ...

最新文章

  1. R语言使用ggpubr包的ggarrange函数组合多张结论图:使用ggpubr包将图像、文本、表格组合在一起展示
  2. gin.context 怎么在其他包中获取 只能传递吗_跨进程传递大图,你能想到哪些方案呢?...
  3. 数据预处理之独热编码(One-Hot Encoding)
  4. 基于SSH实现的学生成绩管理系统
  5. 葡萄城报表介绍:交叉报表
  6. 深入理解分布式技术 - 缓存过期策略手写LRU
  7. JAVA常见算法题(三十二)---找规律
  8. {%csrf_token%}的作用
  9. android os于8.1区别,Android-x86 8.1-rc2发布 运行于x86 PC上的安卓OS
  10. BZOJ 1798: [Ahoi2009]Seq 维护序列seq
  11. TableStore:爬虫数据存储和查询利器
  12. 商城系统php功能模块,yershop商城系统的支付模块问题
  13. pycharm 调试_把xlwings盘顺溜:xlwings连接到Pycharm进行调试,以及xlwings转换器等的使用...
  14. JAVA基础知识(五)数据类型转换
  15. Java 将一段时间以周、月、季分割
  16. 软考网络工程师--知识产权与标准化
  17. 在 SQL Server 的存储过程中调用 Web 服务
  18. LSTM 手动实现车牌识别 Pytorch代码
  19. Linux常用命令大全——赶紧收藏
  20. Win7 不支持此接口问题

热门文章

  1. 870C. Maximum splitting
  2. C#中string.Concat方法的使用
  3. snmp获取交换机日志_日志审计系统和数据库审计系统的区别
  4. 手机全部零件名称图片_【直播课】一条记录中显示多张图片
  5. java中接口回调_Java中的接口回调实例
  6. 进程控制1--fork vfork函数
  7. python自动下载邮件_python实现邮件自动化
  8. sql 删除数据_从零开始学SQL:是什么、如何安装、基本语法、表格(创建、删除、更新)、数据(插入、删除、更新)...
  9. druiddatasource配置_Spring核心配置文件详解
  10. 【转】OWIN是什么?