久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2798|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)設(shè)計高級計算器

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:268235 發(fā)表于 2017-12-28 11:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
目前只能實現(xiàn)加減乘除的簡單運算,想加函數(shù)運算和開方進(jìn)去,用獨立按鍵來操作,但是不知道函數(shù)運算和開方的代碼該怎么寫,目前只寫了部分代碼,有大神可以發(fā)些資料參考一下嗎?

  • #include<reg52.h>
  • #include<stdlib.h>
  • #define uchar unsigned char
  • #define uint unsigned int
  • #define lcd P0
  • #define key P3
  • void write_com(uchar com);
  • void write_dat(uchar dat);
  • void delay(uchar z);
  • void Init_lcd();
  • void keyscan1();
  • void keyscan2();
  • void keyscan3();
  • void keyscan4();
  • void count_add();
  • void count_sub();
  • void count_mul();
  • void count_div();
  • void show_int();
  • void show_float();
  • sbit RS=P1^0;
  • sbit RW=P1^1;
  • sbit E=P2^5;
  • uchar temp,i=0,a=0,b=0,c=0,d=0,e=0,f=0,g=0;
  • long num,num1,num2,num3,value,value1;
  • uchar table[10];
  • uchar table2[10];
  • uchar table3[10];
  • uchar table4[10];
  • uchar code table1[]="0123456789";
  • void main()
  • {
  •         Init_lcd();
  •         while(1)
  •         {
  •           keyscan1();
  •           keyscan2();
  •           keyscan3();
  •           keyscan4();
  •         }
  • }
  • void keyscan1()
  • {
  •   key=0xfe;
  •         temp=key;
  •         temp=temp&0xf0;
  •         if(temp!=0xf0)
  •         {
  •                 delay(10);
  •                 temp=key;
  •           temp=temp&0xf0;
  •                 if(temp!=0xf0)
  •                 {
  •                         switch(temp)
  •                     {
  •           case 0xe0:
  •                                                         if(f==0)
  •                                                                                 {
  •                                                           if(e==0)
  •                                                             table='1';
  •                                                     if(e==1)
  •                                                             table2='1';
  •                                                                            }
  •                                                                                 if(f==1)
  •                                                           table3='1';
  •                                                                                 if(f==2)
  •                                                           table4='1';
  •                                                                                  write_dat('1');
  •                                                   break;
  •                                         case 0xd0:
  •                                                         if(f==0)
  •                                                                                 {
  •                                                           if(e==0)
  •                                                              table='2';
  •                                                     if(e==1)
  •                                                              table2='2';
  •                                                                           }
  •                                                                                 if(f==1)
  •                                                           table3='2';
  •                                                                                 if(f==2)
  •                                                           table4='2';
  •                                                   write_dat('2');
  •                                                   break;
  •                                         case 0xb0:
  •                                                         if(f==0)
  •                                                                                 {
  •                                                           if(e==0)
  •                                                             table='3';
  •                                                     if(e==1)
  •                                                             table2='3';
  •                                                                           }
  •                                                                                 if(f==1)
  •                                                           table3='3';
  •                                                                                 if(f==2)
  •                                                           table4='3';
  •                                                   write_dat('3');
  •                                                   break;
  •                                         case 0x70:
  •                                                         if(f==0)
  •                                                                                 {
  •                                                           if(e==0)
  •                                                              table='4';
  •                                                     if(e==1)
  •                                                              table2='4';
  •                                                                           }
  •                                                                                 if(f==1)
  •                                                           table3='4';
  •                                                                                 if(f==2)
  •                                                           table4='4';
  •                                                   write_dat('4');
  •                                                   break;
  •         }
  •                                 i++;
  •                                 while(temp!=0xf0)
  •                                 {
  •                                         temp=key;
  •                 temp=temp&0xf0;
  •         }
  •                 }
  •         }
  • }
  • void keyscan2()
  • {
  •   key=0xfd;
  •         temp=key;
  •         temp=temp&0xf0;
  •         if(temp!=0xf0)
  •         {
  •                 delay(10);
  •                 temp=key;
  •           temp=temp&0xf0;
  •                 if(temp!=0xf0)
  •                 {
  •                         switch(temp)
  •                     {
  •           case 0xe0:
  •                                                         if(f==0)
  •                                                                                 {
  •                                                           if(e==0)
  •                                                              table='5';
  •                                                     if(e==1)
  •                                                              table2='5';
  •                                                                           }
  •                                                                                 if(f==1)
  •                                                           table3='5';
  •                                                                                 if(f==2)
  •                                                           table4='5';
  •                                                   write_dat('5');
  •                                                   break;
  •                                         case 0xd0:
  •                                                         if(f==0)
  •                                                                                 {
  •                                                           if(e==0)
  •                                                              table='6';
  •                                                     if(e==1)
  •                                                              table2='6';
  •                                                                           }
  •                                                                                 if(f==1)
  •                                                           table3='6';
  •                                                                                 if(f==2)
  •                                                           table4='6';
  •                                                   write_dat('6');
  •                                                   break;
  •                                         case 0xb0:
  •                                                         if(f==0)
  •                                                                                 {
  •                                                           if(e==0)
  •                                                              table='7';
  •                                                     if(e==1)
  •                                                              table2='7';
  •                                                                           }
  •                                                                                 if(f==1)
  •                                                           table3='7';
  •                                                                                 if(f==2)
  •                                                           table4='7';
  •                                                   write_dat('7');
  •                                                   break;
  •                                         case 0x70:
  •                                                         if(f==0)
  •                                                                                 {
  •                                                           if(e==0)
  •                                                              table='8';
  •                                                     if(e==1)
  •                                                              table2='8';
  •                                                                           }
  •                                                                                 if(f==1)
  •                                                           table3='8';
  •                                                                                 if(f==2)
  •                                                           table4='8';
  •                                                   write_dat('8');
  •                                                   break;
  •         }
  •                                 i++;
  •                                 while(temp!=0xf0)
  •                                 {
  •                                         temp=key;
  •                 temp=temp&0xf0;
  •         }
  •                 }
  •         }
  • }
  • void keyscan3()
  • {
  •   key=0xfb;
  •         temp=key;
  •         temp=temp&0xf0;
  •         if(temp!=0xf0)
  •         {
  •                 delay(10);
  •                 temp=key;
  •           temp=temp&0xf0;
  •                 if(temp!=0xf0)
  •                 {
  •                         switch(temp)
  •                     {
  •           case 0xe0:
  •                                                         if(f==0)
  •                                                                                 {
  •                                                           if(e==0)
  •                                                              table='9';
  •                                                     if(e==1)
  •                                                              table2='9';
  •                                                                           }
  •                                                                                 if(f==1)
  •                                                           table3='9';
  •                                                                                 if(f==2)
  •                                                           table4='9';
  •                                                                                 i++;
  •                                                   write_dat('9');
  •                                                   break;
  •                                         case 0xd0:
  •                                                         if(f==0)
  •                                                                                 {
  •                                                           if(e==0)
  •                                                              table='0';
  •                                                     if(e==1)
  •                                                              table2='0';
  •                                                                           }
  •                                                                                 if(f==1)
  •                                                           table3='0';
  •                                                                                 if(f==2)
  •                                                           table4='0';
  •                                                                                 i++;
  •                                                   write_dat('0');
  •                                                   break;
  •                                         case 0xb0:
  •                                                          f++;
  •                                                   g++;
  •                                                   if(g==2)
  •                                                                                         f++;
  •                                                   i=0;
  •                                                         write_dat('.');
  •                                                   break;
  •                                         case 0x70:
  •                                                         write_dat('=');
  •                                                         num=atol(table);
  •                                                   num1=atol(table2);
  •                                                   num2=atol(table3);
  •                                                   num3=atol(table4);
  •                                                   if(a==1)
  •                                                     count_add();
  •                                                                                 if(b==1)
  •                                                     count_sub();
  •                                                                                 if(c==1)
  •                                                     count_mul();
  •                                                                                 if(d==1)
  •                       count_div();
  •                                                   break;
  •         }
  •                                 while(temp!=0xf0)
  •                                 {
  •                                         temp=key;
  •                 temp=temp&0xf0;
  •         }
  •                 }
  •         }
  • }
  • void keyscan4()
  • {
  •   key=0xf7;
  •         temp=key;
  •         temp=temp&0xf0;
  •         if(temp!=0xf0)
  •         {
  •                 delay(10);
  •                 temp=key;
  •           temp=temp&0xf0;
  •                 if(temp!=0xf0)
  •                 {
  •                         switch(temp)
  •                     {
  •           case 0xe0:
  •                                                         write_dat('+');
  •                                                   a++;
  •                                                   break;
  •                                         case 0xd0:
  •                                                         write_dat('-');
  •                                                   b++;
  •                                                   break;
  •                                         case 0xb0:
  •                                                         write_dat('*');
  •                                                   c++;
  •                                                   break;
  •                                         case 0x70:
  •                                                         write_dat('/');
  •                                                   d++;
  •                                                   break;
  •         }
  •                                 i=0;
  •                                 f=0;
  •                                 e++;
  •                                 while(temp!=0xf0)
  •                                 {
  •           temp=key;
  •                 temp=temp&0xf0;
  •         }
  •                 }
  •         }
  • }
  • void Init_lcd()
  • {
  •   write_com(0x38);
  •         write_com(0x0e);
  •         write_com(0x06);
  •         write_com(0x01);
  •         write_com(0x80);
  • }
  • void write_com(uchar com)
  • {
  •   RS=0;
  •         RW=0;
  •         E=1;
  •         lcd=com;
  •         delay(10);
  •         E=0;
  • }
  • void write_dat(uchar dat)
  • {
  •   RS=1;
  •         RW=0;
  •         E=1;
  •         lcd=dat;
  •         delay(10);
  •         E=0;
  • }
  • void delay(uchar z)
  • {
  •   uchar x,y;
  •         for(x=z;x>0;x--)
  •             for(y=112;y>0;y--);
  • }
  • void count_add()
  • {
  •   value=num+num1;
  •         value1=num2+num3;
  •         if(value1>=10)
  •         {
  •                 value++;
  •           value1=value1-10;
  •         }
  •         write_com(0x80+0x49);
  •         show_int();
  •         show_float();
  •         while(1);
  • }
  • void count_sub()
  • {
  •   value=num-num1;
  •         value1=num2-num3;
  •         if(value1<0)
  •         {
  •    value--;
  •          value1=num2-num3+10;
  •   }
  •         write_com(0x80+0x49);
  •         show_int();
  •         show_float();
  •         while(1);
  • }
  • void count_mul()
  • {
  •   value=num*num1;
  •         write_com(0x80+0x49);
  •         show_int();
  •         while(1);
  • }
  • void count_div()
  • {
  •   value=num/num1;
  •         write_com(0x80+0x49);
  •         show_int();
  •         while(1);
  • }


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:123289 發(fā)表于 2017-12-28 22:07 | 只看該作者
方法1、找到高級函數(shù)庫。
方法2、自己用+-*/編寫高級函數(shù),這需要你有非常好的數(shù)學(xué)水準(zhǔn)。
如:開方可用牛頓疊代;SIN可用泰勒級數(shù)……當(dāng)然也有其它方式。

