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仿真实现+源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建行信用卡逾期怎么办 逾期利息必须要承担
- 下一篇: oracle导出建表主键,oracle主