欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機LED燈多樣控制程序

[復制鏈接]
跳轉到指定樓層
樓主

  1. #include <reg52.h>
  2. #include <intrins.h>

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

  5. uchar code table[]={0xfe,0xfc,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0xff};  

  6. sbit k1 = P2^0;  
  7. sbit k2 = P2^1;  
  8. sbit k3 = P2^2;  
  9. sbit k4 = P3^2;  
  10. sbit k5 = P3^3;  

  11. int i;
  12. int a,b,l,led;
  13. uint led1,led2;

  14. void KEY4();  
  15. void KEY5();  

  16. void delay(uint xms)  //延時
  17. {
  18.         int i,j;
  19.         for(i=xms;i>0;i--)
  20.                 for(j=110;j>0;j--) ;
  21. }

  22. void KEY1()  //流水燈向右
  23. {
  24.         if(k1==0)
  25.         {
  26.                 delay(5);  //消抖
  27.                 if(k1==0)
  28.                 {
  29.                         ET0 = 0;  //關定時器0中斷
  30.                         TR0 = 0;  //關閉定時器0
  31.                         a = 0;
  32.                         P1 = 0xff;
  33.                         delay(500);
  34.                         while(1)  //while(1)循環流水燈向右
  35.                         {
  36.                                 P1 = table[a];
  37.                                 delay(500);
  38.                                 a++;
  39.                                 if(a==11)  //流水燈到尾重新開始
  40.                                         a = 0;
  41.                                 if(k1==0||k2==0||k3==0)  //按鍵檢測,退出while(1)循環
  42.                                 {
  43.                                         delay(5);
  44.                                         if(k1==0||k2==0||k3==0)
  45.                                                 break;
  46.                                 }
  47.                         }
  48.                 }
  49.         }
  50. }

  51. void KEY2()  //流水燈向左
  52. {
  53.         if(k2==0)
  54.         {
  55.                 delay(5);
  56.                 if(k2==0)
  57.                 {
  58.                         ET0 = 0;  
  59.                         TR0 = 0;
  60.                         b = 10;
  61.                         P1 = 0xff;
  62.                         delay(500);
  63.                         while(1)
  64.                         {
  65.                                 P1 = table[b];
  66.                                 delay(500);
  67.                                 b--;
  68.                                 if(b<0)
  69.                                         b = 10;
  70.                                 if(k1==0||k2==0||k3==0)
  71.                                 {
  72.                                         delay(5);
  73.                                         if(k1==0||k2==0||k3==0)
  74.                                                 break;
  75.                                 }
  76.                         }
  77.                 }
  78.         }
  79. }

  80. void KEY3()  //閃爍燈
  81. {
  82.         if(k3==0)
  83.         {
  84.                 delay(5);
  85.                 if(k3==0)
  86.                 {
  87.                         ET0 = 0;  
  88.                         TR0 = 0;
  89.                         P1 = 0xff;
  90.                         delay(500);
  91.                         while(1)
  92.                         {
  93.                                 P1 =~ P1;  //P1口反轉
  94.                                 delay(500);
  95.                                 if(k1==0||k2==0||k3==0)
  96.                                 {
  97.                                         delay(5);
  98.                                         if(k1==0||k2==0||k3==0)
  99.                                                 break;
  100.                                 }
  101.                         }
  102.                 }
  103.         }
  104. }

  105. void init()  //初始化函數
  106. {
  107.         P1 = 0xff;
  108.         TMOD = 0x01;  //定時器0工作在方式1
  109.         IP = 0x01;  //PX0 = 1;  //中斷優先級  外部中斷0為高優先級中斷
  110.         //IP = 0x40 ;(PX1 = 1;)
  111.         TH0 = (65536 - 50000)/256;
  112.         TL0 = (65536 - 50000)%256;
  113.         /*TH0 = (計數最大值-定時時間)/256
  114.                 TL0 = (計數最大值-定時時間)%256
  115.         */
  116.         EA = 1;  //開總中斷
  117.         EX0 = 1;  //開外部中斷0
  118.         EX1 = 1;  //開外部中斷1
  119.         IT0 = 1;  //外部中斷0負跳變中斷
  120.         IT1 = 1;  //外部中斷1負跳變中斷
  121.         ET0 = 1;  //開定時器0中斷
  122.         TR0 = 1;  //允許定時器0定時
  123. }

  124. void main()
  125. {
  126.         init();  //初始化函數
  127.         while(1)
  128.         {
  129.                 KEY1();
  130.                 KEY2();
  131.                 KEY3();
  132.         }
  133. }

  134. void int0() interrupt 0  //外部中斷0  單個流水燈向右
  135. {
  136.         uint i;
  137.         led1 = 0xfe;
  138.         for(i=0;i<8;i++)
  139.         {
  140.                 P1 = led1;
  141.                 delay(500);
  142.                 led1 = _crol_(led1,1);
  143.         }
  144. }

  145. void time0_int()  interrupt 1  //定時器0
  146. {
  147.         TH0 = (65536 - 50000)/256;  //50ms
  148.         TL0 = (65536 - 50000)%256;
  149.         i++;
  150.         if(i==10)  //定時器0控制開始燈閃爍
  151.         {
  152.                 i = 0;
  153.                 P1 =~ P1;
  154.                 delay(400);
  155.         }
  156. }

  157. void int1() interrupt 2  //外部中斷1  單個流水燈向左
  158. {
  159.         uint i;
  160.         led2 = 0x7f;
  161.         for(i=0;i<8;i++)
  162.         {
  163.                 P1 = led2;
  164.                 delay(500);
  165.                 led2 = _crol_(led2,-1);
  166.         }
  167. }
復制代碼

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表