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
你的开和关是一个按键吗?追问

恩,单键控制

51单片机的按键控制小灯亮灭的问题(程序类型:c语言)怎么解决?
KEY1) \/\/检测到按键按下 { LED = ~LED; \/*LED取反,此时LED = 0,灯亮。当松手时,KEY1 = 1,不满足if语句不 进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入循环,LED取反得到LED = 0,灯亮。*\/ delay(500); \/*此处延迟,保...

51单片机的按键控制小灯亮灭的问题(程序类型:c语言)
LED = ~LED; \/*LED取反,此时LED = 0,灯亮。当松手时,KEY1 = 1,不满足if语句不 进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入循 环,LED取反得到LED = 0,灯亮。*\/ delay(500); \/*此处延迟,保证连续两次按键动作处在程序的延时过程中...

用c51单片机控制一个闪光灯循环闪光5次以后熄灭不再闪光,用C语言编程...
/***函数功能:延迟一段时间 ***/ Voiddelay(Void)//Void表示没有返回值,也没有传递参数。{ Unsignedint我;定义一个最大值为65535的无符号整数。For (I = 0;我< 20000;i++) \/\/执行20000个空循环。;//什么也不做,等待一个机器周期。} /*** 函数函数:主函数(C语言...

...帮忙用C语言写一个单片机4个灯轮流闪亮的源程序。 详细内容看补充...
delay(100); \/\/调用延时子程序 L3=1; \/\/第三盏灯亮 delay(100); \/\/调用延时子程序 L4=1; \/\/第四盏灯亮 delay(100); \/\/调用延时子程序 while(1); \/\/这里我用了个死循环,目的程序只运行一次,如果需要自动重新运行,可以把这句删掉 } 纯手工书写,并仿真调试过,记得加分...

怎么用89C51单片机实现用一个开关控制8个流水灯,要求开关按下去松开是亮...
开关,接在 P2.7 与地之间。include <AT89X51.H> \/\/预处理命令 void w(unsigned char k){ unsigned int a; \/\/定义变量a 为int 类型 if (k) { while(P2_7); \/\/没有按就循环,等待按下 for (a = 0; a < 600; a++); \/\/延时消抖 while(P2_7); \/\/没有按...

用c语言编写单片机流水灯程序,(8个发光二极管从左至右循环点亮)
voiddelay(void){ unsignedinti,j;for(i=0;i<200;i++)for(j=0;j<1000;j++);} voidmain(void){ while(1){ P3=0xfe;\/\/第一个灯亮 delay();\/\/延时 P3=0xfd;\/\/第二个灯亮 delay();P3=0xfb;\/\/第三个灯亮 delay();P3=0xf7;\/\/第四个灯亮 delay();P3=0xef;\/\/第五个灯亮...

用单片机c语言一个按键控制led的闪烁和熄灭,就是按一下闪烁,再按就熄灭...
首先你的贴出来的程序不完整,最好贴出完整代码!其次,如果你的程序没问题的话,你的LED闪烁是必须在你按住按键且不能弹起情况下才会发生的,你是一直按着吗?而且注意你n的类型,因为你这样一直加,会溢出的

51单片机流水灯如何通过两个按键启动和停止 ,怎么停止
define led P2\/\/ char i;sbit k1=P3^6; \/\/启动按键 sbit k2=P3^7;\/\/停止按键 bit s=0; \/\/ 启停标志 char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; \/\/LED灯的数组 void delay1s(void); \/\/延时函数 void liushuideng(); \/\/流水灯的循环 void main(){ led...

51单片机定时器控制8个LED灯亮3秒灭8秒再亮12秒的程序
\/\/晶振:12MHZ \/***重新定义数据类型***\/ typedef unsigned char unit8;typedef unsigned short unit_16;\/ 函数名:main()函数功能: 主函数 输入:无 输出:无 \/ void main(){ TMOD = 0x01;TR0 = 1;ET0 = 1;EA = 1;while(1);} \/ 函数名:Timer0_Rountine() interrupt 1...

很简的51单片机C语言流水灯程序
1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。例程:include<reg51.h> \/\/51单片机头文件#include <intrins.h> \/\/包含有左右循环移位子函数的库#define uint unsigned int \/\/宏定义#define uchar unsigned char \/\/宏定义sbit beep=P2^3;void delay(uint z) \/\/延时函数,z...

相似回答