標(biāo)題: 51單片機(jī)8個(gè)獨(dú)立按鍵分別控制8盞燈的開和關(guān)源程序 [打印本頁]

作者: 6313    時(shí)間: 2021-7-3 21:55
標(biāo)題: 51單片機(jī)8個(gè)獨(dú)立按鍵分別控制8盞燈的開和關(guān)源程序
網(wǎng)上找了好久,都沒有找到多個(gè)獨(dú)立按鍵分別獨(dú)立控制燈的程序,于是自己寫了一個(gè)程序,8個(gè)按鍵獨(dú)立控制8個(gè)燈的開關(guān)程序

單片機(jī)源程序如下:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
//定義按鍵端口
sbit key1 = P1^0;//定義按鍵端口1
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit key4 = P1^3;//定義按鍵端口4
sbit key5 = P1^4;
sbit key6 = P1^5;
sbit key7 = P1^6;
sbit key8 = P1^7;


sbit led1 = P2^0; //定義LED燈1
sbit led2 = P2^1;
sbit led3 = P2^2;
sbit led4 = P2^3; //定義LED燈4
sbit led5 = P2^4;
sbit led6 = P2^5;
sbit led7 = P2^6;
sbit led8 = P2^7;


//延時(shí)函數(shù)聲明
void delay(uint xms);
//程序入口
void main(){
  while(1){
    //第一次判斷
    if(key1 == 0){
          //延時(shí)20ms 消除抖動(dòng)
          delay(20);
          //第二次判斷
          if(key1 == 0){
            led1 = ~led1;// 燈亮
        
            
          }
          while(!key1);  //當(dāng)按鍵未松開時(shí),key為0,執(zhí)行該死循環(huán)。
         //等待按鍵被松開
         }
          if(key2 == 0){
          //延時(shí)20ms 消除抖動(dòng)
          delay(20);
          //第二次判斷
          if(key2 == 0){
            led2 = ~led2;           //燈亮
                           
            
          }
         
         
         //等待按鍵被松開

          while(!key2);  //當(dāng)按鍵未松開時(shí),key為0,執(zhí)行該死循環(huán)。
        }
        if(key3 == 0){
          //延時(shí)20ms 消除抖動(dòng)
          delay(20);
          //第二次判斷
          if(key3 == 0){
                      //燈亮
                led3 =  ~led3;
                  
           
          }
         
         
         //等待按鍵被松開

          while(!key3);  //當(dāng)按鍵未松開時(shí),key為0,執(zhí)行該死循環(huán)。
                }  

         if(key4 == 0){
          //延時(shí)20ms 消除抖動(dòng)
          delay(20);
          //第二次判斷
          if(key4 == 0){
            led4 = ~led4;// 燈亮
        
            
          }
          while(!key4);  //當(dāng)按鍵未松開時(shí),key為0,執(zhí)行該死循環(huán)。
         //等待按鍵被松開
         }
          if(key5 == 0){
          //延時(shí)20ms 消除抖動(dòng)
          delay(20);
          //第二次判斷
          if(key5 == 0){
            led5 = ~led5;           //燈亮
                完整代碼請(qǐng)下載附件:    新建文件夾 (9).zip (8.15 KB, 下載次數(shù): 41)       
            


作者: 游俠(單片機(jī)開    時(shí)間: 2021-7-5 09:49
while(!key1);  //當(dāng)按鍵未松開時(shí),key為0,執(zhí)行該死循環(huán)。
         盡量少用這種方法,當(dāng)按著按鍵不放時(shí),單片機(jī)什么事也做不了,特別是有顯示屏lcd或者OLED時(shí),信息不會(huì)實(shí)時(shí)刷新的,最好用中斷或者狀態(tài)機(jī)




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1