AVR单片机计算器C语言源程序,AVR单片机简单计算器的Proteus仿真实现+源码
#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仿真实现+源码相关推荐
- 基于51单片机的简易数字计算器Proteus仿真(源码+仿真+全套资料)
资料编号:115 全套资料齐全,功能说明: 该计算器系统51 系列的单片机进行的数字计算器系统设计,可以完成计算器的键盘输入, 进行加. 减.乘.除的简单四则运算,并在 LCD屏幕上相应的显示结果. ...
- 基于51单片机的八路电压表采集Proteus仿真(源码+仿真+原理图+全套资料)
资料编号:110 程序语言:C语言 仿真软件:Proteus8.9版本 功能讲解如下: 利用单片机及其外围器件(A/D转换器等)实现一款简易电压表,实现以下功能: 1 电压表能够进行8路模拟电压测 ...
- 基于stm32单片机的台历日历计时器万年历Proteus仿真(源码+仿真+全套资料)
资料编号:151 视频讲解: 151-基于stm32单片机的台历日历计时器万年历Proteus仿真(源码+仿真+全套资料) 采用stm32单片机作为主控,LCD屏幕上部分显示电子日历,下半屏幕显示台历 ...
- 基于51单片机的室内温度可燃气体检测报警系统Proteus仿真(源码+仿真+全套资料)
资料编号:133 讲解视频: 133-基于51单片机的室内温度可燃气体检测报警系统Proteus仿真(源码+仿真+全套资料) 功能介绍: 采用51单片机作为主控,LCD1602显示当前温度和可燃气体浓 ...
- 基于51单片机智能农业大棚恒温恒湿Proteus仿真(源码+仿真+全套资料)
资料编号:134 视频讲解: 134-基于51单片机智能农业大棚监测恒温恒湿Proteus仿真(源码+仿真+全套资料) 功能介绍: 采用51单片机作为主控芯片,可以采集当前的温湿度,并且LCD1602 ...
- 基于stm32单片机农业智能温室大棚温湿度光照测量报警系统Proteus仿真(源码+仿真+论文)
资料编号:146 视频讲解: 146-基于stm32单片机农业智能温室大棚温湿度光照测量报警系统Proteus仿真(源码+仿真+论文) 设计内容 本次嵌入式课程设计综合实验的内容为基于proteus的 ...
- 基于51单片机的自动售货机Proteus仿真(源码+仿真+设计报告)
资料编号:137 视频讲解: 137-基于51单片机的自动售货机Proteus仿真(源码+仿真+设计报告) 功能介绍: 基本原理:通过矩阵键盘来选择货物的种类与数量过后自动售货机提示投币.自动售货机的 ...
- 基于stm32单片机的甲醛气体检测proteus仿真(源码+仿真+参考论文)
资料编号:056 检测当前的甲醛气体浓度,LCD1602显示,并且可以自动打开关闭风扇,也可以通过手动按键打开关闭风扇通风,全套资料齐全,具体功能请看下方演示视频 56-基于stm32单片机的甲醛气体 ...
- 基于stm32单片机多功能可调时钟闹钟万年历计时器闹铃提醒Proteus仿真(源码+仿真+原理图+PCB)
资料编号:148 视频讲解: 148-基于stm32单片机多功能可调时钟闹钟万年历计时器闹铃提醒Proteus仿真(源码+仿真+原理图+PCB) 本设计采用stm32单片机作为主控,LCD1602显 ...
- c语言设计程序计算器,C语言程序设计,做一个简单计算器
题目: C语言程序设计,做一个简单计算器 程序内容有:加减乘除和平方,立方,开方等.用if或者swith结构来编程. 算加法时只输出加法的结果,算减法时只出减法的结果,如此类推. 解答: 已发送, # ...
最新文章
- R语言使用ggpubr包的ggarrange函数组合多张结论图:使用ggpubr包将图像、文本、表格组合在一起展示
- gin.context 怎么在其他包中获取 只能传递吗_跨进程传递大图,你能想到哪些方案呢?...
- 数据预处理之独热编码(One-Hot Encoding)
- 基于SSH实现的学生成绩管理系统
- 葡萄城报表介绍:交叉报表
- 深入理解分布式技术 - 缓存过期策略手写LRU
- JAVA常见算法题(三十二)---找规律
- {%csrf_token%}的作用
- android os于8.1区别,Android-x86 8.1-rc2发布 运行于x86 PC上的安卓OS
- BZOJ 1798: [Ahoi2009]Seq 维护序列seq
- TableStore:爬虫数据存储和查询利器
- 商城系统php功能模块,yershop商城系统的支付模块问题
- pycharm 调试_把xlwings盘顺溜:xlwings连接到Pycharm进行调试,以及xlwings转换器等的使用...
- JAVA基础知识(五)数据类型转换
- Java 将一段时间以周、月、季分割
- 软考网络工程师--知识产权与标准化
- 在 SQL Server 的存储过程中调用 Web 服务
- LSTM 手动实现车牌识别 Pytorch代码
- Linux常用命令大全——赶紧收藏
- Win7 不支持此接口问题
热门文章
- 870C. Maximum splitting
- C#中string.Concat方法的使用
- snmp获取交换机日志_日志审计系统和数据库审计系统的区别
- 手机全部零件名称图片_【直播课】一条记录中显示多张图片
- java中接口回调_Java中的接口回调实例
- 进程控制1--fork vfork函数
- python自动下载邮件_python实现邮件自动化
- sql 删除数据_从零开始学SQL:是什么、如何安装、基本语法、表格(创建、删除、更新)、数据(插入、删除、更新)...
- druiddatasource配置_Spring核心配置文件详解
- 【转】OWIN是什么?