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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機按鍵控制16個LED源代碼,帶有蜂鳴器

[復制鏈接]
跳轉到指定樓層
樓主
用按鍵控制16個LED燈,按鍵按下同時蜂鳴器響,流水燈切換四種樣式,插上電源之后,按下按鍵后燈亮,切換過所有四種樣式之后再按按鍵所有燈滅,之后循環。。。

原理圖:


板子正面:                                       
   
板子反面:


焊的不好,有的線接的時候也沒考慮那么多,能實現正常功能,各位將就著看。。。代碼在附件里。

單片機源程序如下:
  1. #include<reg52.h>
  2. sbit KEY=P1^4;
  3. sbit BUZZER=P1^0;
  4. bit KeySta = 1;                      //當前按鍵狀態  
  5. unsigned int temp=0;                 //記錄T0中斷次數
  6. unsigned char flagls=0;              //定時1s標志
  7. void LED1(unsigned char i);          //函數聲明
  8. void LED2(unsigned char j);
  9. void LED3(unsigned char k);
  10. void LED4(unsigned char m);

  11. void buzzer();
  12. void main()
  13. {
  14.   unsigned char i=0;                    //流水燈的判斷值
  15.   unsigned char j=0;                   //LED閃爍的判斷值
  16.         unsigned char k=0;
  17.         unsigned char m=0;
  18.         bit backup=1;                       //按鍵值備份,保存前一次的掃描值
  19.         unsigned int cnt=0;                 //按鍵計數
  20.         EA=1;                              //使能總中斷
  21.         TMOD=0x01;                         //設置T0為模式1
  22.         TH0=0xF8;                          //為T0賦初值,定時為2ms
  23.         TL0=0xCD;
  24.         ET0=1;                             //使能T0中斷
  25.         TR0=1;                             //啟動T0
  26.         while(1)
  27.         {
  28.                 if(KeySta!=backup)                //當前值與前次值不相等說明此時按鍵有動作
  29.                 {
  30.                         if(backup ==1)                  //如果前次的值為1,則說明當前是彈起動作
  31.                         {
  32.                                 buzzer();
  33.                                 cnt++;                        //按鍵次數加1
  34.                                  if(cnt>4)
  35.         {
  36.                cnt=0;
  37.         }
  38.                         }
  39.                          backup=KeySta;
  40.                  }
  41.                  if(cnt==0)
  42.                  {
  43.                          P0=0xFF;
  44.                          P2=0xFF;
  45.                          BUZZER=1;
  46.                          i=0;
  47.                          j=0;
  48.                          k=0;
  49.                          m=0;
  50.                  }
  51.                  if(cnt==1)                  //按鍵次數為1
  52.                  {
  53.                          LED1(i);
  54.                        
  55.        if(flagls==1)             //判斷1s定時標志
  56.                          {
  57.                                  flagls=0;               //清零定時標志
  58.                                  i++;                    //計數值加1
  59.                                  if(i>=16)
  60.                                  {
  61.                                          i=0;
  62.                                  }
  63.                          }
  64.                  }
  65.                  if(cnt==2)
  66.                  {
  67.                          LED2(j);
  68.                        
  69.        if(flagls==1)             //判斷1s定時標志
  70.                          {
  71.                                  flagls=0;               //清零定時標志
  72.                                  j++;                    //計數值加1
  73.                                  if(j>=2)
  74.                                  {
  75.                                          j=0;
  76.                                  }
  77.                          }
  78.                  }
  79.                  if(cnt==3)
  80.                  {
  81.                          LED3(k);
  82.                        
  83.        if(flagls==1)             //判斷1s定時標志
  84.                          {
  85.                                  flagls=0;               //清零定時標志
  86.                                  k++;                    //計數值加1
  87.                                  if(k>=16)
  88.                                  {
  89.                                          k=0;
  90.                                  }
  91.                          }
  92.                  }
  93.                   if(cnt==4)
  94.                  {
  95.                          LED4(m);
  96.                        
  97.        if(flagls==1)             //判斷1s定時標志
  98.                          {
  99.                                  flagls=0;               //清零定時標志
  100.                                  m++;                    //計數值加1
  101.                                  if(m>=32)
  102.                                  {
  103.                                          m=0;
  104.                                  }
  105.                          }
  106.                  }
  107.          }
  108. }
  109.                                  
  110.                          

  111. void InterruptTimer0() interrupt 1
  112. {
  113.     static unsigned char keybuf = 0xFF;  //掃描緩沖區,保存一段時間內的掃描值
  114.    
  115.     TH0 = 0xF8;  //重新加載初值
  116.     TL0 = 0xCD;
  117.           temp++;         //中斷次數計數值加1
  118.           if(temp>=100)   //中斷1000次即為1s
  119.                 {
  120.                         temp=0;
  121.                         flagls=1;   //設置1s定時標志為1
  122.                 }
  123.     keybuf = (keybuf<<1) | KEY;  //緩沖區左移一位,并將當前掃描值移入最低位
  124.     if (keybuf == 0x00)
  125.     {   //連續8次掃描值都為0,即16ms內都只檢測到按下狀態時,可認為按鍵已按下
  126.         KeySta = 0;
  127.     }
  128.     else if (keybuf == 0xFF)
  129.     {   //連續8次掃描值都為1,即16ms內都只檢測到彈起狀態時,可認為按鍵已彈起
  130.         KeySta = 1;
  131.     }
  132.     else
  133.     {}  //其它情況則說明按鍵狀態尚未穩定,則不對KeySta變量值進行更新
  134. }


  135. //流水燈函數
  136. void LED1(unsigned char i)
  137. {
  138.         switch(i)
  139.         {
  140.                 case 0:P0=0xFE;P2=0xFF;break;
  141.                 case 1:P0=0xFD;break;
  142.                 case 2:P0=0xFB;break;
  143.                 case 3:P0=0xF7;break;
  144.                 case 4:P0=0xEF;break;
  145.                 case 5:P0=0xDF;break;
  146.                 case 6:P0=0xBF;break;
  147.                 case 7:P0=0x7F;break;
  148.                 case 8:P0=0xFF;P2=0x7F;break;
  149.                 case 9:P2=0xBF;break;
  150.                 case 10:P2=0xDF;break;                         
  151.                 case 11:P2=0xEF;break;                         
  152.                 case 12:P2=0xF7;break;                       
  153.                 case 13:P2=0xFB;break;                       
  154.           case 14:P2=0xFD;break;
  155.     case 15:P2=0xFE;break;
  156.                 default: break;
  157.         }
  158. }

  159. //LED燈閃爍函數
  160. void LED2(unsigned char j)  
  161. {
  162.         switch(j)
  163.         {
  164.                 case 0:P0=0x00;P2=0x00;break;
  165.                 case 1:P0=0xFF;P2=0xFF;break;
  166.                 default: break;
  167.         }
  168. }


  169. void LED3(unsigned char k)
  170. {
  171.         switch(k)
  172.         {
  173.                 case 0:P0=~0xFE;P2=~0xFF;break;
  174.                 case 1:P0=~0xFD;break;
  175.                 case 2:P0=~0xFB;break;
  176.                 case 3:P0=~0xF7;break;
  177.                 case 4:P0=~0xEF;break;
  178.                 case 5:P0=~0xDF;break;
  179.                 case 6:P0=~0xBF;break;
  180.                 case 7:P0=~0x7F;break;
  181.                 case 8:P0=~0xFF;P2=~0x7F;break;
  182.                 case 9:P2=~0xBF;break;
  183.                 case 10:P2=~0xDF;break;                         
  184.                 case 11:P2=~0xEF;break;                         
  185.                 case 12:P2=~0xF7;break;                       
  186.                 case 13:P2=~0xFB;break;                       
  187.           case 14:P2=~0xFD;break;
  188.     case 15:P2=~0xFE;break;
  189.                 default: break;
  190.         }
  191. }


  192. void LED4(unsigned char m)
  193. {
  194.         switch(m)
  195.         {
  196.         case 0: P0=0xaa;P2=0xaa;break;
  197.         case 1: P0=0x55;P2=0x55;break;
  198.         case 2: P0=0x18;P2=0x18;break;
  199.         case 3: P0=0xff;P2=0xff;break;
  200.         case 4: P0=0xf0;P2=0xf0;break;
  201.         case 5: P0=0x0f;P2=0x0f;break;
  202.         case 6: P0=0x00;P2=0x00;break;
  203.         case 7: P0=0xff;P2=0xff;break;
  204.         case 8: P0=0xf8;P2=0xf8;break;
  205.         case 9: P0=0xf1;P2=0xf1;break;
  206.         case 10:P0=0xe3;P2=0xe3;break;
  207.         case 11:P0=0xc7;P2=0xc7;break;
  208.         case 12:P0=0x8f;P2=0x8f;break;
  209.         case 13:P0=0x1f;P2=0x1f;break;
  210.   case 14:P0=0x3f;P2=0x3f;break;
  211.   case 15:P0=0x7f;P2=0x7f;break;
  212.   case 16:P0=0x7f;P2=0x7f;break;
  213.         case 17:P0=0x3f;P2=0x3f;break;
  214.         case 18:P0=0x1f;P2=0x1f;break;
  215.         case 19:P0=0x8f;P2=0x8f;break;
  216.         case 20:P0=0xc7;P2=0xc7;break;
  217.         case 21:P0=0xe3;P2=0xe3;break;
  218.         case 22:P0=0xf1;P2=0xf1;break;
  219.         case 23:P0=0xf8;P2=0xf8;break;
  220.         case 24:P0=0xff;P2=0xff;break;
  221.         case 25:P0=0x00;P2=0x00;break;
  222.         case 26:P0=0x00;P2=0x00;break;
  223.         case 27:P0=0xff;P2=0xff;break;
  224.         case 28:P0=0xff;P2=0xff;break;
  225.         case 29:P0=0x0f;P2=0x0f;break;
  226.   case 30:P0=0xf0;P2=0xf0;break;
  227.   case 31:P0=0xff;P2=0xff;break;
  228.         default: break;               

  229.         }
  230. }
  231. //蜂鳴器函數
  232. void buzzer()  
  233. {
  234.         unsigned int k=0;
  235.         …………
  236. …………
  237. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
zh.zip (38.07 KB, 下載次數: 24)


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 九九久久这里只有精品 | 国精产品一区一区三区免费完 | 亚洲国产视频一区 | 午夜影院普通用户体验区 | 中文字幕免费在线 | 九九免费视频 | 在线看免费的a | 日本高清视频网站 | 日韩免费在线观看视频 | 欧美黄色一区 | 国产女人叫床高潮大片免费 | 视频一区二区在线观看 | 在线观看中文字幕 | 日韩在线一区二区 | 性在线 | 国产日韩欧美电影 | 国产精品一区久久久 | 亚洲永久精品国产 | 91爱啪啪 | 成人午夜精品一区二区三区 | 免费观看毛片 | 亚洲精品乱码久久久久久蜜桃91 | 一级黄色网页 | 91免费看片 | 久久久精品一区 | 97热在线 | 欧美日本在线观看 | 51ⅴ精品国产91久久久久久 | 成人看片在线观看 | 精品日韩在线 | 免费黄网站在线观看 | 欧美日韩国产中文字幕 | 精品久久久久久久人人人人传媒 | 成人片免费看 | 九九热国产精品视频 | 日韩欧美在线一区二区 | 欧洲亚洲一区二区三区 | 9999国产精品欧美久久久久久 | 综合久久亚洲 | 精品网站999 | 91干b|