一个按键控制8个led灯_按键控制LED灯的亮灭

这篇博客介绍了一个使用单片机实现的项目,通过一个按键控制8个LED灯的亮灭。文章详细讲解了代码实现,包括外部中断0的设置、按键扫描和LED状态切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include

#define uint unsigned int

#define uchar unsigned char

sbit key3=P3^2;//外部中断0的引脚接口

sbit led=P1^0;

uchar num,temp;

uchar keyscan();

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void Int0Init()

{

IT0=1;//下降沿触发

//IE0=0;请求标志位,无触发,或响应中断后,硬件自动置0

EX0=1;//外部中断0允许标志

EA=1;//打开总终端

}

void LedRever() interrupt 0 //0是外部中断的中断号

{

   delay(500); 

if(key3==0xdb) 

  {  

    delay(8);

if(key3==0xdb) 

  { 

led=~led; 

while(key3==0xdb);

}

}

}

void main()

{

num=16;

while(1)

{

Int0Init();

  keyscan();

 }

}

uchar keyscan()

{

P3=0xef;

temp=P3;

temp=temp&0x0f;

while(temp!=0x0f)                 //确认是否按下

{

delay(5);

temp=P3;

temp=temp&0x0f;

while(temp!=0x0f)

{

temp=P3;

switch(temp)

{

case 0xee:num=0;

     break;

case 0xed:num=1;

     break;

case 0xeb:num=2;

     break;

case 0xe7:num=3;

     break;

}

while(temp!=0x0f)          //松手检测

{

temp=P3;

temp=temp&0x0f;

}

}

}

P3=0xdf;

temp=P3;

temp=temp&0x0f;

while(temp!=0x0f)

{

delay(5);

temp=P3;

temp=temp&0x0f;

while(temp!=0x0f)

{

temp=P3;

switch(temp)

{

case 0xde:num=4;

     break;

case 0xdd:num=5;

     break;

case 0xdb:num=6;

     break;

case 0xd7:num=7;

     break;

}

while(temp!=0x0f)

{

temp=P3;

temp=temp&0x0f;

}

}

}

P3=0xbf;

temp=P3;

temp=temp&0x0f;

while(temp!=0x0f)

{

delay(5);

temp=P3;

temp=temp&0x0f;

while(temp!=0x0f)

{

temp=P3;

switch(temp)

{

case 0xbe:num=8;

     break;

case 0xbd:num=9;

     break;

case 0xbb:num=10;

     break;

case 0xb7:num=11;

     break;

}

while(temp!=0x0f)

{

temp=P3;

temp=temp&0x0f;

}

}

}

P2=0x7f;

temp=P2;

temp=temp&0x0f;

while(temp!=0x0f)

{

delay(5);

temp=P2;

temp=temp&0x0f;

while(temp!=0x0f)

{

temp=P2;

switch(temp)

{

case 0x7e:num=12;

     break;

case 0x7d:num=13;

     break;

case 0x7b:num=14;

     break;

case 0x77:num=15;

     break;

}

while(temp!=0x0f)

{

temp=P2;

temp=temp&0x0f;

}

}

}

return num;

}

bba5627e9c8ba52855444215793d0dbe.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值