include sbit P32 = P3^2;sbit LED = P1^1;void main(){ IE = 129; while(1);}void X0_Int() interrupt 0{ while(!P32) LED = 0; LED = 1;}

1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。2、编写相应的代码:#include //定义单片机的头文件sbit led=P2^0; //定义单片机的管脚,void main(void) //主函数

LED = ~LED; /*LED取反,此时LED = 0,灯亮。当松手时,KEY1 = 1,不满足if语句不 进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入循 环,LED取反得到LED = 0,灯亮。

if(key1==0){ while(1){ P0=0x01;unsigned char t=0;P0=P0<<1;t++;if(t>=5)t=0;P0=0x01;} };

51单片机,C语言使用独立键盘点亮LED灯要求?

if (keyi==0) //有按键 { delay(80); //延时去抖 if (keyi==0) //确定有按键 if(key==3) //每按一键,key加一,当为3时,归0,此处可以设置控制几个led key=0;else key+=1;} } void main(){

KEY1) //检测到按键按下 { LED = ~LED; /*LED取反,此时LED = 0,灯亮。当松手时,KEY1 = 1,不满足if语句不 进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进

1、首先打开编程软件Keil uVision4,新建一个工程文件,在菜单栏中Project—— New uVision Project..。2、然后选择单片机型号是 Atmel 公司的 AT89c52,单击OK。3、再单击工具栏上新建按钮,新建一个文档,然后再点击保存,

在四个灯循环点亮的状态下,每点亮一个灯需要延时,如果调用延时子程序,按键就显示不灵敏了,所以,采用定时器中断的方式控制延时,就不影响按键了。include include 仿真图效果。

51单片机按键控制按下K1四个led灯循环亮,再按一下全灭,c程序怎么写

void main(void){ led=1;//不亮 while(1){ if(key1==0 && key2==1)//按键1按下,按键2没按 { led=0;//亮 } else if(key1==1 )//按键1释放或未按时,灯灭 { led=1;//灭 } if(key2==0 && k

这个程序中没有熄灭的程序,单片机当然不会有熄灭的操作。修改如下:if(k1==0)P2=0xee;else P2=0xff;if(k2==0)P2=0xfd;else P2=0xff;这是按住就亮,松开就灭的程序。如果想实现按一次亮,再按一次熄灭。程序如下

同时开放了定时器中断,并将定时器中断优先级设置为1(即高优先级)。在无限循环中,不断检测K1和K2按键状态,以改变全局变量“freq”并控制LED灯的闪烁频率;然后使用一个计时器中断服务程序来控制LED灯的闪烁,具体实现方式

1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。2、编写相应的代码:#include //定义单片机的头文件sbit led=P2^0; //定义单片机的管脚,void main(void) //主函数

delay1(10); //消抖 if(!k1) { while(!k1); //等待松开 //松开后,再检测 k3:if(!k3) { //再检测总开关 delay1(10); //消抖 if(!k3) { while(!k3);//等待松开 LED = ~LED;//亮灭交

else if(key2 == 0) /*按键2按下*/ { led = 1; /*灯灭*/ delay(1000);while(!key2);} } }

delay(50000); //大约延时450msled=0;if(k2==1)break;}led=0;}思路很简单,就是用检测的方法去扫描相应的按键是否被触发,然后执行相应的子程序。

c51单片机:两个独立按键控制一个led,k1按下松开led闪烁,k2按下松开led灭?

1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。2、编写相应的代码:#include //定义单片机的头文件sbit led=P2^0; //定义单片机的管脚,void main(void) //主函数

Keil uVision4实例 51单片机控制LED灯闪烁,关键看C语言的编程细节。建立项目:LED灯闪烁。新建C文件:LED灯闪烁 引用51头文件。将所有的灯都点亮。让所有的灯全部灭了。添加循环语句。添加一个变量。使用循环语句创造延迟。

keil按键控制led灯的亮灭如下:1、单片机一个按键控制一个LED灯怎么处理,求程序,用keil软件的,谢谢.2、单片机用c语言,按钮控制一个LED灯,要求按下松开,LED亮,按下松开,LED暗!循环3、按键点灯程序,按一下按键灯亮

