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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機6按鍵控制16位心形流水燈Proteus仿真程序

[復制鏈接]
跳轉到指定樓層
樓主
6個按鍵,每一個按鍵代表一個花型,附帶Proteus仿真
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. /*
  2.    名稱:LED流水燈實驗
  3.          LED接口:LED0-7--------P2
  4.                   LED8-16-------P3
  5.                                                 KEY1--------P1.0
  6.                                                 KEY2--------P1.1
  7.                                                 KEY3--------P1.2
  8.                                                 KEY4--------P1.3
  9.                                                 KEY5--------P1.4
  10.          用按鍵掃描和查表法實現花式流水燈,一次只能閉合一個按鍵
  11. */

  12. # include <reg52.h>
  13. # define uchar unsigned char
  14. # define uint unsigned int

  15. uchar i,flag1,flag2,flag3,flag4,flag5,flag6;
  16. /******************* 定義按鍵 *****************************/
  17. sbit k1=P1^0;
  18. sbit k2=P1^1;
  19. sbit k3=P1^2;
  20. sbit k4=P1^3;
  21. sbit k5=P1^4;
  22. sbit k6=P1^7;
  23. /************************ 流水燈花樣設計 ********************/

  24. /***********外圈依次亮********/
  25. uchar table1_1[]={0xef,0xfe,0xfd,0xfb,0xf7,0x7f};
  26. uchar table1_2[]={0xf7,0x7f,0xbf,0xdf,0xef,0xfe};

  27. /*****內圈依次點亮 */
  28. uchar table2_1[]={0xdf,0xbf};
  29. uchar table2_2[]={0xfb,0xfd};


  30. /******* 間隔一個循環點亮 ********/
  31. uchar table3_1[]={0xfe,0xfb,0xef,0xbf};
  32. uchar table3_2[]={0xfd,0xf7,0xdf,0x7f};

  33. /*********第一行到第四行閃爍*************/
  34. uchar table4_1[]={0xf0,0xff,0xf0,0xff,0xf0,0xff};
  35. uchar table4_2[]={0x0f,0xff,0x0f,0xff};
  36. uchar table4_3[]={0xf0,0xff,0xf0,0xff,0xf0,0xff,0xf0,0xff};
  37. uchar table4_4[]={0x0f,0xff};

  38. /*********16位流水燈**********/
  39. uchar table5_1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

  40. /**********全亮全滅交替*******/
  41. uchar table6_1[]={0x00};
  42. uchar table6_2[]={0xff};
  43. /********************* 延時程序 ****************************/
  44. void delay(uint x)
  45. {
  46. uint i;
  47. while(x--)
  48. for(i=50;i>0;i--);
  49. }

  50. //delay(1000)為1s

  51. /****************** 判斷按鍵 ***********************/
  52. void keyscan()
  53. { if(k1==0) //K1按下
  54. {delay(10);
  55. if(k1==0)
  56. {
  57. flag6=0;
  58. flag2=0;
  59. flag3=0;
  60. flag4=0;
  61. flag1=1;
  62. flag5=0;       
  63. }
  64. }
  65. if(k2==0){ //K2按下
  66. delay(10);
  67. if(k2==0){
  68. flag3=0;
  69. flag1=0;
  70. flag4=0;
  71. flag5=0;
  72. flag6=0;       
  73. flag2=1;
  74. }
  75. }
  76. if(k3==0){ //K3按下
  77. delay(10);
  78. if(k3==0){
  79. flag1=0;
  80. flag2=0;
  81. flag4=0;
  82. flag5=0;
  83. flag6=0;       
  84. flag3=1;
  85. }
  86. }
  87. if(k4==0){ //K4按下
  88. delay(10);
  89. if(k4==0){
  90. flag5=0;
  91. flag6=0;
  92. flag1=0;       
  93. flag2=0;
  94. flag3=0;
  95. flag4=1;
  96. }
  97. }
  98. if(k5==0){ //K5按下
  99. delay(10);
  100. if(k5==0){
  101. flag1=0;
  102. flag2=0;
  103. flag3=0;
  104. flag4=0;
  105. flag6=0;
  106. flag5=1;        
  107. }
  108. }
  109. if(k6==0){ //K6按下
  110. delay(10);
  111. if(k6==0){
  112. flag1=0;
  113. flag2=0;
  114. flag3=0;
  115. flag4=0;
  116. flag5=0;
  117. flag6=1;       
  118. }
  119. }
  120. }
  121. /************** 主程序 ************************/
  122. void main()
  123. {
  124.        
  125.         P3=0xff;
  126. P2=0xff;       
  127. while(1)

  128. {keyscan();
  129.         //按下按鍵1
  130. if(flag1==1)
  131. {
  132.                  P3=0xff;
  133. for(i=0;i<6;i++)
  134.         {
  135.                 P2=table1_1[i];
  136.                 delay(1000);
  137.                 keyscan();
  138.    }
  139.         P2=0xff;
  140.        
  141. for(i=0;i<6;i++)
  142.         {
  143.                 P3=table1_2[i];;
  144.                 delay(1000);
  145.                 keyscan();
  146.    }

  147.         P3=0xff;

  148. }
  149. //按下按鍵2
  150. if(flag2==1)
  151. {
  152.     P3=0xff;         
  153. for(i=0;i<2;i++)
  154.         {
  155.          
  156.         P2=table2_1[i];        
  157.         delay(2000);
  158.         keyscan();
  159.   }
  160.         P2=0xff;       
  161. for(i=0;i<2;i++)
  162.         {  
  163.         P3=table2_2[i];        
  164.         delay(2000);
  165.         keyscan();
  166.   }

  167. }

  168. //*****當按下第三個按鍵****
  169. if(flag3==1)
  170. { P3=0xff;
  171.   for(i=0;i<4;i++)
  172. {
  173.         P2=table3_1[i];
  174.         delay(1000);
  175.         keyscan();
  176.         } P2=0xff;
  177.          for(i=0;i<4;i++)
  178.          {
  179.                  
  180.                 P3=table3_1[i];       
  181.                 delay(1000);
  182.                 keyscan();
  183.    }
  184.          P2=0xff;
  185.          P3=0xff;
  186.          for(i=0;i<4;i++)
  187.          {
  188.                  P2=table3_2[i];
  189.         delay(1000);
  190.         keyscan();
  191.          }
  192.          P2=0xff;
  193.          for(i=0;i<4;i++)
  194.          {
  195.                  P3=table3_2[i];
  196.         delay(1000);
  197.         keyscan();
  198.          }
  199. }
  200. //按下第四個按鍵
  201. if(flag4==1)
  202. {
  203.          P3=0xff;
  204.          P2=0xff;
  205. for(i=0;i<6;i++)
  206.          {
  207.                 P2=table4_1[i];
  208.                 delay(1000);
  209.                 keyscan();
  210.     }
  211.          for(i=0;i<4;i++)
  212.          {
  213.                 P2=table4_2[i];
  214.                 delay(1000);
  215.                 keyscan();
  216.     }
  217.                   for(i=0;i<10;i++)
  218.          {
  219.         P3=table4_3[i];
  220.                 delay(1000);
  221.                 keyscan();
  222.     }
  223.                        
  224.         P3=table4_4[0];
  225.        
  226.     }
  227. //按下第五個按鍵
  228. if(flag5==1)
  229.    {
  230.                         P3=0xff;
  231.                  for(i=0;i<8;i++)
  232.                  {
  233.                          P2=table5_1[i];
  234.                          delay(1000);
  235.                          keyscan();
  236.                  }
  237.                  P2=0xff;
  238.                  for(i=0;i<8;i++)
  239.                  {
  240.                          P3=table5_1[i];
  241.                          delay(1000);
  242.                          keyscan();
  243.                  }
  244.                  P3=0xff;
  245.    }
  246. //按下第六個按鍵
  247. if(flag6==1)
  248.         {
  249.                 P2=0xff;
  250.                 P3=0xff;
  251.                 for(i=0;i<1;i++)
  252.                 {
  253.                         P2=table6_1[i];
  254.                         P3=table6_1[i];
  255.                         delay(1000);
  256.                         keyscan();
  257.                 }
  258.                 for(i=0;i<1;i++)
  259.                 {
  260.                         P2=table6_2[i];
  261.                         P3=table6_2[i];
  262.                         delay(1000);
  263.                         keyscan();
  264.                 }
  265.         }
  266.   }
  267. }
