这问题困扰我两天了,我写的程序是:
#include <reg51.h>
#include<intrins.h>
sbit k1=P2^0;//k1是按键
sbit d1=P0^0;//d1是LED
main()
{
int A=0;
while(1)
{
if(ld1==0&&A==0&&d1==1)
{
d1=~d1 ;
A=1;
}
if(ld1!=0)
{ delay();
A=0;
}
if(ld1==0&&A==0&&d1==0)
{
d1=~d1;
A=1;
}
}
}
单片机是低电平有效的,这个程序运行时按着按着会乱,一下又不能按亮了,一下又不能灭了,我问了别人说要去抖动,就是加个延时函数,可是我加延时函数之后按住不动它就会闪烁,如果按太快的话它又反应不过来,求解释!!!
最好有程序例子给我!!就是让它按一次键不管按多久LED就改变一次值,直到松开后再按键它才改变一次值,不能让它乱了…最好试验成功的… 求求各位啦!!很急!!粘贴或邮箱都可以我基本在线1057994470@qq.com!!好的再加分哦!!
不好意思,我自己已经解决了……
我去啊……
先看你口气以为是专业的呢
兴致勃勃的去试了一下
结果让我大吃一惊啊……
就亮一灯,啥反应没有…………
哥们 能解释下吗?
什么就亮一灯,程序应该没错。
你看我前面没,你还用的P0口?用了P0口你外部上拉没?
就那一个灯亮着什么都不能操作啊……
应该没错,你没验证怎么知道……
...不需要验证,这么简单的程序。一个扫描按键程序,等待按键释放后取反LED灯输出IO口状态,也就是按键释放后,IO口电平在高低之间切换,程序不可能有错,兄弟,你换个到P1-P4口去不行?非要弄个P0口,你就当去试试 OK?
要不你把你的硬件电路贴出来。
额 好吧,请问可以给个邮箱吗?在这太麻烦……
追答不好意思,main改为
void main()
{
LED_OUT =0;
while(1) //没加这个关键。
{
KeyScan();
}
}
你把你邮箱给我,我仿真图都做好了。
我邮箱295281315@qq.com
单片机c语言呢编程问题:我要实现用一个按键控制一个LED的亮灭,按一次...
你没有松手监测呀!就是在按键处理程序后要加一个while(k1!=0);就是只有你松开按键后才认为本次按键执行完毕,不然就会一直重复执行按键按下的程序,那么你的d1一直就会执行亮灭操作!
...按一下按键,LED灯灭。再按一下,LED亮,用C语言编程该怎么写
LED1_01 = 1; \/\/打开LED灯点亮 while(1){ if(KEY0_01 == 0) \/\/检测按键是否按下 { Delay_1ms(10); \/\/延时去抖动 if(KEY0_01 == 0) \/\/确定按键按下 { LED1_01 = ~ LED1_01; \/\/取反LED灯 [ 亮 . 灭 ]} while(KEY0_01 == 0); \/\/检测松手 } } ...
51单片机怎么用c语言写一个按钮控制一个led的闪烁,按一下开始闪烁,再按...
if(P02)\/\/再次确定按键按下 { while(P02){flash=flash}\/\/按住按键的动作 flash=~flash;\/\/按键按下后执行动作 } } } void ledflash(){ if(flash){ led=1;\/\/点亮 delay(100);\/\/延时100MS led=0;\/\/熄灭 } else led=0;} void delay(unsigned int i){自己根据单片机频率写个1MS带形参...
单片机用c语言,按钮控制一个LED灯,要求按下松开,LED亮,按下松开,LED...
1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。2、编写相应的代码:#include<reg52.h> \/\/定义单片机的头文件sbit led=P2^0; \/\/定义单片机的管脚,void main(void) \/\/主函数{ while(1) \/\/无限循环 {led=0x1f; \/\/点亮前面三个灯。这里...
用单片机c语言一个按键控制led的闪烁和熄灭,就是按一下闪烁,再按就熄灭...
首先你的贴出来的程序不完整,最好贴出完整代码!其次,如果你的程序没问题的话,你的LED闪烁是必须在你按住按键且不能弹起情况下才会发生的,你是一直按着吗?而且注意你n的类型,因为你这样一直加,会溢出的
AVR 单片机C语言怎样实现按键按一下led灯闪烁 再按一下led灯灭如此反复...
用状态机写:函数1:LED闪烁 main(){ while(1){ if(KEY)State = ~State;if(State)LED闪烁 else LED熄灭 } }
C语言如何编程让一个按键轮流点灯。按一下1灯亮,在按下1灯灭2灯亮,在...
每按一次独立键盘的S2键,与P1口相连的一个发光二极管往下移动一位。include <reg52.h> sbit BY1=P3^4; \/\/定义按键的输入端S2键 unsigned char count; \/\/按键计数,每按一下,count加1 unsigned char temp;unsigned char a,b;void delay10ms(void) \/\/延时程序 { unsigned char i,j;for(...
需要一个用按键控制一个LED灯亮度的C语言程序
KeyDownFlag=TRUE;\/\/按键按下标志 置位 KeyReadyFlag=TRUE;\/\/按键准备标志 置位 } else KeyDownFlag=FALSE;\/\/若按键Key1 无按下,则清空 按键按下标志 if(!KeyDownFlag && KeyReadyFlag)\/\/若 按键已准备,且按键无按下(即 松手状态){ DutyNume++;\/\/占空比分子 加1 if(DutyNume==DutyDeno)...
汇编语言或C语言编写一个控制灯闪烁的程序
我写的这个程序应该可以,按一下灯亮,再按一下灯灭 include "REG52.H"sbit LED1_01 = P1^1; \/\/LED灯 sbit KEY0_01 = P1^2; \/\/按键 void Delay_1ms(unsigned int Time){ unsigned int x, y;for(x = Time; x > 0; x--)for(y = 120; y > 0; y--);} int ma...
一个按键怎么实现两个Led灯切换,就是按下第一个灯亮松手灯灭,再按一...
led++;if(led==1)\/\/第一次按键按下 { P2=0XFE;\/\/1111 1110 第一个灯亮 DELAY(500);\/\/延时 while(BUTTON!=0)\/\/等待按键放开 { P2=0xff;\/1111 1111灯灭 DELAY(500)\/\/延时 } } if(led==2)\/\/第二次按键按下 { led=0;\/\/要给次数初始化 P2=0XFC;\/\/1111 1101第二个灯亮 ...