51单片机的按键控制小灯亮灭的问题(程序类型:c语言)怎么解决?

51单片机的按键控制小灯亮灭的问题(程序类型:c语言)怎么解决?,第1张

#include

#define uint unsigned int

sbit LED = P1^0

sbit KEY1 = P1^2

void delay(uint)

void main(void)

{

LED = 1 //初始化LED熄灭

KEY1 = 1 //赋值KEY1高电平

while(1)

{

if(!KEY1) //检测到按键按下

{

LED = ~LED/*LED取反,此时LED = 0,灯亮。当松手时,KEY1 = 1,不满足if语句不

进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入循

环,LED取反得到LED = 0,灯亮。*/

delay(500) /*此处延迟,保证连续两次按键动作处在程序的延时过程中,不进行其他程序从而不会影响小灯。*/

}

}

}

void delay(uint z) //延时函数

{

uint x, y

for(x=85x>0x--)

for(y=zy>0y--)

}

可下载到单片机验证。

以下是一个简单的51单片机程序,通过按下按键可以实现4种不同状态的灯亮灭,包括正闪、反闪、多种间隔闪。程序中使用了定时器来实现闪烁功能。

程序中使用了P1.0到P1.3作为控制灯的引脚,P3.2作为按键的引脚。每当按下按键时,通过判断状态值来切换不同的灯亮灭模式。定时器中断函数用来实现灯的闪烁,可根据需求自行调整闪烁频率。

编程不易,忘采纳

#include<reg52.h>

unsigned char ID

sbit k1 = P3 ^ 7        // 定义按键端口

void delay()

{

TMOD = 0x10    // 定时器的工作方式

TH1=0xd8

TL1=0xf0

TR1=1

while(!TF1)    // 这里错了,是定时器1

TF1=0

}

void main()

{

while(1)

{

if(k1==0)

{

delay()              //去抖动

if(k1==0)           //检测按键确实按下,进行按键处理

{

ID++

if(ID==0)

{

ID=0

}

while(!k1)   //这里错了,多余的加了==0

}

}

switch(ID)

{

case 0:P1=0x3fbreak

case 1:P1=0x06break

case 2:P1=0x5bbreak

case 3:P1=0x4fbreak

case 4:P1=0x66break

case 5:P1=0x6dbreak

case 6:P1=0x7dbreak

case 7:P1=0x07break

case 8:P1=0x7fbreak

case 9:P1=0x6fbreak

default:break

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11058908.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存