復制代碼

Keil代碼與Proteus仿真下載:
4按鍵控制16LED流水燈.zip (127.5 KB, 下載次數: 45)


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本人和亚洲人zjzjhd | 久久久www成人免费精品 | 欧美日韩在线播放 | av首页在线 | 精品一区久久 | 99精品国产一区二区三区 | 亚洲一区黄色 | 特级毛片 | 老司机狠狠爱 | 久久伊人一区 | 欧美高清成人 | 欧美日韩国产中文字幕 | 国外激情av | 精品久久久久久久久久久久久久 | 日韩视频在线免费观看 | 国产精品毛片 | 国产精品久久久久久久岛一牛影视 | 天天天堂 | 久草精品视频 | 久久久久久电影 | 国产91亚洲精品一区二区三区 | 日韩欧美在线观看视频 | 99精品99| 亚洲欧美日韩网站 | 亚洲精品在线观看网站 | 一片毛片 | 亚洲入口 | 日韩中文在线 | 久久国产精品首页 | 国产精品久久久久久久免费观看 | 祝你幸福电影在线观看 | 亚洲精品麻豆 | 日日噜| 亚洲精品电影网在线观看 | 伊人久久成人 | 中文字幕一区二区三区四区五区 | 狠狠色综合欧美激情 | 久久亚洲国产精品日日av夜夜 | 久久久久一区 | 中文字幕乱码一区二区三区 | 日韩成人免费视频 |