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

具体要求是:按两下按键,灯亮;按两下按键,灯灭;
求一个最简练的C语言程序完成此功能,谢谢大家了,急用..

#include<reg52.h>
#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=85; x>0; x--)
for(y=z; y>0; y--);
}

可下载到单片机验证。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-18
系统设置如下 p1.0 按键1 p1.1 按键2 p1.2按键3
p2.0 p2.1 p 2.2 分别接一个继电器和LED
IO口 初始化均为高电平

程序
main()
{
while(1)
{
if(p1.0==0)

if(p1.1==0)

if(p1.2==0)

}
第2个回答  推荐于2017-12-15
int0中断 程序我先试试

#include <reg52.h>
sbit P10 = P1^0;
sbit K1= P3^2;
unsigned char a;
void main(void)
{

IT0=1;
EX0=1;
EA=1;
while(1)
{
}

}

int0() interrupt 0
{

a++;
if(a%2==0)
{
P10=~P10;
}
}

希望采纳 看不懂 继续追问 在professional仿真成功追问

可以不用中断吗?
这个程序按键怎么消抖得?
我之写了个不用中断的,但不行,等等,我把程序理好,再发上来,你看看是哪里出错了?

追答

这个 ……
消抖好说 延时就可以了
不中断…… 没试过 因为我编按键一般都中断
你先发你的 我试试能不能改
为什么不要中断啊

追问

恩,马上就好,

追答

QQ 1125882334
方便的话 加个好友 我也是初学者 什么不会

追问

谦虚了,

本回答被提问者采纳
第3个回答  2011-05-18
你的开和关是一个按键吗?追问

恩,单键控制

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网