按键位置:P0.1;功能:1,当第一次按键按下,第一个灯亮,按键放开灯灭 2,当第二次按键按下,第二个灯亮,按键放开灯灭 3,重复执行前面两个步骤 灯的位置:P2口;/ include
判断开关对应的端口电平,改变led对应端口即可。交替闪烁就是在循环中让两个LED端口交替高低电平。循环中加入延时。延时函数我用循环实现。题目没有要求精准延时,如精准需用中断。include
最简单的io应用了。。。sbit S1=P1^0; //此处IO是可以改的。。我就拿P1.0,P1.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;
LED2 = 1; //不同的接法可能导致结果不一样,有的高电平亮有的低电平 while(1) //具体看你自己的板子怎么接的 { if(KEYScan()) LED1 = ~LED1; LED2 = ~LED2; }} /*检测按键状态*/ucharKEYScan(void){ if(KEY1==0) DelayMs(100); // 延时一段时间,以免抖
delay(2);if(s1==0){ LED=0;} } } 这是个按键控制P0 口 当按键按下后P0口的灯会全部点亮,你的题目是控制多个led灯,太笼统了 都大同小异,你自己在看看吧。。。希望能帮到你。
LED1=1;DelayMS(250);LED1=0;} if(K1==0){ while(K1==0);LED2=1;DelayMS(250);LED2=0;} } }
include#defineucharunsignedcharuchartimes,led;sbitkey1=P1^0;sbitkey2=P1^1;voidt0isr()interrupt1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;times++;}voidrolled(){P0=led;led=(led>>1)|0x80;if(led==0xff)l
一个开关控制两个LED灯 C程序
配置好,我们就可以直接在端口输出数据寄存器GPIOF_ODR输出高电平控制LED了,GPIOF_ODR有16位,每个位对应GPF的一个引脚,PF0~PF15 下面就可以编写LED流水灯程序了,激动啊,等了好久终于等到今天 /* main.c */ define GPIOF_CRL (*(volatile unsigned int *)0x40011C00) //端口配置低寄存
if(k1){ led1 = 亮; //不知道你是0为亮还是1为亮 delay(1S) //延时1s led2 = 亮;} while(k1);led1 = 灭;led2 = 灭;} if(k2){ delay(10ms);if(k2){ led1 = 亮; //不知道你是0为亮还是1为亮 delay(1S) //延时1s led3 = 亮;} while(k1);led1 = 灭;le
题目不清楚,假设8个灯,整体循环一次的时间是80s,后一个灯亮了3s后前一个灯才允许熄灭。那么可以用定时器,定时器中采用一个变量aaa进行计数累加,比如设定一个1s的定时器,每次进入定时器变量aaa加1,aaa加到80就清零重新累加。定时器中点亮程序:if(aaa<10){把1号灯点亮};else if(aaa<20
if或for语句来实现两个LED交替闪烁。在使用STM32单片机编写点亮流水灯的程序时,可以使用if或for语句来实现两个LED交替闪烁的效果,代码中可以通过判断条件(两个LED是否已经交替闪烁)来控制LED状态的变化,从而实现了两个LED之间交替闪烁的效果。
stm32点亮流水灯两亮两灭用if还是for
void led_filcker(usigned char x){ while(x){ led1=~led1;x--:} } 如果你是想,按一下,松开也会闪烁,再按一下熄灭。你得定义一个变量来表示按键的按下。include
用I/O口的两个引脚读取按键的状态,采用循环扫描工作方式,按键按下为1,没按为0,则按键状态为01时,让LED交替量,数据口输出对应的高低电平即可;按键状态为10时,数据口输出同亮同灭数据
。要用到外部中断口,比如interrupt 0(汇编是ORG 03H),还要用到中断允许寄存器IE,查表看怎么写控制字。。。中断程序是第一次中断,像计数器TL0内些0x00,第二次读TL0,并关闭中断和计数器功能,可以定义个flag++作为执行标志,=1时,是第一次中断,=2是第二次,这时读数并关中断,就没等于3的
//此处加程序代码,控制灯为亮的状态,此处会重复执行,可以进行控制 } } else if(gucLEDStatus == 0x00) //灯为灭的状态 { if(gusTimeCnt >= 3600) //1个小时 { gusTimeCnt = 0x00;gucLEDStatus = 0x01; //亮状态 //增加程序代码,控制灯亮 } else { //增加程序代码,
先设置一个位变量,表征现在是启动还是停止。再设置一个位变量,表征应该是LED1亮还是LED2亮。然后在检测到按键的同时,启动定时器,取反第一个变量,计时五秒后取反第二个变量。
最简单的,就是直接延时,如下图,实现灯1亮;然后灯1灭;再然后灯2亮;再灭掉:第二种是用定时器,如下图,先是灯1亮半秒,再全熄半秒;再灯2亮半秒,再全熄半秒:
a++;if(a==288000)//合计14400秒 { a=0;led1=!led1; led2=!led2;}}
求51单片机控制两个LED灯轮流亮灭程序,亮灭时间间隔两个小时,也就是说单片机的P2.0和2.1口
sbit L2=P0^1; //L1对应P0.1,表示第二盏灯 sbit L3=P0^2; //L1对应P0.2,表示第三盏灯 sbit L4=P0^3; //L1对应P0.3,表示第四盏灯 void delay(unsigned int i) //延迟子程序,注意这里的unsigned int i,这里相当于限定了调用时候变量的类型 { unsigned char j; //局部变量
//void init_2()//输出初始化 //{ //[P_IOA_Dir]=1;//[P_IOA_Attrib]=1;//[P_IOA_Data]=0;//} void main(){ while(1){ void init_1();num=scan();//void init_2();switch(num){ case 1:{ while(1){ [P_IOA_Data]=0x9f;delay(500);// if([P_IOA_Data]==
CASE2 JNB K3,CASE3 JNB K4,CASE4 AJMP LOOP CASE1:MOV LED,#01111111 AJMP LOOP CASE2:MOV LED,#00111111 AJMP LOOP CASE3:MOV LED,#00011111 AJMP LOOP CASE4:MOV LED,#00001111 AJMP LOOP K1~K4对应按键输入口,LED对应LED输出,两者应为普通IO口
如果只有这一个要求的话那很简单啊,我用两条指令就能实现你的要求:LDP X0 SFTL X0 Y0 K16 K1 END 绝对可以满足你的要求。
sbit LED1=P2^0;sbit LED2=P2^1;// STC的下载工具中,有延时的计算例子,再使用循环延时 void Delay100ms(){ //@11.0592MHz unsigned char i, j;i = 180;j = 73;do{ while (--j);} while (--i);} void main(){ unsigned int n;while(1){ LED1=~LED1;LED2=~LED2;for(
那你把两盏led灯并联,用一个口联接就行了,例如用P2口的1脚 include
一、简单讲:想要灯亮,就将对应端口置0。反之就是灯灭。二、详细讲:假设用keil编写,新建工程->选择单片机型号->新建源文件->设置output(点魔术棒图标勾选create hex file)。我们用P2^0端口连接一个led(led另一端连电源)。先给端口起别名sbit led1=P2^0;之后代码中需要灯亮就写led1=0;即可。
写出点亮2盏LED灯的c语言程序?
2、雾灯:雾灯装在前照灯附近或比前照灯稍微低的位置。它是在有雾、下雪、大雨或尘埃弥漫等能见度低的情况下,作为道路照明并为迎面来车提供信号的灯具。灯光多为黄色,这是因为黄色光波较长,有良好的透雾性能。灯泡功率一般为35W。3、倒车灯:倒车灯装于汽车尾部,用于照亮车后道路和告知车辆和行人
LED灯泡远光是远的方向。如只有脚下的亮光,那就是近光 ,其实远光和近光是很好区分的 。如果是从线路上来区分的话,很难 ,需要使用万用表来测量一下LED灯泡的供电电压,才能够准确的判断出来 。
函数名称: Flow_led 功 能: 流水灯(循环一次)参 数: MS--点亮相邻LED的时间间隔,单位是毫秒 返回值 : 无 /***/ void Flow_LED(uchar MS){ uchar i;for(i=0;i<8;i++)//循环8次,8个LED依次点亮 { All_led(FALSE);//全部熄灭 One_led(i,TRUE);//点亮指定的LED Delayms
本次单片机实习我们一共完成了个模块的程序设计,包括:led显示模块、数码管显示模块和键盘模块。分别实现了流水灯的循环点亮控制、数码管的静态和动态计数显示,还有矩阵键盘按键控制数码管显示的程序设计。然后我们分别用protues系统仿真软件对各个模块进行了模拟仿真,用keil软件编制了汇编语言程序,验证了我们所设计的程序。
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);} }
单片机C语言编写点亮两盏led灯,首先从中间两盏点亮,依次相邻两盏灯点亮,依次循环永不停息。
#include bit flag;char cnt;void Timer0Init(void) //50毫秒@12.000MHz{ TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x01; //设置定时器模式 TL0 = 0xB0; //设置定时初值 TH0 = 0x3C; //设置定时初值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; EA = 1; cnt = 0;}void main(){ signed char i; while(1) { for(i=3;i>=0;i--) { P1=~(119) flag=0;}如下即可: #includevoid main(){ unsigned int i, j; P1 = 85; while(1) { P1 ^= 255; for(i = 100; i > 0; i--) for(j = 800; j > 0; j--); }}
//请依照你的硬件输入相对值#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后就换动作太快,看不出效果,可以把时间加长
#include "reg51.h" #define uchar unsigned char sbit LED1=P2^0; sbit LED1=P2^1; unsigned int CNT1,CNT2; void main() { TMOD=0x01;//00000001设置定时器0工作方式1 TH0=(65536-50000*110592/120000)/256; TL0=(65536-50000*110592/120000)%256; ET0=1; EA=1; TR0=1; while(1) { ; } } void time0() interrupt 1 { TH0=(65536-1000*110592/120000)/256;// 111111111+1 TL0=(65536-1000*110592/120000)%256; CNT1++; if(CNT==3600) { CNT2++; if(CNT2<1000) { LED1=0;LED2=1; } else { LED1=1;LED2=0; } } }
你有什么教材吗?我用的郭天祥的教材的第74页就有一个控制一秒闪烁的。你这个问题是超简单的问题。 你要程序的话我可以给你
#include #define uint unsigned int #define uchar unsigned char #define LED P0 sbit S1=P1^0; 按键1 void delay(uint i) { uchar x,j; for(j=0;j<i;j++) for(x=0;x<=148;x++); } void main() { if(s1==0) { delay(2); if(s1==0) { LED=0; } } } 这是个按键控制P0 口 当按键按下后P0口的灯会全部点亮,你的题目是控制多个led灯,太笼统了 都大同小异,你自己在看看吧。。。。。。希望能帮到你。
循环中判断一下,用取余的方法 循环变量i if(i%2==0)//表示第二次按下按键 else if(i%3==0)//表示第三次按下按键 else if(i%4==0)//表示第四次按下按键 else //其他表示第一次 只是给个思路,具体的实现,还要去电脑上实际操作一下看看