delay(1000); delay(1000); led=_crol_(led, 1); delay(1000); delay(1000);}}}void xianshi2(){ led=0xfe;if(temp==2){num=8;while(num--){ dat=led; delay(1000); delay(
void delay(unsigned int ms ){ unsigned char i;while(ms--)for(i=0;i<123;i++);} void EX0INTinit(){ EA=1;EX0=1;IT0=1;} void EX0INT() interrupt 0 { a++;if(a==9)a=1;} void main(){ EX0
你没有松手监测呀!就是在按键处理程序后要加一个while(k1!=0);就是只有你松开按键后才认为本次按键执行完毕,不然就会一直重复执行按键按下的程序,那么你的d1一直就会执行亮灭操作!
然后取反
按键位置:P0.1;功能:1,当第一次按键按下,第一个灯亮,按键放开灯灭 2,当第二次按键按下,第二个灯亮,按键放开灯灭 3,重复执行前面两个步骤 灯的位置:P2口;/ include
include sbit key1=P1^0; sbit key2=P1^1; sbit led1=P1^2; sbit led2=P1^3; main() { led1=1; led2=1; while(1) { if(key1==0)led1=~led1; if(key2==0)led2=~led2; } }
单片机 单个按键按一下点亮一个LED1, 在按一下点亮另外一个LED2
一般来说,实现流水灯功能需要以下步骤:首先确定单片机型号和开发环境,并熟悉指令集和寄存器配置。然后确定LED灯的连接方式,并编写程序来控制LED灯的亮灭状态。最后在程序中添加延时函数来实现LED灯的亮灭延迟。在编写程序时
//LED1接P2.0,LED2接P2.1,低电平点亮 include
sbit led3 = P2^2;sbit led4 = P2^3;sbit led5 = P2^4;sbit led6 = P2^5;sbit led7 = P2^6;sbit led8 = P2^7;void main(){ int i,j;//点亮第一个灯 led1 = 1;led2 = 0;led3 = 0;led4
代码里写 123456789while(true){if(key==1){LED0=0;LED1=0;..//把你要亮的灯置0就行了。阳极的话置1}}
LED1灯灭 led1=1; if(key3==0) //按键3按下,LED2灯亮 led2=0; if(key4==0) //按键4按下,LED2灯灭 led2=1; if(key5==0){//按键5按下,
51单片机控制1组流水灯2组LED的方法(能给个代码最好)
判断开关对应的端口电平,改变led对应端口即可。交替闪烁就是在循环中让两个LED端口交替高低电平。循环中加入延时。延时函数我用循环实现。题目没有要求精准延时,如精准需用中断。include
单片机控制led灯亮和灭,led灯初始状态从左到右两个灯间隔一个灯循环亮灭,然后从右到左循环亮灭,,当按下按键,led灯全亮,然后全灭。然后再恢复循环。二、实验过程 (一)实验项目的方案分析 1.设计原理 STC12C5A
;led1 = ~led1;//KEY1按一下LED1亮 再按一下LED1灭 } } if(!key2) { Delay(10);if(!key2) { while(!key2) led1 = 1; //按下KEY2时LED1灭 led2 = ~led2;//KEY2也是这样 } } } }
1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。2、编写相应的代码:#include
LED1=1;} if(i==100) // 第二个灯延时熄灭 { i=0;LED2=1;} }
按键位置:P0.1;功能:1,当第一次按键按下,第一个灯亮,按键放开灯灭 2,当第二次按键按下,第二个灯亮,按键放开灯灭 3,重复执行前面两个步骤 灯的位置:P2口;/ include
P2IFG =0; //中断标志清除,防止配置过程中出现中断标志为1 _EINT(); //开总中断 LPM4; //进低功耗4 } /***端口中断程序***/ pragma vector = PORT2_VECTOR __interrupt void port2(void){ switch
用外部中断,按一次键,两个LED灯点亮,再按一次,两个LED灯熄灭,循环。用Keil(C语言)编译
1分别控制P2.0,P2.1举例子 sbit S2=P1^1;sbit LED1=P2^0;sbit LED2=P2^1;void main (void){ while(1){ LED1 = S1; //如果LED接高电平点亮这两句分别加个~ 即 LEDx = ~Sx;LED2 = S2;} }
halfbytel=halfbytel<<1; delay(10); } }} 例如:1、亮4个灯、暗4个灯,1亮1暗均匀分布且稳定不变;2、亮1个灯,暗7个灯,从上到下轮流点亮每一个灯,每次只亮一个灯,循环间隔约2秒;3、亮2个灯,暗6
sbit led2 = P1^3;void Delay(unsigned int x){ unsigned int i, j;for(i = 0; i < x; i++) for(j = 0; j <= 148; j++);} //KEY1按一下LED1亮 再按一下LED1灭 //KEY2按下LED2亮 LED1灭
//假设晶振12MHZ,P1控制LED低电平亮 include "reg51.h"unsigned int YSJS=0;unsigned int P1BUF=0X03;void main(void){ TMOD |= 0X10; //定时器1工作于方式1,16位定时器 TH1 = 0XFF; //定时器1定时时
LED1=!LED1;LED2=!LED2;}
如果是PC机需要配置一块MOXA的TTL板卡来实现高低电瓶输出:1、先设定LED灯是低电平亮还是高电瓶亮,这里假设低电平;2、设置一个定时器,在定时器里面写代码,分别发送高、低电瓶值可实现交替闪耀;例程:include
LED =0xff;P1=LED;while(1){ LED=0xe7;P1=LED;delayms(1000);LED=0xdb;P1=LED;delayms(1000);LED=0xbd;P1=LED;delayms(1000);LED=0x7e;P1=LED;delayms(1000);} }
写出点亮2盏LED灯的c语言程序?
//请依照你的硬件输入相对值#defineKEY_ACTIVE_LEVEL(请输入)#defineKEY1_PIN(请输入)#defineKEY2_PIN(请输入)#defineLED_ON_LEVEL(请输入)#defineLED_LOW_LEVEL(请输入)#defineLED_PIN(请输入)unsignedcharis_key1_press(void){reutrn(KEY1_PIN==KEY_ACTIVE_LEVEL)l}unsignedcharis_key2_press(void){reutrn(KEY2_PIN==KEY_ACTIVE_LEVEL)l}voidset_led_to(unsignedcharvalue){LED_PIN=value;}voidmain(void){while(1){if(is_key1_press()&&is_key2_press()){set_led_to(LED_ON_LEVEL);}else{set_led_to(LED_OFF_LEVEL);}}}初始化部分你要自己根据芯片资料写,数码管部分可以根据数码管的资料做数组xs[10]={0x3b……}要看数码管引脚定义了,看原理图看不出来的,可以做个200MS的定时器,然后计数5次就是1S 直接给数码管的IO口附数组的值,如P1=xs[5];要看你给的是哪个IO口了,我这边看不清你的原理图,LED亮200MS后就换动作太快,看不出效果,可以把时间加长
main() { // CLK_CKDIVR=0x00; CLK_Init(); IO_Init(); led_on=0; //timer1_init(); EXTI_DeInit();?/初始化外部中断IO口 _asm("rim"); while(1) { cbi(PA_ODR,4); } } @far @interrupt void TIM1_UPD_OVF_IRQHandler(void) { TIM1_SR1 = 0x00; // 清除更新标志 } @far @interrupt void EXTI0 (void)//外部中断子函数 { if(PA_on) { sbi(PA_ODR,4);PA_on=0;}//PA4为灯亮 else { cbi(PA_ODR,4);PA_on=1;}//PA4为灯灭 EXTI_CR1=0x00 ; } 不懂再追问,你只需要把主程序里面的灯定为一个状态,外部中断里面再定一个状态。要亮2次,加个延时,就行了。
/* 按键位置:P0.1; 功能:1,当第一次按键按下,第一个灯亮,按键放开灯灭 2,当第二次按键按下,第二个灯亮,按键放开灯灭 3,重复执行前面两个步骤 灯的位置:P2口; */ #include #define uint unsigned int #define uchar unsigned char sbit BUTTON=P0^1;//按键的位置 void DELAY(uint x) { uchar s,j; for(s=0;s<x;s++) for(j=0;j<114;j++); } void main() { uint led=0; while(1) { if(BUTTON==0) { 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第二个灯亮 DELAY(500);//延时 while(BUTTON!=0)//等待按键放开 { P2=0xff;//1111 1111第二个灯灭 DELAY(500)//延时 } } } }
很简单的东西,我都有现成的代码如果需要我可以给你
来自理科生的浪漫,用51单片机制作心形流水灯
#include sbit key1 = P1^0; sbit key2 = P1^1; sbit led1 = P1^2; sbit led2 = P1^3; void Delay(unsigned int x) { unsigned int i, j; for(i = 0; i < x; i++) for(j = 0; j <= 148; j++); } //KEY1按一下LED1亮 再按一下LED1灭 //KEY2按下LED2亮 LED1灭 main() { while(1) { if (!key2) { led1 = 1; led2 = 0;} else { if(!key1) { Delay(10); if(!key1) { while(!key1); led1 = ~led1; } } } } } //-------------------------------- #include sbit key1 = P1^0; sbit key2 = P1^1; sbit led1 = P1^2; sbit led2 = P1^3; void Delay(unsigned int x) { unsigned int i, j; for(i = 0; i < x; i++) for(j = 0; j <= 148; j++); } main() { while(1) { if(!key1) { Delay(10); if(!key1) { while(!key1); led1 = ~led1;//KEY1按一下LED1亮 再按一下LED1灭 } } if(!key2) { Delay(10); if(!key2) { while(!key2) led1 = 1; //按下KEY2时LED1灭 led2 = ~led2;//KEY2也是这样 } } } }
求写程序!我的是89C52单片机,想用两个按键和一个LED来实现,按下按键1点亮LED,按下按键2熄灭LED,两个按键另一端是接5V,LED另一端也是接5V。最好配上原理图。感激不尽 提醒一下:两个按键另一端接5V地!!!!! 电路参考如下: 代码参考如下: #include sbit LED = P2^7; #define ON 0 #define OFF 1 void main() { unsigned char keyVal; while(1) { keyVal=P3^0xFF; if(keyVal) { if(keyVal==0x02) LED=ON; else if(keyVal == 0x20) LED=OFF; } } } 3.说明一下,此按钮不需要去抖动,原因在于每个按钮只负责灯的一种状态, 如果一个按钮要负责两个状态的切换,就需要去抖。 希望能帮上你!!!!!!!