标题: 51单片机8个独立按键分别控制8盏灯的开和关源程序 [打印本页]

作者: 6313    时间: 2021-7-3 21:55
标题: 51单片机8个独立按键分别控制8盏灯的开和关源程序
网上找了好久,都没有找到多个独立按键分别独立控制灯的程序,于是自己写了一个程序,8个按键独立控制8个灯的开关程序

单片机源程序如下:
#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;


//延时函数声明
void delay(uint xms);
//程序入口
void main(){
  while(1){
    //第一次判断
    if(key1 == 0){
          //延时20ms 消除抖动
          delay(20);
          //第二次判断
          if(key1 == 0){
            led1 = ~led1;// 灯亮
        
            
          }
          while(!key1);  //当按键未松开时,key为0,执行该死循环。
         //等待按键被松开
         }
          if(key2 == 0){
          //延时20ms 消除抖动
          delay(20);
          //第二次判断
          if(key2 == 0){
            led2 = ~led2;           //灯亮
                           
            
          }
         
         
         //等待按键被松开

          while(!key2);  //当按键未松开时,key为0,执行该死循环。
        }
        if(key3 == 0){
          //延时20ms 消除抖动
          delay(20);
          //第二次判断
          if(key3 == 0){
                      //灯亮
                led3 =  ~led3;
                  
           
          }
         
         
         //等待按键被松开

          while(!key3);  //当按键未松开时,key为0,执行该死循环。
                }  

         if(key4 == 0){
          //延时20ms 消除抖动
          delay(20);
          //第二次判断
          if(key4 == 0){
            led4 = ~led4;// 灯亮
        
            
          }
          while(!key4);  //当按键未松开时,key为0,执行该死循环。
         //等待按键被松开
         }
          if(key5 == 0){
          //延时20ms 消除抖动
          delay(20);
          //第二次判断
          if(key5 == 0){
            led5 = ~led5;           //灯亮
                完整代码请下载附件:    新建文件夹 (9).zip (8.15 KB, 下载次数: 41)       
            


作者: 游侠(单片机开    时间: 2021-7-5 09:49
while(!key1);  //当按键未松开时,key为0,执行该死循环。
         尽量少用这种方法,当按着按键不放时,单片机什么事也做不了,特别是有显示屏lcd或者OLED时,信息不会实时刷新的,最好用中断或者状态机




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1