if(key1==0){ while(1){ P0=0x01;unsigned char t=0;P0=P0<<1;t++;if(t>=5)t=0;P0=0x01;} };
按键按下就打控制灯的io取反就可以了。如:if(key1==1){while(key1==1); // 等待按键放开led1=~led1;} 使用四个独立按键控制四个LED灯亮灭的汇编程序怎么弄?单片机的P1.0-P1.3接四个发光二极管L1-L4的阴极
include "reg52.h"typedef unsigned int u16;typedef unsigned char u8;sbit led=P2^0;//把所要控制的led灯定义为p2.0这个口sbit k1=P2^1;sbit k2=P2^2;void delay(u16 i){while(i--);}//一个延时程序void
//这里想实现当某灯被点亮后,如果一定时间 //没有其他灯被点亮,就自动熄灭,while (1) { if (P1 != 255) { //有按键?yanshi(10); //延时消抖 if (P1 != 255) return P1;//返回键盘的状态 }
LED取反得到LED = 0,灯亮。*/ delay(500); /*此处延迟,保证连续两次按键动作处在程序的延时过程中,不进行其他程序从而。
3.编写程序:使用单片机的编程软件(如Arduino IDE、Keil等),编写控制LED灯的程序。以下是一个简单的示例程序(以Arduino为例):// 定义LED灯连接的引脚 const int ledPin = 13;void setup() { // 将LED引脚设置为
单片机独立键盘控制LED灯,程序问题
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
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灭?
KEY1) //检测到按键按下 { LED = ~LED; /*LED取反,此时LED = 0,灯亮。当松手时,KEY1 = 1,不满足if语句不 进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进
电平状态输出相应的信号来控制LED的亮灭。将按键与某个IO口相连。当按下按钮时,IO口会被拉低(变为低电平),未按下按钮时为高电平。在程序中通过循环检测IO口的状态,检测到低电平表示按钮被按下,可以执行相应操作。
以下是一个简单的51单片机程序,通过按下按键可以实现4种不同状态的灯亮灭,包括正闪、反闪、多种间隔闪。程序中使用了定时器来实现闪烁功能。程序中使用了P1.0到P1.3作为控制灯的引脚,P3.2作为按键的引脚。每当按下
4.上传程序:将编写好的程序上传到单片机中。将单片机通过USB线连接到计算机,选择正确的开发板和端口,然后点击上传按钮将程序烧录到单片机中。5.测试控制:完成上传后,单片机将开始执行程序。LED灯应该会按照程序中定义的亮
单片机独立键盘控制LED亮灭
在主函数中编写程序,实现LED点亮和灭的时间控制。可以使用if语句或while语句来判断时间是否达到要求,然后控制LED灯的点亮和灭。在main函数中添加延时函数,以实现上电后30秒后LED灯开始点亮的要求。下面是一个简单的示例程序
就写代码给P1.0输出1就能亮起LED灯D1。sbit LED_D1= P1^0 ;LED_D1 =1;//=1亮灯 ,=0灭灯当也要看电路,完善的电路还会有驱动电路如三极管点了,也要看LED固定的那端是接地还是接VCC。最终无非就是通过单片
1、创建项目,如图所示。2、创建延迟函数。3、创建C语言主函数。设计unsigned char k=0;变量。4、添加循环效果。5、点亮灯,通过k++,改变效果。6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。
以下是一个简单的51单片机程序,通过按下按键可以实现4种不同状态的灯亮灭,包括正闪、反闪、多种间隔闪。程序中使用了定时器来实现闪烁功能。程序中使用了P1.0到P1.3作为控制灯的引脚,P3.2作为按键的引脚。每当按下
单片机按键控制LED灯亮灭程序怎么做到的?
int u16;typedef unsigned char u8;sbit led=P2^0;//把所要控制的led灯定义为p2.0这个口sbit k1=P2^1;sbit k2=P2^2;void delay(u16 i){while(i--);}//一个延时程序void main(){if(k1==1)while(1){led
K1~K4对应按键输入口,LED对应LED输出,两者应为普通IO口
if( keysign1==2) keysign1=0;} if(!k2){ _delay_ms (10);while(!k1);if( keysign2==3) keysign1=0;} } uchar ledstate(void)//LED显示程序 { static uchar temp=0xff;uchar temp1=0;if(++temp=
一键多功能按键识别技术 1.实验任务 开关K1接在P3.2管脚上,在AT89S51单片机的P0.0端口接有1个发光二极管,上电的时候,L1接在P1.0管脚上的发光二极管在亮,当一次按下开关K1的时候,灯灭,再按一次,灯亮,如此轮流
单片机 利用定时器,实现LED灯闪烁 利用定时器0,工作方式1实现LED以1s亮灭闪烁 评论 共1条qq574090173 : 一个简单的小程序 单片机不同频率闪烁一个LED灯简单程序,
单片机独立键盘上 一直按k1实现led灯1357闪烁,间隔1秒 按一下k2 2468闪烁 间隔1秒?
#include //taobao:广州华电 void delay_ms(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } main() { while(1) { P0=0xaa; delay_ms(1000); P0=0x55; delay_ms(1000); } } //不是精确掩饰,大概1S左右吧..要精确延时用定时器,比较麻烦..没有具体的电路图,就只以P1口作为基本输驱动口进行说明。主程序需要一个delay函数进行led亮灭的延时。当然你首先要先进行P1口和开关按键的预定义,这个要看你板子的原理图。 void delay(int l) { int a,b; for(a=0;a<l;a++) { for(b=0;b<10000;b++); } } void main() { int m=0; //设置开关为P3.7和P3.8,低有效 while(1) { if(P3.7 ==0) { m = 0; } else if(P3.8 ==0) { m = 1; } if (m == 0) { P1.0=1; delay(10); P1.0=0; delay(10); P1.1=1; ...//以此类推到P1.7 } else if(m ==1) { P1.0=1; P1.1=1; delay(10); P1.0=0; P1.1=0; delay(10); P1.2 =1; P1.3 =1; delay(10); ...//同理以此类推即可 } } }
led应该是一个变量,是代表led灯 亮或者灭的一个变量。 当你按下开关后,s1==0,就执行 led=!led 这条语句。 led=!led 的意思就是取反的意思,即原来led灯亮的话 执行该条语句后就变成灭;原来灭的话 执行该条语句后 就变成亮。按键按下就打控制灯的io取反就可以了。如:if(key1==1){while(key1==1); // 等待按键放开led1=~led1;}
#include #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--); } 可下载到单片机验证。
#include #include #define uint unsigned int #define uchar unsigned char void yanshi (uint n) { uint j, i; for (j = n; j > 0; j--) for (i = 110; i > 0; i--); } uchar anjian () { uchar i; //这里想实现当某灯被点亮后,如果一定时间 //没有其他灯被点亮,就自动熄灭, while (1) { if (P1 != 255) { //有按键? yanshi(10); //延时消抖 if (P1 != 255) return P1;//返回键盘的状态 } else { //没有按 i = 0; while (P1 == 255) { //没有按就循环 yanshi(10); //延时 i++; if (i == 200) { P0 = 0; i = 199;}//延了200就关灯 } } } } void main() { uchar dian; P0 = 0x00; while (1) { // P0 = anjian(); dian = anjian(); switch (dian) { case (0xfe): P0 |= 0x01; break; case (0xfd): P0 |= 0x02; break; case (0xfb): P0 |= 0x04; break; case (0xf7): P0 |= 0x08; break; case (0xef): P0 |= 0x10; break; case (0xdf): P0 |= 0x20; break; case (0xbf): P0 |= 0x40; break; case (0x7f): P0 |= 0x80; break; default : break; } } } 试试看。
应该写成,K1按下后LED1=~LED1 //取反, 需要加延时20~100ms,避开按钮毛刺 不应采用计数方式
#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; 就不是亮一个啦
led应该是一个变量,是代表led灯 亮或者灭的一个变量。 当你按下开关后,s1==0,就执行 led=!led 这条语句。 led=!led 的意思就是取反的意思,即原来led灯亮的话 执行该条语句后就变成灭;原来灭的话 执行该条语句后 就变成亮。按键按下就打控制灯的io取反就可以了。如:if(key1==1){while(key1==1); // 等待按键放开led1=~led1;} 使用四个独立按键控制四个LED灯亮灭的汇编程序怎么弄? 单片机的P1.0-P1.3接四个发光二极管L1-L4的阴极,P1.4-P1.7接四个开关K1-K4程序:ORG 00HSTART: MOV A,P1ANL A,#0F0HRR ARR AORl A,#0F0HMOV P1,ASJMP START可以检测单个按键,也可以同时检测多个按键过程:开始--读P1口数据到A--A中的数据右移4次--A中的内容和F0H相或--A中的数据送到P1口--回到开始
LED=~LED; 取反的速度太快 按键按下 实际是led高频闪烁 按键松开后 跳出while(1)松手检测 然后在main的while(1)里面一直等待按键再次按下,同时led=1,也就是说是亮 因此 你的函数的功能基本上可以是 按键按下 led高频闪烁 按键松开 led常亮 所以你要改逻辑结构才行