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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的兩位數相加的源程序(計算器)

[復制鏈接]
跳轉到指定樓層
樓主
ID:323895 發表于 2018-5-7 01:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
實現兩位數相加,這里我用到了矩陣鍵盤和數碼管以及獨立按鍵,獨立按鍵控制加法符號和等于符號,矩陣鍵盤為0-F這16個數,先寫十位再寫各位,數碼管顯示,最后,計算出結果以后再利用數碼管顯示結果,同時蜂鳴器響。
注意,我用的芯片是stc89c52

單片機源程序如下:
  1. #include"reg52.h"
  2. //兩位數!!!
  3.   int i;
  4. char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  5.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
  6. int number_1,number_2;int m=20;int value;int numberr[5];int g=1;
  7. sbit a=P2^2;          
  8. sbit b=P2^3;
  9. sbit c=P2^4;
  10. int n=0;
  11. int my;
  12. int uu=1;
  13. sbit beep=P1^5;
  14. int din_K1=0;
  15. int din_K3=0;
  16. int yy=990;
  17. char mm_1;
  18. char bb;
  19. char mm_2;
  20. sbit jia=P3^1;
  21. sbit deng=P3^2;
  22. ////////////////
  23. void Init()
  24. {
  25.         SCON=0X50;                        //設置為工作方式1
  26.         TMOD=0X20;                        //設置計數器工作方式2
  27.         PCON=0X80;                        //波特率加倍
  28.         TH1=0XF3;                                //計數器初始值設置,注意波特率是4800的
  29.         TL1=0XF3;
  30.         ES=1;                                                //打開接收中斷
  31.         EA=1;                                                //打開總中斷
  32.         TR1=1;                                        //打開計數器
  33. }


  34. //////////////
  35. void delay(int d)
  36. {
  37. while(d)
  38.    {
  39.         d--;
  40.    }
  41. }
  42. void check()
  43. {         int z;

  44.         P1=0x0f;
  45.         if(P1!=0x0f)//讀取按鍵是否按下
  46.         {
  47.                 delay(3000);//延時10ms進行消抖
  48.                 if(P1!=0x0f)//再次檢測鍵盤是否按下
  49.                 {       
  50.                         //測試列
  51.                         P1=0X0F;
  52.                         switch(P1)
  53.                         {
  54.                                 case(0X07):        value=0;break;
  55.                                 case(0X0b):        value=1;break;
  56.                                 case(0X0d): value=2;break;
  57.                                 case(0X0e):        value=3;break;
  58.                         }
  59.                         //測試行
  60.                         P1=0XF0;
  61.                         switch(P1)
  62.                         {
  63.                                 case(0X70):        value=value;break;
  64.                                 case(0Xb0):        value=value+4;break;
  65.                                 case(0Xd0): value=value+8;break;
  66.                                 case(0Xe0):        value=value+12;break;
  67.                         }
  68.                         while((z<50)&&(P1!=0xf0))         //檢測按鍵松手檢測
  69.                         {
  70.                                 delay(1000);
  71.                                 z++;
  72.                         }
  73.                    din_K1=1;
  74.                    din_K3=1;
  75.                    n++;
  76.                    numberr[n]=value;
  77.                
  78.                   
  79.                 }
  80.     }       
  81.   
  82. }

  83. void oror()
  84. {


  85. if(jia==0)
  86.   {
  87.    delay(1000);
  88.    if(jia==0)
  89.      {
  90.            din_K1=0;
  91.          
  92.          }
  93.   }
  94.   
  95.   




  96. }
  97. void end()
  98. {

  99.   if(deng==0||uu==0)
  100.   {
  101.    delay(1000);
  102.    if(deng==0||uu==0)
  103.     {
  104.         din_K3=0;
  105.         g=0;
  106.           value=numberr[1]*10+numberr[2]+numberr[3]*10+numberr[4];
  107.           number_1=value/10;
  108.           number_2=value%10;
  109.           }
  110.   }
  111.   


  112. }





  113. void main()
  114. {
  115. Init();
  116.   while(g)
  117. {       
  118.     check();


  119.        
  120.     while(din_K1&&din_K3&&uu)
  121.    {
  122.          switch(n%2)
  123.          {
  124.           case 0:c=0;b=0;a=0;P0=smgduan[value];delay(1200);P0=smgduan[0];c=0;b=0;a=1;P0=smgduan[numberr[n-1]];delay(1200);P0=smgduan[0]; break;
  125.           case 1:c=0;b=0;a=1;P0=smgduan[value];delay(1200);P0=smgduan[0];break;
  126.           

  127.          }
  128.          break;
  129.    }
  130. //        oror();
  131.         end();
  132.        
  133.           
  134.        


  135.          

  136.    }
  137.            while(yy)
  138. {
  139. beep=~beep;
  140. delay(10);
  141. yy--;
  142. }


  143.       while(1)
  144.           {         int p=0;
  145.                 for(p=0;p<2;p++)
  146.                 {
  147.                   switch(p)
  148.                   {
  149.                    case 0:c=0;b=0;a=0;P0=smgduan[number_2];delay(1000);P0=smgduan[0];break;
  150.                    case 1:c=0;b=0;a=1;P0=smgduan[number_1];delay(1000);P0=smgduan[0];break;
  151.                   }
  152.                 }
  153.           }







  154. }



  155.   void Usart() interrupt 4
  156. {
  157.    bb=SBUF;
  158.    RI=0;

  159.   if(bb==0x3d)
  160.   {        uu=0;
  161.    
  162.   }
  163.   
  164.   else
  165.   {
  166.   RI=0;
  167.   mm_1=number_1+0x30;
  168.   mm_2=number_2+0x30;
  169.         SBUF=mm_1;
  170.         while(!TI);
  171.         TI=0;
  172.         SBUF=mm_2;
  173.         while(!TI);
  174.         TI=0;
  175.    }

  176. //        RI=0;
  177. //        SBUF=0x30;;//將接收到的數據放入到發送寄存器
  178. //        while(!TI);                         //等待發送數據完成
  179. //        TI=0;                                                 //清除發送完成標志位                                       
  180. }
