欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機計算器設計(可進行加減乘除以及平方等運算)帶仿真與源碼
[打印本頁]
作者:
鳳飛飛紛紛
時間:
2018-4-21 10:34
標題:
單片機計算器設計(可進行加減乘除以及平方等運算)帶仿真與源碼
基于單片機的計算器,矩陣鍵盤輸入,lcd1602液晶屏顯示,可以進行加減乘除以及平方等運算
計算器仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(17.58 KB, 下載次數: 97)
下載附件
2018-4-21 15:23 上傳
0.png
(47.22 KB, 下載次數: 90)
下載附件
2018-4-21 15:24 上傳
單片機源程序如下:
#include<reg52.h>
#include<math.h>
#include"define.h" //定義頭文件
#include"delay.h" //延遲頭文件
#include"display.h" //顯示頭文件
#include"scan.h" //掃描頭文件
#include"LCD1602.h" //LCD1602頭文件
#include"interrupt.h" //中斷頭文件
void main() //主程序
{
uchar error=0,i,first=0,dot1,dot2,dot1_num,dot2_num,minus1,minus2;//錯誤標志、第一次清屏標志、小數點標志以及小數點個數 負號標志、負號個數
uchar Key_num,last_key_num; //鍵號
uchar flag=0,equal_flag; //運算符、等于符
double num1=0,num2=0,num=0,result=0; //第一個數、第二個數、計算結果
uchar first_num=0,second_num=0;
InitLcd();
EA=1;
ET0=1;
TMOD=0X01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
write_com(0x80+0x40+15);
write_Dat('0');
write_com(0x80);
while(1)
{
while(key_scan()==0xff);
TR0=1;
if(first==0)
{
first=1;
write_com(0x01);
}
Key_num=key_scan();
switch(key_scan())
{
case 6:write_Dat('7');num=7;break;
case 7:write_Dat('8');num=8;break;
case 8:write_Dat('9');num=9;break;
case 9:
if(last_key_num!=Key_num)
{
write_Dat('+');
flag=1;
}break;
case 10:
if(last_key_num!=Key_num)
{
write_Dat('^');
flag=5;
}break;
case 11:write_Dat('4');num=4;break;
case 12:write_Dat('5');num=5;break;
case 13:write_Dat('6');num=6;break;
case 14:
if(last_key_num!=Key_num)
{
write_Dat('-');
flag=2;
}break;
case 15:
if(last_key_num!=Key_num)
{
write_Dat('T');
flag=6;
}break;
case 16:write_Dat('1');num=1;break;
case 17:write_Dat('2');num=2;break;
case 18:write_Dat('3');num=3;break;
case 19:
if(last_key_num!=Key_num)
{
write_Dat('*');
flag=3;
}break;
case 21:write_Dat('0');num=0;break;
case 22:
if(last_key_num!=Key_num)
{
if(flag==0)
{
minus1++;
if(minus1==1)
{
write_Dat('-');
}
}
else
{
minus2++;
if(minus2==1)
{
write_Dat('-');
}
}
} break;
case 23:
if(last_key_num!=Key_num)
{
if(flag==0)
{
dot1++;
if(dot1==1)
{
write_Dat('.');
}
}
else
{
dot2++;
if(dot2==1)
{
write_Dat('.');
}
}
} break;
case 24:
if(last_key_num!=Key_num)
{
write_Dat('/');
flag=4;
}break;
case 25:
if(last_key_num!=Key_num)
{
write_Dat('=');
equal_flag=1;
}break;
}
if(Key_num!=1&&Key_num!=2&&Key_num!=3&&Key_num!=4&&Key_num!=15&&Key_num!=22&&Key_num!=23&&Key_num!=25) //第一個數
{
if(flag==0)
{
num1=num1*10+num;
num=0;
if(dot1!=0)
{
dot1_num++;
}
first_num=1;
}
if(flag!=0)
{
num2=num2*10+num;
num=0;
if(dot2!=0)
{
dot2_num++;
}
second_num=1;
}
}
if(equal_flag==1&&first_num==1)
{
if(dot1!=0)
{
num1=num1/pow(10,dot1_num);
dot1=0;
}
if(dot2!=0)
{
num2=num2/pow(10,dot2_num);
dot2=0;
}
if(minus1!=0)
{
num1=num1*(-1);
}
if(minus2!=0)
{
num2=num2*(-1);
}
if(second_num!=0)
{
switch(flag)
{
case 1:result=num1+num2;break;
case 2:result=num1-num2;break;
case 3:result=num1*num2;break;
case 4:
if(num2!=0)
{
result=num1/num2;
}
else
{
write_com(0x80+0x40+10);
for(i=0;i<5;i++)
{
write_Dat(table2[i]);
}
error=1;
} break;
case 5: result=pow(num1,num2);break;
case 6: result=pow(num1,1/num2);break;
}
}
if(error!=1)
display(result);
}
if(Key_num==20) //清零
{
num1=num2=result=0;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
基于單片機計算器.rar
(85.18 KB, 下載次數: 63)
2018-4-21 10:32 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
ztw
時間:
2018-5-2 21:21
樓主,目標無法創建怎么回事啊
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1