我自己只用匯編寫過開方程序,估計不合你的需求。
回復(fù)

使用道具 舉報

板凳
ID:164602 發(fā)表于 2017-12-29 08:54 | 只看該作者
Keil自帶的數(shù)學(xué)計算庫函數(shù)MATH.H中有部分高級計算:
絕對值、指數(shù)函數(shù)、自然對數(shù)、10為底的對數(shù)、平方根、正弦、余弦、正切、反正弦、反余弦、反正切、雙曲余弦、雙曲正弦、雙曲正切、返回最小、最大整數(shù)、x的y次方。
呵呵,夠你用一陣子了!
回復(fù)

使用道具 舉報

地板
ID:78322 發(fā)表于 2017-12-29 11:27 | 只看該作者
這個自己寫算法不太現(xiàn)實,一來這不是你學(xué)習(xí)的重點,二來有些算法很復(fù)雜難保準(zhǔn)確性,三大多數(shù)編譯器有自帶的函數(shù)庫,調(diào)用即可,方便可行。所以我建議,直接找函數(shù)庫調(diào)用。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区欧美在线 | 国产精品色一区二区三区 | 精品国产欧美一区二区 | 欧美成人一区二免费视频软件 | 国产一区二区三区免费观看在线 | 免费久久久久久 | 精品国产乱码久久久久久蜜柚 | 91精品国产91久久久久久密臀 | 国产黄色精品 | 国产在线观看免费 | 成人一区二区三区在线 | 色又黄又爽网站www久久 | 久草日韩 | 99reav| 亚洲一区二区三区视频 | 国产精品久久久久久久久污网站 | 国产精品一区久久久久 | 日韩伦理电影免费在线观看 | 一区二区三区视频在线免费观看 | 日本亚洲一区 | 国产精品夜夜春夜夜爽久久电影 | 国产成人黄色 | av色噜噜| 视频在线一区二区 | 国产精品午夜电影 | 国产精品大片 | 日韩亚洲欧美一区 | 免费国产视频 | 一区在线视频 | 九九国产 | 国产成人亚洲精品 | 毛片在线看片 | 黄瓜av| 日本亚洲欧美 | 国产一区二区三区四区 | 国产日韩一区二区 | 中文字幕国产精品 | 精品国产乱码久久久久久图片 | 久久久久免费精品国产小说色大师 | 精品乱码一区二区 | 精品视频一区二区三区在线观看 |