单片机源程序如下:
#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;
上一篇:ATMEGA16单片机Timer1的OC1A脚输出占空比可调的PWM信号
下一篇:ATmega16计算器代码(数码管显示)
推荐阅读最新更新时间:2024-11-02 20:15
设计资源 培训 开发板 精华推荐
- 使用 Analog Devices 的 LTC6905CS5-96 的参考设计
- (测试版)USB转485/232/TTL
- S32G2车联网评估板
- SPV2010_FAN_骏特
- AM3G-0515DZ ±15V 3 瓦 DC 至 DC 转换器的典型应用
- openmv+滚球控制板
- DC415A,用于 LTC1871EMS 高效率 SEPIC 转换器的演示板 @ 5V-15V 输入,12V 输出 @ 2Amp
- TAR5SB16 点稳压器(低压降稳压器)的典型应用
- 使用 LTC2377CMS-16、16 位、500ksps、低功耗 SAR ADC 的典型应用
- ADR392B 4V 输出微功率、低噪声精密电压基准的典型应用
- Silicon Labs EFM32PG22开发套件 传你所思 创你所想!申请进行时!
- 跟帖留言赢好礼:60年回眸——聊一聊示波器的前世今生!
- 有奖直播|完美替代传统汽车钥匙?探索英飞凌数字钥匙解决方案
- 骏龙科技&ADI有奖直播:适用于视频、转换器、通信的千兆数字隔离器
- ST直播主题:高度灵活的、易用的、可定制化的协议栈--BlueNRG-LP 协议栈介绍
- 趣味电子技术史话栏目开播啦!第一集:白炽灯到底是谁发明的?
- 三人行必有我师——EEworld网友原创教程隆重登场!
- Hercules DIY创意大搜集!比比看,谁的设计最“安全”?
- 免费测评|ESP32-S2-Kaluga-1新型多媒体开发板,灵活拆装,满足多种需求