日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/10 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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仿真实现+源码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。