你的程序,灯一直是在开关状态(0与1),只是眼睛看不出来,记得先初始化再进入循环,不然程序会跑飞,然后再看看电路图,确认电路和你的程序是否一至。include sbit D1=P1^0;sbit D2=P1^5;void main(){

只是一个二维数组中的一个元素,为何要分离?例如:1 2 3 4 5 6 2 5 4 7 6 8 3 5 4 7 6 8 5 5 4 7 6 8 6 3 4 7 6 8 9 5 4 7 6 8 7 5 4 7 6 8 key[5][2] 代表的是 3

单片机 利用定时器,实现LED灯闪烁 利用定时器0,工作方式1实现LED以1s亮灭闪烁 评论 共1条qq574090173 : 一个简单的小程序 单片机不同频率闪烁一个LED灯简单程序,

2.连接电路:将LED灯与单片机连接起来。一般情况下,将LED的正极连接到单片机的一个GPIO引脚,将LED的负极连接到电阻,然后将电阻的另一端连接到单片机的地(GND)引脚。确保连接牢固。3.编写程序:使用单片机的编程软件(如A

//没有其他灯被点亮,就自动熄灭,while (1) { if (P1 != 255) { //有按键?yanshi(10); //延时消抖 if (P1 != 255) return P1;//返回键盘的状态 } else { //没有按 i = 0;while (P1

程序到最后就进入死循环while(1)了,每次都在检测key1的状态,不是0就是1,程序执行的速度那么快,你说你的这条 if(key1==0)d1=1; 有半毛钱用吗?从宏观上来讲这条程序一点用都没有,每个时刻key1都是等于1

单片机独立键盘点亮LED的问题??

24个灯分别接到单片机的24个引脚上,四个控制开关接到控制引脚上,按s1时第一组八个灯按一种流法点亮,程序貌似是按1个键就实现了所有流法

初始化单片机(设置定时器的定时时间为0.1s,控制灯,数码管的IO口设置为输出模式,检测按键的IO口设置为输入模式)---> 写三个函数模块(按键检测函数模块keyscan(char times);,流水灯控制模块LED_Ctrl(char times,char

1.端口配置 2.一个延时功能函数(500ms)3.P1口分别赋值0x01,0x02,。。。0xff等 4.读P2口按键值,适当去抖

while(1)//把while放到你的主函数里 { if(key==0) //定义到自己的按键 { run++; //全局变量 if(run==4){ run=1;} } P0=0xff; //这个程序控制的是P0口 switch(run){ case 1:P0=0xfe;P0=0x

3个按键控制8个流水灯,P1口接8个LED灯,P3口接3个按键,仿真图如下。

怎么用c程序实现3个独立按键控制流水灯(按键1实现速度加快,按键2实现减慢,按键3实现停止)?

;p3.0 p3.1 p3.2 p3.3 是接4个铵键 p3.4 p3.5 p3.6 p3.7 是接4个LED, 输出低电平亮;按一下键亮,再按一下灭. 4 个独立org 000main:jb p3.0,next1lcall t30msjb p3.0,next1

sbit led4=P1^4; //led灯,按实际再改 sbit key1=P2^1; //按键,按实际再改 sbit key2=P2^2; //按键,按实际再改 sbit key3=P2^3; //按键,按实际再改 sbit key4=P2^4; //按键,按实际再改 void delay

不用中断一样的实现,而且可以有多少个按键就可以有多少种流水灯方式。你使用的键盘函数直接调用流水灯函数就可以。比如使用独立键盘,if(P1.1==0) light_water(); 然后:void light_water(){ num=1;for(a=0;a<8;

include//k2~k4 分别控制le1~le4 void delay(unsigned int x) //延时函数{ while(x--); //延时数减一} void key_event (unsigned char d) //根据扫描到的键值,亮相应的LED { switch(d)

} switch(keyval) { case 1:led1=0;delay(1);led1=1;keyval=0;break;

KEY_0 ) { // 按键KEY_0被按delayus(20); //消抖动 if (!KEY_0 ) { //确认被按下 LED_7=~LED_7 //灯亮或灭}}} 其余一样即可。

可以检测单个按键,也可以同时检测多个按键 过程:开始——读P1口数据到A——A中的数据右移4次——A中的内容和F0H相或——A中的数据送到P1口——回到开始

如何用中断实现四个led单独定时,各定时十分钟,且互不影响,用四个按键控制四个led灯,

1 参考电路图: 如下 2 参考程序:ORG 0000H LJMP MAIN ORG 0100H MAIN: SETB P1.7 ; LED 灭 LL1: SETB P1.0 JB P1.0, LL1 MS: CPL P1.7 ; LED

不会有影响啊,K1,K2,K3按键,分别控制LED1,LED2,LED3;定义一个状态标志变量,识别短按、长按1S,3S,5S的4种状态,只需对每个按键的状态标志进行判断,执行状态标志下的各功能。

在无限循环中,不断检测K1和K2按键状态,以改变全局变量“freq”并控制LED灯的闪烁频率;然后使用一个计时器中断服务程序来控制LED灯的闪烁,具体实现方式请参考代码注释。最后,为了保证每个周期的闪烁持续时间与频率相符,应该

5、点亮灯,通过k++,改变效果。6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。

请教一个关于单片机按键控制LED灯的问题

define LED_RED p0^4 void scan_key(void);//用来控制LED_RED void DelayMS(unsigned int x);void main(){ while(1){ if(K==0)LED_BLUE=1;scan_key();else LED_BLUE=0;} } void scan_key(void){ unsigne

一个按键时程序如下:while(1){ if(key==0)//按键按下 { delayms(20);//延时消抖 if(key==0)//再次判断按键是否按下 { while(key==0)//按键没有抬起 { led=!led; delayms(200);}//LED闪烁 } } else l

while(!key2) led1 = 1; //按下KEY2时LED1灭 led2 = ~led2;//KEY2也是这样 } } } }

很简单那就是当按下某个按键时调用对应LED灯闪烁程序就可以了

单片机 两个按键各自控制两个LED以不同频率闪烁,互不影响。就是两组控制。程序该怎么写?

你的led1=~led1;这个语句没有循环,所以只会反转一次。要么加循环,要么再写一个闪烁函数。 void led_filcker(usigned char x) { while(x) { led1=~led1; x--: } } 如果你是想,按一下,松开也会闪烁,再按一下熄灭。你得定义一个变量来表示按键的按下。 #include #define uchar unsigned char bit stop=1; sbit k5=P1^4; void delay(uchar xms) { while(xms--); } void main() { if(k5==0) { delay(1000); if(k5==0) { while(k5==0) { if(stop) <<<<<<<<<<<<<<<此处执行你的语句 else stop=~stop: } } }}
用定时器 int a=0; void Timer0Init(void) //100微秒@11.0592MHz { AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x02; //设置定时器模式 TL0 = 0xA4; //设置定时初值 TH0 = 0xA4; //设置定时重载值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 } void interrupt 1 { a++; if(a==5000) P0^0=! P0^0; if(a==10000) { P0^1=! P0^1; P0^0=! P0^0; a=0; } }
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灯 亮或者灭的一个变量。 当你按下开关后,s1==0,就执行 led=!led 这条语句。 led=!led 的意思就是取反的意思,即原来led灯亮的话 执行该条语句后就变成灭;原来灭的话 执行该条语句后 就变成亮。按键按下就打控制灯的io取反就可以了。如:if(key1==1){while(key1==1); // 等待按键放开led1=~led1;}
#include #define uchar unsigned char uchar time=0; sbit key=P3^2; sbit led1=P1^0; sbit led2=P1^1; void keye() interrupt 0 { TR0=1; led1=0; led2=1; while(key==0); TR0=0; } void t0isr() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; time++; if(time>=20) { time=0; led1=~led1; led2=~led2; } } main() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; ET0=1; EA=1; while(1); }
算法: 1 采用定时器定时25毫秒 启动定时器工作 2 每当定时时间到中断 在中断服务程序中软件计数器减1(初始值为20) 3 当软件计数器减到0时,表示0.5秒时间到 这时可以判断开关状态 开关合上 可以让8个LED左移一位 开关断开 可以让8个LED右移一位 呵呵 按上诉算法 编写程序 就可以实现你的要求(指导可以见百度知道的消息 右上角) 满意 就选满意回答
void main() { int i=0; //设置参考变量 //初始化 p1.0=1; p1.1=0; p1.2=0; //进入按键操作 while(1) { if(p2.2==0) { i++; if(i==1) { p1.0=0; p1.1=1; p1.2=0; delay();//延时,由于不知道你用的单片机型号,这个需要你自己设定了。 } if(i==2) { p1.2=1; p1.0=0; p1.1=0; delay();//延时,由于不知道你用的单片机型号,这个需要你自己设定了。 } if(i==3) { p1.0=1; p1.1=0; p1.2=0; delay();//延时,由于不知道你用的单片机型号,这个需要你自己设定了。 i=0;//参考变量归0 } } } }
要实物 还说仿真呢 硬件做好了吗 我做单片机的
#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; } } } 试试看。
#include #define uint unsigned int sbit key=P3^1; sbit led=P2^0; void delay(uint z) { while(z--); } void main() { while(1) { if(key==0) { delay(1000); if(key==0) { while(!key); led=~led; } } } }