亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

我的51單片機入門實踐2 鍵控LED燈 含原理圖和源碼

[復制鏈接]
跳轉到指定樓層
樓主
OK這是第二次的實踐,前來記錄一下
麻煩大家多多指導謝謝!
  1. #include <reg51.h>
  2. #include <intrins.h>

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

  5. // 按鍵連接到P1.4-P1.7
  6. sbit KEY1 = P1^4;  
  7. sbit KEY2 = P1^5;  
  8. sbit KEY3 = P1^6;  
  9. sbit KEY4 = P1^7;  

  10. // LED連接到P0.0-P0.7(共陽接法:P0=0亮,P0=1滅)
  11. #define LED_PORT P0  

  12. // 毫秒級延時
  13. void delayms(uint j)
  14. {
  15.     uchar i;
  16.     for(; j > 0; j--)
  17.     {
  18.         i = 250;
  19.         while(--i);
  20.         i = 249;
  21.         while(--i);
  22.     }
  23. }

  24. // 按鍵掃描 + 按下期間保持點亮,松開后熄滅
  25. void key_control(uchar key)
  26. {
  27.     switch (key)
  28.     {
  29.         case 1: // 按鍵1:逐個點亮(保持已亮的),直到全亮
  30.         {
  31.             uchar n = 0; // 當前點亮的燈數量
  32.             while(KEY1 == 0) // 只要按鍵1沒松開
  33.             {
  34.                 n++;
  35.                 if(n > 8) n = 8; // 最多8個燈
  36.                
  37.                 // 計算LED狀態:低n位為0(亮),其余為1(滅)
  38.                 LED_PORT = (0xFF << n);
  39.                
  40.                 delayms(200); // 點亮間隔
  41.             }
  42.             LED_PORT = 0xFF; // 松開后,所有燈熄滅
  43.             break;
  44.         }
  45.             
  46.         case 2: // 按鍵2:前四個燈亮
  47.             while(KEY2 == 0)
  48.             {
  49.                 LED_PORT = 0xF0; // 0000 1111(前四個亮)
  50.                 delayms(10);
  51.                 if(KEY2 != 0) break;
  52.             }
  53.             LED_PORT = 0xFF;
  54.             break;
  55.             
  56.         case 3: // 按鍵3:后四個燈亮
  57.             while(KEY3 == 0)
  58.             {
  59.                 LED_PORT = 0x0F; // 1111 0000(后四個亮)
  60.                 delayms(10);
  61.                 if(KEY3 != 0) break;
  62.             }
  63.             LED_PORT = 0xFF;
  64.             break;
  65.             
  66.         case 4: // 按鍵4:所有燈亮
  67.             while(KEY4 == 0)
  68.             {
  69.                 LED_PORT = 0x00; // 0000 0000(全亮)
  70.                 delayms(10);
  71.                 if(KEY4 != 0) break;
  72.             }
  73.             LED_PORT = 0xFF;
  74.             break;
  75.     }
  76. }

  77. void main(void)
  78. {
  79.     LED_PORT = 0xFF; // 初始化:所有燈熄滅
  80.    
  81.     while (1)
  82.     {
  83.         uchar key_val = 0; // 默認無按鍵
  84.         
  85.         // 檢測按鍵(帶消抖)
  86.         if (KEY1 == 0)  
  87.         {
  88.             delayms(20);
  89.             if (KEY1 == 0) key_val = 1;
  90.         }
  91.         else if (KEY2 == 0)  
  92.         {
  93.             delayms(20);
  94.             if (KEY2 == 0) key_val = 2;
  95.         }
  96.         else if (KEY3 == 0)  
  97.         {
  98.             delayms(20);
  99.             if (KEY3 == 0) key_val = 3;
  100.         }
  101.         else if (KEY4 == 0)  
  102.         {
  103.             delayms(20);
  104.             if (KEY4 == 0) key_val = 4;
  105.         }
  106.         
  107.         // 執行按鍵控制
  108.         if(key_val != 0)
  109.         {
  110.             key_control(key_val);
  111.         }
  112.     }
  113. }
復制代碼




圖片1.png (100.86 KB, 下載次數: 0)

整體圖(proteus仿真原理圖)

整體圖(proteus仿真原理圖)

圖片2.png (67.01 KB, 下載次數: 0)

第一個按鈕按下燈逐個亮起效果圖

第一個按鈕按下燈逐個亮起效果圖

圖片3.png (57.23 KB, 下載次數: 0)

第二個按鈕按下前四個燈亮效果圖

第二個按鈕按下前四個燈亮效果圖

圖片4.png (57.18 KB, 下載次數: 0)

第三個按鈕按下后四個燈亮效果圖

第三個按鈕按下后四個燈亮效果圖

圖片5.png (58.44 KB, 下載次數: 0)

第四個按鈕按下燈全亮效果圖

第四個按鈕按下燈全亮效果圖
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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