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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10979|回復: 8
收起左側

51單片機簡易計算器(單片機小實驗,含C程序和Ptotues電路圖)

  [復制鏈接]
ID:331936 發表于 2018-5-17 10:44 | 顯示全部樓層 |閱讀模式
51單片機簡易計算器仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png

單片機源程序如下:
  1. #include"reg52.h"
  2. #include"math.h"

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. #define key P3
  6. #define duan P2
  7. #define wei P1

  8. sbit led=P0^0;
  9. sbit buzzer=P0^1;

  10. uchar num,temp,num1,i=0;
  11. long bczs=0,czs=0,jiguo=0,jiguo1=0;
  12. uchar czs12=1;          //輸入數的選擇標志位,1為第一個數,2為第二個數
  13. uchar yiweiflag,qinflag;  //移位標志

  14. uchar code shuzi[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};         //0~9,-,
  15. uchar code weizi[9]={0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
  16. uchar code error[10]={0xff,0xaf,0xc0,0xaf,0xaf,0x86,0xff,0xff,0xff};//error
  17. uchar playshuzu[9],fuhao;
  18. uchar zhi,weishu=0;

  19. void init();                  //函數申明
  20. uchar keyscan();
  21. uchar scanzhi();
  22. void display();
  23. void duzhichuli();
  24. void zhuandisplayjiguo();
  25. void jiafa();
  26. void jianfa();
  27. void chengfa();
  28. void chufa();
  29. void qin();
  30. void displayerror();
  31. //======================================
  32. void main()                          //主函數
  33. {
  34.         init();
  35.         display();
  36.         while(1)
  37.         {
  38.                 duzhichuli();
  39.         }
  40. }
  41. //===============================================================================
  42. void init()
  43. {
  44.         uchar i;
  45.         czs12=1;
  46.         yiweiflag=1;  //1不移
  47.         qinflag=0;    //不清除
  48.         duan=shuzi[8];
  49.         wei=weizi[5];
  50.         playshuzu[1]=shuzi[0];
  51.         for(i=2;i<9;i++)
  52.                 playshuzu[i]=shuzi[10];
  53.                
  54.         bczs=0;czs=0;jiguo=0,jiguo1=0;               
  55. }
  56. //===============================================================================
  57. void delay(uint x)
  58. {
  59.         uchar y;
  60.         for(x;x>0;x--)
  61.                 for(y=112;y>0;y--);
  62. }

  63. //====================================
  64. uchar keyscan()
  65. {
  66. unsigned char recode,i,j;
  67.         for(i=0;i<4;i++)
  68.                 {
  69.                         P3=~(0x01<<i);
  70.                         recode=P3>>4;
  71.                         if(recode<0x0f)
  72.                         {
  73.                         for(j=0;j<4;j++)
  74.                         {if(!(recode&0x01<<j))break;}
  75.                         return (i<<2)+(j+1); //返回鍵值 1-16
  76.                         }
  77.                         delay(5); //延時5ms
  78.                 }
  79.    return 0; //無按鍵返回
  80. }
  81. //========================================
  82. uchar scanzhi()
  83. {
  84.         uchar zhi,k;
  85.         k=keyscan();
  86.         switch(k)
  87.         {
  88.                 case 0: zhi=27;break;
  89.                 case 1: zhi=7;break;
  90.                 case 2: zhi=8;break;
  91.                 case 3: zhi=9;break;
  92.                 case 4: zhi=24;break;   // /

  93.                 case 5: zhi=4;break;
  94.                 case 6: zhi=5;break;
  95.                 case 7: zhi=6;break;
  96.                 case 8: zhi=23;break;   //*

  97.                 case 9: zhi=1;break;
  98.                 case 10: zhi=2;break;
  99.                 case 11: zhi=3;break;
  100.                 case 12: zhi=22;break;   //-

  101.                 case 13: zhi=26;break;        //nc
  102.                 case 14: zhi=0;break;
  103.                 case 15: zhi=25;break;  //=
  104.                 case 16: zhi=21;break;  //+
  105.         }
  106.         return(zhi);
  107. }
  108. //===========================================
  109. void duzhichuli()
  110. {
  111.         uchar tt,u;

  112.         tt=scanzhi();
  113.         if(tt!=27)
  114.         {
  115.                 led=0;
  116.                 buzzer=0;
  117.                 if(tt<=9)//數字輸入
  118.                 {
  119.                         if(qinflag==1)  qin();
  120.                                 qinflag=0;
  121.                         if(yiweiflag!=1)
  122.                         {
  123.                                 for(u=8;u>1;u--)                         //移位輸入
  124.                                 {
  125.                                         playshuzu[u]=playshuzu[u-1];
  126.                                 }
  127.                         }
  128.                         yiweiflag=0;    //移位
  129.                         playshuzu[1]=shuzi[tt];       
  130.                         if(czs12==1)   bczs=bczs*10+tt;                        //
  131.                         if(czs12==2)   czs=czs*10+tt;               
  132.                 }
  133.                 if(tt>20)//符號輸入
  134.                 {
  135.                         switch(tt)
  136.                         {
  137.                                 case 21:         jiafa();break;                //+
  138.                                 case 22:    jianfa();break;                //-
  139.                                 case 23:    chengfa();break;        //*
  140.                                 case 24:    chufa();break;
  141.                                 case 25:    zhuandisplayjiguo();break;                //=
  142.                                 case 26:    init();break;                //nc
  143.                         }               
  144.                 }
  145.         }
  146.   //-----------------------------------------------
  147.         while(tt!=27)           //松手檢測
  148.         {
  149.                 led=0;
  150.                 buzzer=0;
  151.                 tt=scanzhi();
  152.                 delay(1);
  153.                 if(tt==27) goto chu;
  154.         }

  155.         chu: delay(1);
  156.         led=1;
  157.         buzzer=1;
  158. }

  159. //============================================
  160. void display()
  161. {

  162.         TMOD=0x01;
  163.         TH0=(65536-200)/256;
  164.         TL0=(65536-200)%256;
  165.         EA=1;
  166.         ET0=1;
  167.         TR0=1;

  168. }
  169. void TIME0(void) interrupt 1
  170. {
  171.         TH0=(65536-200)/256;
  172.         TL0=(65536-200)%256;
  173.         i++;
  174.         if(i==9) i=1;
  175.             wei=weizi[i];
  176.             duan=playshuzu[i];       
  177. }
  178. //===============================================           //顯示數轉操作數
  179. void zhuandisplayjiguo()
  180. {
  181.         uchar i,k;
  182.         long ttt;

  183.         for(i=1;i<9;i++)
  184.                 playshuzu[i]=shuzi[10];
  185.     //----------------------------------------
  186.         switch(fuhao)
  187.         {
  188.                 case 1: jiguo=bczs+czs;break;
  189.                 case 2: jiguo=bczs-czs;break;
  190.                 case 3: jiguo=bczs*czs;break;
  191.                 case 4: jiguo=bczs/czs;break;
  192.                 case 0: jiguo=jiguo1;break;
  193.         }
  194.         fuhao=0;

  195.         //----------------------------------------
  196.         ttt=jiguo;
  197.         jiguo1=jiguo;                                                           //顯示處理
  198.         k=1;                                        //取數的個數
  199.     for(i=1;i<=8;i++)
  200.            {
  201.                            if(ttt/10!=0)  k++;
  202.                         ttt=ttt/10;       
  203.            }       

  204.         for(i=8;i>k;i--)
  205.            {
  206.                            playshuzu[i]=shuzi[10];
  207.            }
  208.         if(jiguo<0)  { jiguo=fabs(jiguo);playshuzu[k+1]=shuzi[11]; }   //取正加負號
  209.        
  210.         for(i=1;i<=k;i++)
  211.            {
  212.                            playshuzu[i]=shuzi[jiguo%10];
  213.                         jiguo=jiguo/10;       
  214.            }
  215.         if(jiguo1>99999999) displayerror();
  216.        
  217. }
  218. //===================================================
  219. void qin()
  220. {
  221.         uchar i;
  222.         yiweiflag=1;  //1不移
  223.         playshuzu[1]=shuzi[0];
  224.         for(i=2;i<9;i++)
  225.                 playshuzu[i]=shuzi[10];
  226. }
  227. //===================================================
  228. void displayerror()
  229. {
  230.         uchar i;
  231.         for(i=1;i<=8;i++)
  232.                 playshuzu[i]=error[i];
  233. }
  234. //===================================================
  235. void jiafa()   //+
  236. {

  237.         qinflag=1;
  238.     if(jiguo1!=0) bczs=jiguo1;
  239.         czs=0;
  240.         czs12=2;
  241. ……………………

  242. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
51單片機簡易計算器.rar (50.16 KB, 下載次數: 208)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:429614 發表于 2018-11-21 10:19 | 顯示全部樓層
謝謝 我剛好要學習一下
回復

使用道具 舉報

ID:427256 發表于 2018-12-16 15:44 | 顯示全部樓層
跪謝大佬,救了我的課程設計
回復

使用道具 舉報

ID:461954 發表于 2019-1-4 22:29 來自手機 | 顯示全部樓層
1444522629 發表于 2018-12-16 15:44
跪謝大佬,救了我的課程設計

運行成功了嗎?
回復

使用道具 舉報

ID:542290 發表于 2019-5-26 11:24 | 顯示全部樓層
1444522629 發表于 2018-12-16 15:44
跪謝大佬,救了我的課程設計

可以用嗎?
回復

使用道具 舉報

ID:547782 發表于 2019-5-26 19:31 | 顯示全部樓層
第一次來,向你學習!!
回復

使用道具 舉報

ID:548144 發表于 2019-5-28 08:14 | 顯示全部樓層
感謝分享!
回復

使用道具 舉報

ID:385168 發表于 2020-2-15 15:32 | 顯示全部樓層
今天來學習計算器,謝謝分享。
回復

使用道具 舉報

ID:922067 發表于 2021-5-16 12:31 | 顯示全部樓層
頭文件math.h可以分享一下么
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品免费视频 | 国产成人综合网 | 日韩av在线中文字幕 | 亚洲网在线 | 欧一区| 伊人国产精品 | 免费av电影网站 | 操久久 | 日本中出视频 | 亚洲精品视频一区二区三区 | 亚洲欧美日韩在线 | 特级丰满少妇一级aaaa爱毛片 | 91久久久久| 91av在线免费观看 | 91精品国产综合久久久动漫日韩 | 精品国产乱码久久久久久老虎 | 天天操夜夜艹 | 国产福利91精品一区二区三区 | 成人免费在线观看视频 | 99久9 | 欧美黄色精品 | 日本人和亚洲人zjzjhd | 操视频网站 | 国产精品1 | 日韩高清一区 | 亚洲综合色网站 | 一区二区在线不卡 | 精品国产18久久久久久二百 | 日韩在线观看视频一区 | 欧美日韩综合一区 | 日日骚视频 | 国产精品一区二区三级 | 99久久精品国产毛片 | 超碰免费在 | 亚洲一区二区三区免费观看 | 91精品国产欧美一区二区成人 | 日本黄色一级视频 | 91av在线电影 | 国产精品自产拍在线观看蜜 | 日韩av大片免费看 | 日韩精品久久久久 |