700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > AVR单片机计算器C语言源程序 AVR单片机简单计算器的Proteus仿真实现+源码

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

时间:2023-07-05 01:53:11

相关推荐

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黑下载附件…………

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。