单片机4个按键控制不同的LED灯_AD,Allegro,pads,PCB设计,电源模块,硬件,stm32,嵌入式,单片机,小北设计 Allegro,pads,PCB电路板设计,硬件及芯片资料分享—小北设计

单片机4个按键控制不同的LED灯

51单片机 by AD,Allegro,pads,PCB设计,电源模块,硬件,stm32,嵌入式,单片机,小北设计
//程序将4只按键所在的P1端口高4位移到低4位,如果有键按下,则这4位中必有一位为0,
//为便于对这一位0所在位置进行判断,代码将其预先取反,然后再右移4位,这样处理后的8位
//中,仅低4位中有一位为1,其他7位均为0,接下来的循环在该值不等于全0时累加按键号,
//并将该值向右移位,循环中止时即可得出按键号1~4,最后根据按键号执行相应操作。
//名称:K1-K4分组控制LED
//下载地址:通过网盘分享的文件:按键控制不同的LED灯 链接: https://pan.baidu.com/s/1dj2kZbUmMQiTjSR4rRTh9A 提取码: 84hv
// 说明:每次按下K1时递增点亮一只LED,全亮时再按下则再次循环开始,
//K2按下后点亮上面4只LED,
//K3按下后点亮下面4只LED,
//K4按下后关闭所有LED。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned  int
uchar xuan_ze = 0xFF;
//延时程序
void yan_shi(uint ms)
{
uchar i,j;
for(i=0;i<ms;i++)
for(j=0;j<110;j++);
}
//主程序
void main()
{
uchar k,t;
P0=0XFF;
P1=0XFF; //上电复位
while(1)
{
t=P1;
if(t!=0XFF)//!=不等于
{
yan_shi(2);//抖动
if(t!=P1)//再次判断是否有正的按下。
continue;//如果没有按键,(continue跳过本次循环,进入下一轮)循环停在这里。
xuan_ze=~t>>4;//取反后,左移四位
k=0;
while(xuan_ze!=0)//判断按键,如果按下的是K1,P0口=0x10;执行~t>>4后,an_jian=0x01,对应的二进制0000 0001
{ //如果按下K2,P0=0x20,执行~t>>4后,an_jian=0x02 对应的二进制为0000 0010
k++; //k自加
xuan_ze>>=1; //左移一位,是对二进制移动,当K2,高位补零,需要移动二次,an_jian才等于0000 0000
}
switch(k)
{
case 1: if(P0==0x00)//==相等比较运算符,这里的意思是P0是否等于0x00,等于,执行IF下的语句P0=0xff,否则跳过执行P0<<==1.
     P0=0XFF;
         P0<<=1;//<<=左移后赋值,例如以移P0=0000 0001  ,执行此命令后P0变成了0000  0010
       yan_shi(200);break;
case 2: P0=0XF0; break;//break:在这里是立刻出循环。
case 3: P0=0X0F; break;
case 4: P0=0XFF;
}
while(P1!=0xFF);//等待按键释放。
}
}

}

    Message:

    Name:
    Email:
    Content:
PgUP ...
Allegro,pads,PCB电路板设计,电源模块件及stm32,嵌入式,单片机资料分享—小北设计