復制代碼

所有資料51hei提供下載:
計算1111111111器——2位數相加.rar (26.28 KB, 下載次數: 30)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:556023 發表于 2019-6-5 21:40 | 只看該作者
我想擁有這個資源可以嗎?
回復

使用道具 舉報

板凳
ID:983382 發表于 2021-12-1 19:48 | 只看該作者
你好,有接線圖碼?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区免费视频 | 亚洲天堂中文字幕 | 亚洲欧美国产毛片在线 | 国产精品欧美一区二区三区不卡 | 精品日韩一区 | 日本免费一区二区三区四区 | 欧美片网站免费 | 亚洲欧美久久 | 拍真实国产伦偷精品 | 成人精品一区亚洲午夜久久久 | 国产视频一二三区 | 成人在线中文字幕 | 成人免费一级视频 | 亚洲天堂一区 | 一级黄片一级毛片 | 久久久久久国产精品 | 亚洲成人免费在线 | 亚洲91精品 | 超碰欧美 | 亚洲国产成人在线 | 亚洲精品一区二三区不卡 | 国产精品69毛片高清亚洲 | 视频一二三区 | 91国内产香蕉| 黄网站在线播放 | 亚洲精品专区 | 成人性生交大片免费看中文带字幕 | 久久影音先锋 | 亚洲一区中文 | 欧美一页 | 亚洲国产精品人人爽夜夜爽 | 国产资源网| 日韩一区二区成人 | 91精品国产91综合久久蜜臀 | 激情久久网 | 久久久久久久久久久国产 | 999免费观看视频 | 欧美日韩精品综合 | 日韩在线小视频 | 日韩中文字幕一区 | 欧美成人精品一区二区男人看 |