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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

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

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美视频一区二区三区 | 国产人免费人成免费视频 | 韩日av片| 日韩在线一区二区 | 亚洲精品久久久久久下一站 | 欧美日韩成人影院 | 久久伊人免费视频 | 精品久久久久一区二区国产 | 99久久成人 | 欧美精品综合在线 | 综合色久| 日日骚网 | 欧美性生活一区二区三区 | 久久一起草| 欧美在线一区二区三区 | 久久国产成人 | 精品国产一区二区三区日日嗨 | 天天干com| 国产一区999| 亚洲日日操 | 成年人黄色一级毛片 | 日韩精品一区二区三区中文字幕 | 国产美女免费视频 | 成人亚洲视频 | 中文字幕亚洲区 | 黄色亚洲网站 | 免费网站国产 | 免费高清成人 | 免费国产视频 | 国产99视频精品免费播放照片 | 免费欧美 | 中文字幕av免费 | 久久精品国产亚洲 | 国产精品久久久久久婷婷天堂 | 91www在线观看| 色爱区综合 | 国产精品久久久久永久免费观看 | 免费成人高清在线视频 | 亚洲高清在线播放 | 久久精品国产久精国产 | 天天爽夜夜操 |