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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機計算器設(shè)計(可進行加減乘除以及平方等運算)帶仿真與源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:312864 發(fā)表于 2018-4-21 10:34 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
基于單片機的計算器,矩陣鍵盤輸入,lcd1602液晶屏顯示,可以進行加減乘除以及平方等運算

計算器仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<reg52.h>
  2. #include<math.h>
  3. #include"define.h"         //定義頭文件
  4. #include"delay.h"         //延遲頭文件
  5. #include"display.h"         //顯示頭文件
  6. #include"scan.h"         //掃描頭文件
  7. #include"LCD1602.h"         //LCD1602頭文件
  8. #include"interrupt.h" //中斷頭文件
  9. void main()                   //主程序
  10. {
  11.         uchar error=0,i,first=0,dot1,dot2,dot1_num,dot2_num,minus1,minus2;//錯誤標(biāo)志、第一次清屏標(biāo)志、小數(shù)點標(biāo)志以及小數(shù)點個數(shù) 負(fù)號標(biāo)志、負(fù)號個數(shù)                 
  12.         uchar Key_num,last_key_num;                                                                 //鍵號
  13.         uchar flag=0,equal_flag;                                          //運算符、等于符
  14.         double num1=0,num2=0,num=0,result=0;                 //第一個數(shù)、第二個數(shù)、計算結(jié)果
  15.         uchar first_num=0,second_num=0;
  16.         InitLcd();
  17.         EA=1;
  18.         ET0=1;
  19.         TMOD=0X01;
  20.         TH0=(65536-500)/256;
  21.         TL0=(65536-500)%256;
  22.         write_com(0x80+0x40+15);  
  23.         write_Dat('0');
  24.         write_com(0x80);               
  25.         while(1)
  26.         {        
  27.                 while(key_scan()==0xff);
  28.                 TR0=1;
  29.                 if(first==0)
  30.                 {
  31.                         first=1;
  32.                          write_com(0x01);         
  33.                 }
  34.                 Key_num=key_scan();
  35.                 switch(key_scan())
  36.                 {
  37.                
  38.                         case 6:write_Dat('7');num=7;break;
  39.                         case 7:write_Dat('8');num=8;break;
  40.                         case 8:write_Dat('9');num=9;break;
  41.                         case 9:
  42.                                         if(last_key_num!=Key_num)
  43.                                         {
  44.                                                 write_Dat('+');
  45.                                                 flag=1;         
  46.                                         }break;
  47.                         case 10:
  48.                                         if(last_key_num!=Key_num)
  49.                                         {
  50.                                                 write_Dat('^');
  51.                                                 flag=5;
  52.                                         }break;
  53.                         case 11:write_Dat('4');num=4;break;
  54.                         case 12:write_Dat('5');num=5;break;
  55.                         case 13:write_Dat('6');num=6;break;
  56.                         case 14:
  57.                                         if(last_key_num!=Key_num)
  58.                                         {
  59.                                                 write_Dat('-');
  60.                                                 flag=2;
  61.                                         }break;
  62.                         case 15:
  63.                                 if(last_key_num!=Key_num)
  64.                                         {
  65.                                                 write_Dat('T');
  66.                                                 flag=6;
  67.                                         }break;
  68.                         case 16:write_Dat('1');num=1;break;
  69.                         case 17:write_Dat('2');num=2;break;
  70.                         case 18:write_Dat('3');num=3;break;
  71.                         case 19:
  72.                                         if(last_key_num!=Key_num)
  73.                                         {
  74.                                                 write_Dat('*');
  75.                                                 flag=3;
  76.                                         }break;
  77.                         case 21:write_Dat('0');num=0;break;
  78.                         case 22:
  79.                                         if(last_key_num!=Key_num)
  80.                                         {
  81.                                                 if(flag==0)
  82.                                                 {
  83.                                                         minus1++;
  84.                                                         if(minus1==1)
  85.                                                         {
  86.                                                                 write_Dat('-');        
  87.                                                         }
  88.                                                 }
  89.                                                 else
  90.                                                 {
  91.                                                          minus2++;
  92.                                                          if(minus2==1)
  93.                                                          {
  94.                                                                  write_Dat('-');        
  95.                                                          }
  96.                                                 }
  97.                                         } break;
  98.                         case 23:
  99.                                         if(last_key_num!=Key_num)
  100.                                         {        
  101.                                                 if(flag==0)
  102.                                                 {
  103.                                                         dot1++;
  104.                                                         if(dot1==1)
  105.                                                         {
  106.                                                                 write_Dat('.');        
  107.                                                         }
  108.                                                 }
  109.                                                 else
  110.                                                 {
  111.                                                          dot2++;
  112.                                                          if(dot2==1)
  113.                                                          {
  114.                                                                  write_Dat('.');        
  115.                                                          }
  116.                                                 }
  117.                                         } break;
  118.                                        
  119.                         case 24:
  120.                                 if(last_key_num!=Key_num)
  121.                                         {
  122.                                                 write_Dat('/');
  123.                                                 flag=4;
  124.                                         }break;
  125.                         case 25:
  126.                                 if(last_key_num!=Key_num)
  127.                                 {
  128.                                         write_Dat('=');
  129.                                         equal_flag=1;
  130.                                 }break;
  131.                 }
  132.                 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)                                //第一個數(shù)
  133.                 {
  134.                         if(flag==0)
  135.                         {

  136.                                 num1=num1*10+num;        
  137.                                 num=0;
  138.                                 if(dot1!=0)
  139.                                 {
  140.                                         dot1_num++;               
  141.                                 }
  142.                                 first_num=1;
  143.                         }
  144.                         if(flag!=0)
  145.                         {
  146.                                 num2=num2*10+num;
  147.                                 num=0;
  148.                                 if(dot2!=0)
  149.                                 {
  150.                                         dot2_num++;        
  151.                                 }
  152.                                 second_num=1;
  153.                         }
  154.                 }
  155.                 if(equal_flag==1&&first_num==1)
  156.                 {        
  157.                         if(dot1!=0)
  158.                         {
  159.                                  num1=num1/pow(10,dot1_num);
  160.                                  dot1=0;
  161.                         }
  162.                         if(dot2!=0)
  163.                         {
  164.                                  num2=num2/pow(10,dot2_num);
  165.                                  dot2=0;
  166.                         }
  167.                         if(minus1!=0)
  168.                         {
  169.                                 num1=num1*(-1);
  170.                         }
  171.                         if(minus2!=0)
  172.                         {
  173.                             num2=num2*(-1);
  174.                         }
  175.                         if(second_num!=0)
  176.                         {
  177.                                 switch(flag)
  178.                                 {
  179.                                         case 1:result=num1+num2;break;
  180.                                         case 2:result=num1-num2;break;
  181.                                         case 3:result=num1*num2;break;
  182.                                         case 4:
  183.                                                         if(num2!=0)
  184.                                                          {  
  185.                                                                   result=num1/num2;
  186.                                                           }
  187.                                                         else
  188.                                                         {
  189.                                                                   write_com(0x80+0x40+10);
  190.                                                                   for(i=0;i<5;i++)
  191.                                                                   {
  192.                                                                                   write_Dat(table2[i]);
  193.                                                                   }        
  194.                                                                    error=1;
  195.                                                         } break;
  196.                                         case 5:        result=pow(num1,num2);break;
  197.                                         case 6: result=pow(num1,1/num2);break;                                                                                                                                          
  198.                                 }
  199.                         }
  200.                
  201.                         if(error!=1)
  202.                          display(result);
  203.                 }
  204.         
  205.                 if(Key_num==20)                //清零
  206.                 {
  207.                         num1=num2=result=0;
  208. ……………………

  209. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
基于單片機計算器.rar (85.18 KB, 下載次數(shù): 63)


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

使用道具 舉報

沙發(fā)
ID:242547 發(fā)表于 2018-5-2 21:21 | 只看該作者
樓主,目標(biāo)無法創(chuàng)建怎么回事啊
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99国产精品99久久久久久粉嫩 | 色爱区综合 | 日韩福利一区 | 欧美久久综合 | 亚洲日韩中文字幕一区 | 日韩在线视频免费观看 | 偷拍自拍第一页 | 日韩精品三区 | 亚洲欧美日韩精品久久亚洲区 | 亚洲人成人一区二区在线观看 | 亚洲成色777777在线观看影院 | 青久草视频| 成人av免费 | 日本在线视频中文字幕 | 米奇7777狠狠狠狠视频 | 作爱视频免费看 | 亚洲精品欧美一区二区三区 | 国产亚洲精品久久午夜玫瑰园 | 不卡一区二区三区四区 | www精品美女久久久tv | av中文字幕在线 | 欧美一级片在线看 | 亚洲精品二三区 | 999精品视频| 成年人在线观看 | 久草视频网站 | 欧美高清一级片 | 亚洲精品电影网在线观看 | 成人欧美一区二区三区在线播放 | 精品在线一区 | 国产精品国产精品国产专区不片 | 九九热久久免费视频 | 四虎成人精品永久免费av九九 | 国产精品久久久久久av公交车 | 国产精品一区在线观看 | 99久久久久久久久 | 亚洲免费一区二区 | 国产精品视频免费观看 | 91精品国产一区 | av一区二区在线观看 | 99热精品在线 |