led2;sbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;void delay(int a){uchar i;while(a--)for(i=0;i<120;i++);}main(){unsigned int i;

Keil编程:51单片机键盘控制LED

while(1){ P1=aa;delayms(1000);aa=_crol_(aa,1);} 这前面的while(1)根本不会退出,也就是不会执行下面的if(key1 == 0)的语句了,所以按键按下去当然没有反应了 if(key1==0){ P1=0x7e;

} void main(){ bit dir=0,run=0; //标志位定义及初始化 char i;while(1){ switch (P0 & 0x0f){ //读取键值 case 0x0e:run=1;break; //K1动作,设run=1 case 0x0d:run=0,dir=0;break;

P1口接8个LED灯,P3口接4个按键K1~K4 ,用于控制流水灯的四种效果,仿真图如下。

} } if(k2==0) { delay(10); if(k2==0) { while(k2==0); flag=2; } } if(k3==0) { delay(10); if(k3==0) { while(k3==0); flag=3;

delay(5000);如果所带参数是一个常数,那流水灯的速度就是固定不变的。如果改成一个变量,如:delay(speed); 这速度就可以变化可调了。这样,通过按键改变变量speed的值,就调速度了。

TLOW EQU 0F0HTHIGH EQU 0D8HFLAG_DIR BIT 20H.0;FANGXIANGCOUNT_INT DATA 30HCOUNT_K DATA 31HLEDVALUE DATA 32HCOUNT_KEY DATA 33HKEY0 EQU P2.0KEY1 EQU P2.1KEY2 EQU P2

51单片机汇编怎么用四个独立按键来控制流水灯的速度?

不管怎样,NPN三极管的C极肯定要有供电。也就是要加正向电压。

电平状态输出相应的信号来控制LED的亮灭。将按键与某个IO口相连。当按下按钮时,IO口会被拉低(变为低电平),未按下按钮时为高电平。在程序中通过循环检测IO口的状态,检测到低电平表示按钮被按下,可以执行相应操作。

程序错误:1,实际开关在P1^1,程序定义却是P0^3。2, while(1);后边不应该有分号,这样的话,程序就在此死循环了,不往下执行了。3,电路测试已经正常,是已经焊接实物电路了吗,那个D?是发光二极管吗,图中却是普通

你的问题应该是LS138没有正确使能;E1、E2的逻辑使能要求电平是相反的,不能连接在一起;修改如下:ENLED 连接 E1,ADDR3 连接 E2、E3(即E2、E3连接在一起);

LED取反得到LED = 0,灯亮。*/ delay(500); /*此处延迟,保证连续两次按键动作处在程序的延时过程中,不进行其他程序从而。

51单片机按键控制led灯从中遇到的问题

不用中断一样的实现,而且可以有多少个按键就可以有多少种流水灯方式。你使用的键盘函数直接调用流水灯函数就可以。比如使用独立键盘,if(P1.1==0) light_water(); 然后: void light_water() { num=1; for(a=0;a<8;a++) { P1.1=num<<1; delay(1000); //延时; keyboard();//执行时又不停扫描键盘函数; } } 这样就会有一个LED从右往左移动8次;那么当第一次流水未完时,又调用第二个流水函数light_water1就能中断当前执行的流水函数又去执行第二个流水灯函数了。 希望我的回答能帮助到你。
其实很简单的,随便使用一个定时/计数 器,使其工作在方式1(方便计算初值),然后写中断服务函数,使用_crol_()函数来反复循环做流水效果,然后在主函数最后写while(1),一直不停扫描键盘函数,然后键盘函数定义4个按键,开始:TRx=1,停止:TRx=0,至于快慢的控制你可以在中断函数里边写一个延时函数,然后按键3和4按下一次自增或自减1000(你可以取其他值),然后传递给延时函数。 有不懂的地方随时回复我。 希望我的回答能帮助到你。
#include sbit key=P1^0; sfr LED=P0; main() { while(1) if(key==0)P0=0xc0; else P0=0xff; }
#include sbit key = P1^0;//按键 void delay(unsigned int time) { unsigned int i,j; for(i=0; i<time; i++) for(j=0; j<1000; j++) {;} } void mian() { unsigned int temp =0x00; while(1) { if(key == 0) { delay(20);//适当延时,消除按键抖动,自己看实际情况修改时间 if(key == 0) temp = ~temp; } P2 = temp; } }
#include sbit k1=P1^0; sbit k2=P1^1; void delay(unsigned char a) { unsigned char i,j; for(i=0;i<a;i++) for(j=0;j<120;j++); } main() { unsigned char led=0xfe; while(1) { if(k1==0) { delay(10); if(k1==0) { while(k1==0); led=(led<<1)|0x01; if(led==0xff)led=0xfe; } } if(k2==0) { delay(10); if(k2==0) { while(k2==0); led=(led>>1)|0x80; if(led==0xff)led=0x7f; } } } }
按K1部分加一行 flag=1; led=0xfe;//重新赋值 K2部分也加这一行 因按K4后,Ied=led+1; 就不是亮一个啦
给个20悬赏就来一句“请编写程序”,大老板啊!看一下别人怎么问问题的去吧,青瓜蛋子!能在5分钟里给你写出程序的知友差你那20悬赏么!
今天做回好人,闲着给你写一个做参考。 按键按一次LED灯灭,在按一次按键LED灯亮。 程序如下: /************************************************************************************************************* #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 main(void) { 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); //检测松手 } } } *****************************************************************************************************************/
程序在哪里?
这个。硬件我就不说了。至于软件嘛,呵呵。弟,认真观察一下你的过程。 程序到最后就进入死循环while(1)了,每次都在检测key1的状态,不是0就是1,程序执行的速度那么快,你说你的这条 if(key1==0)d1=1; 有半毛钱用吗?从宏观上来讲这条程序一点用都没有, 每个时刻key1都是等于1的,也就是说无时无刻都是在执行d1 = 0这种情况。 自己想想办法怎么避免这种情况,比如,可以设置一个标志位,根据按键的按下的情况改变这个标志位,再根据这个标志位来操作led的亮灭。但是要注意,按键需要消抖。可以这样: bit fg = 0; while(1) { if(key1==0) fg=1; if(fg == 1) d1=0; } 我上面给你的这段,只能按一次按键看到灯灭(亮?不知道你的硬件怎么接的)的效果,想用按键控制led的亮和灭,还需要进一步探讨。我相信我这么一说,你也就懂了,好好想想吧。