#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit D1 = P1^0;
sbit D2 = P1^1;
sbit D3 = P1^2;
sbit D4 = P1^3;
sbit D5 = P1^5;
sbit D6 = P1^7;
sbit SW1 = P3^4;
sbit SW2 = P3^5;
sbit SW3 = P3^6;
sbit SW4 = P3^7;
void main()
{
D1 = D2 = D3 = D4 = D5 = D6 = 1; //关闭
while(1)
{
//------------------------------------------------------------------------
D1 = D2 = D3 = D4 = 1; //关闭
while((SW1 == 1) && (SW2 == 1) && (SW3 == 1) && (SW4 == 1)); //等待按键
if (SW1 == 0) { D1 = 0; while (SW1 == 0);} //D2亮、等待释放
else { D5 = 0; while((SW2 == 0)||(SW3 == 0)||(SW4 == 0));}//D5亮、等待释放
//------------------------------------------------------------------------
D1 = D2 = D3 = D4 = 1; //关闭
while((SW1 == 1) && (SW2 == 1) && (SW3 == 1) && (SW4 == 1)); //等待按键
if (SW2 == 0) { D2 = 0; while (SW2 == 0);} //D2亮、等待释放
else { D5 = 0; while((SW1 == 0)||(SW3 == 0)||(SW4 == 0));}//D5亮、等待释放
//------------------------------------------------------------------------
D1 = D2 = D3 = D4 = 1; //关闭
while((SW1 == 1) && (SW2 == 1) && (SW3 == 1) && (SW4 == 1)); //等待按键
if (SW3 == 0) { D3 = 0; while (SW3 == 0);} //D3亮、等待释放
else { D5 = 0; while((SW1 == 0)||(SW2 == 0)||(SW4 == 0));}//D5亮、等待释放
//------------------------------------------------------------------------
D1 = D2 = D3 = D4 = 1; //关闭
while((SW1 == 1) && (SW2 == 1) && (SW3 == 1) && (SW4 == 1)); //等待按键
if (SW4 == 0) { D4 = 0; while (SW4 == 0); D6 = 0;} //D4亮、等待释放、D6亮
else { D5 = 0; while((SW1 == 0)||(SW2 == 0)||(SW4 == 0));}//D5亮、等待释放
//------------------------------------------------------------------------
}
}
请教,51单片机C语言,按键防抖,上面的程序,怎么加按键防抖,我怎么加都显示错误呢,谢谢了
帮忙的朋友,帮写一下,谢谢
我是菜鸟,没看明白你这,能直接在我那程序上帮改一下么,或方便企鹅一下不 ,我59286999.谢谢
追答只给你改一条,后面的都一样照着改就行
D1 = D2 = D3 = D4 = 1; //关闭
while((SW1 == 1) && (SW2 == 1) && (SW3 == 1) && (SW4 == 1)); //等待按键 这句话写一次就行 后面的不用写
if (SW1 == 0)
{
delay(100); //delay是延时函数 能知道吧
if(SW1==0) //过了delay(100)的时间 如果sw1还是为0 说明不是抖动 而是按键被按下
{ D1 = 0; while (SW1 == 0);} //D2亮、等待释放
else { D5 = 0; while((SW2 == 0)||(SW3 == 0)||(SW4 == 0));}//D5亮、等待释放
} //注意每个if后面加上括号
不行呢,这个问题我弄好久了,一直没明白,:( :( :( :( :( .只要有 delay(10); 就错误
老大,呵呵,这是上次我问,您给写的程序,后你给我发的防抖程序,怎么也弄不好,给你发信你又不回,呵呵。这回有时间的话帮帮忙呀,谢谢
原题http://zhidao.baidu.com/question/572146978.html?quesup2&oldq=1
main()
{
D1 = D2 = D3 = D4 = D5 = D6 = 1; //关闭
while(1) {
//------------------------------------------------------------------------
D1 = D2 = D3 = D4 = 1; //关闭
while(1) { //加上一个循环
while((SW1 == 1) && (SW2 == 1) && (SW3 == 1) && (SW4 == 1)); //等待按键,不变
delay(10); //加上一个延时
if((SW1 == 0) || (SW2 == 0) || (SW3 == 0) || (SW4 == 0)) break; //有任意一个按键,就跳出循环
}//加上大括号
if (SW1 == 0) { D1 = 0; while (SW1 == 0);} //D1亮、等待释放
else { D5 = 0; while((SW2 == 0)||(SW3 == 0)||(SW4 == 0));}//D5亮、等待释放
//------------------------------------------------------------------------
//……其它类推
//试试看。
这和你发给我箱里的一样,我试了,不行,只要有 delay(10); 就显示错误
追答你得加上一个函数。
//--------------------------------------------
void delay(int x)
{
int i;
while(x--) for(i = 115; i > 0; i--);
}
//--------------------------------------------
加在主函数,前面。
能帮写一下么,谢谢
追答void main ()
{
if (0 == SW1)
{
D1 = 0 ;
while (!SW1) ;
}
else
{
D1 = 1 ;
D2 = 1 ;
D3 = 1 ;
D4 = 1 ;
D5 = 0 ;
}
if (0 == SW2)
{
D2 = 0 ;
while (!SW2) ;
}
else
{
D1 = 1 ;
D2 = 1 ;
D3 = 1 ;
D4 = 0 ;
D5 = 1 ;
}
if (0 == SW3)
{
D3 = 0 ;
while (!SW3) ;
}
else
{
D1 = 1 ;
D2 = 1 ;
D3 = 0 ;
D4 = 1 ;
D5 = 1 ;
}
if (0 == SW4)
{
D4 = 0 ;
while (!SW4) ;
}
else
{
D1 = 1 ;
D2 = 0 ;
D3 = 1 ;
D4 = 1 ;
D5 = 1 ;
}
if (0 == SW5)
{
D5= 0 ;
while (!SW5) ;
}
else
{
D1 = 0 ;
D2 = 1 ;
D3 = 1 ;
D4 = 1 ;
D5 = 1 ;
}
}
还是不行呢,我是要在我那程序上,增加按键防抖。方便企鹅一下不 ,我59286999.谢谢
追答其实你自己写的程序就有防抖功能,你是运行结果和自己要求的不一样吧
追问没有的 ,一般不都用 delay(); 防抖么,我加什么地方都显示错误。
追答防抖不一定要用延时的;你把你想要的结果告诉我,我写代码给你参考
请教,51单片机C语言,按键防抖
delay(100);\/\/很短的延时,防抖 if(0==sw1){ ...;} while(!sw) 的意思是松开按键才有效,就是松开按键才会执行下一条语句,不能起到防抖作用
51单片机怎么用c语言写一个按钮控制一个led的闪烁,按一下开始闪烁,再按...
delay(10);\/\/去抖动10MS 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){自己...
51单片机用c语言设计外部中断流水灯,开发板GTX TX-1C的按键怎么...
1、去抖using和数字 2、加按键去抖动(延时)3、中断返回不用return
请高手用单片机C语言编写c51时钟程序,含有6个数显管,3个按键,要自己写...
define DOU 1818\/\/按键消抖时间sbit led_1=P2^0;sbit led_2=P2^1;sbit led_3=P2^2;sbit led_4=P2^3;sbit led_5=P2^4;sbit dp=P1^7;sbit an_mod=P2^5;sbit an_movright=P2^6;sbit an_up=P2^7;unsigned char code tab[]={0x90,0xd7,0xa2,0x86,0xc5,0x8c,0x88,0xd6,...
请教c51单片机,c语言编程,关于控制LED灯闪烁频率?
即高优先级)。在无限循环中,不断检测K1和K2按键状态,以改变全局变量“freq”并控制LED灯的闪烁频率;然后使用一个计时器中断服务程序来控制LED灯的闪烁,具体实现方式请参考代码注释。最后,为了保证每个周期的闪烁持续时间与频率相符,应该在循环内部加入一个延时操作,等待一定时间再进入下一次循环。
C51单片机用的是C语言还是汇编语言?谢谢
两种语言都可以,因为最后烧写到芯片中的是二进制文件,该二进制文件由编辑器(如KEIL)编译连接C语言源码,或者汇编语言源码获得
51单片机C语言控制按键蜂鸣器
在使用51单片机进行C语言编程时,控制按键和蜂鸣器是一个常见的应用场景。程序的核心在于通过监测按键状态的变化来控制蜂鸣器的发声。例如,在下面的代码片段中,我们定义了一个名为flag的变量,用于标记按键状态的上升沿。整个程序运行在一个无限循环中,不断地检测按键key1的状态变化。当key1检测到从低...
51单片机中如何通过一个端口高低电平,控制另外端口的高低电平? C语言程...
这句话理解为给P1.0外加一个高电平,那么编程中只要加一个判断就可以实现你的目的了,可以参考按键程序,(如果是按键判断需要加入防抖动代码)示意代码如下:sbit k=P1^0;\/\/定义一个端口名称 if(k) P2=1;\/\/如果端口为1,P2置1 else if(k==0) P2=0;\/\/否则,如果端口为0,P2置0 ...
谁能帮我看下这个程序呀,我写的51单片机,用的c语言,结果数码管就显示俩...
1,建议定义一个变量status标记当前调整的是“时”还是“分”还是秒。用一个按键控制这个变量的变化,变量的值由0变到3,再变为0。0的时候不调整,1的时候调整时,2的时候调整分,3的时候调整秒.用KEY1控制,按一下KEY1,变量status由常态0变成1,再按变成2,再按就成3,再按变回0。2,用KEY2做...
51单片机一键控制一个LED,每按一下按键LED闪烁一种频率,共闪烁三种频 ...
while(!key); \/\/等待按键释放 n++;n %= 4; \/\/n = 0~3 } } } main(){ while(1) { switch(n) { case 0: led = 1; readkey(); break; \/\/熄灭 case 1: delay(); readkey(); \/\/慢速闪烁 case 2: delay(); readkey(); \/\/中速闪烁 case 3: delay(); ...