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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2770|回復: 3
打印 上一主題 下一主題
收起左側

51單片機設計高級計算器

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

  • #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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩av成人 | 国产精品久久久久久久久久久久久 | 99pao成人国产永久免费视频 | 精品视频久久久 | 亚洲欧美成人影院 | 久久国产精品久久 | 91免费观看 | 亚洲欧美精品在线 | 国产美女h视频 | 亚洲品质自拍视频网站 | 久久久爽爽爽美女图片 | www.久| 久久精品久久久久久 | 一二区视频 | 日本不卡高字幕在线2019 | 91国在线视频 | www.国产一区 | 亚洲色图综合 | 天天爽天天干 | 久久网一区二区 | 国产精品久久久久久久久久99 | 蜜桃av鲁一鲁一鲁一鲁 | 精品伊人 | 91精品国产综合久久精品 | 久久久999国产精品 中文字幕在线精品 | 久久丝袜 | 日日天天 | 亚洲福利网站 | 久久国产精品久久久久久 | 在线亚洲一区二区 | 狠狠躁18三区二区一区 | 中文字幕日韩欧美一区二区三区 | 欧美综合在线观看 | 亚洲精品中文字幕在线观看 | 亚洲3p| 亚洲1区 | 免费欧美视频 | 乱码av午夜噜噜噜噜动漫 | 伊人久麻豆社区 | 天天影视综合 | 国产精品96久久久久久 |