就写代码给P1.0输出1就能亮起LED灯D1。sbit LED_D1= P1^0 ;LED_D1 =1;//=1亮灯 ,=0灭灯当也要看电路,完善的电路还会有驱动电路如三极管点了,也要看LED固定的那端是接地还是接VCC。最终无非就是通过单片机
以下是一个简单的51单片机程序,通过按下按键可以实现4种不同状态的灯亮灭,包括正闪、反闪、多种间隔闪。程序中使用了定时器来实现闪烁功能。程序中使用了P1.0到P1.3作为控制灯的引脚,P3.2作为按键的引脚。每当按下
单片机一个开关控制二个灯的方法。🔌单片机控制电路通过单片机一个IO口接到一个三极管(类似开关管)的控制脚(B),开关管的输入脚接地(E),输出脚(C)接灯的负极,这样一个开关就形成了。🔌并联电路当
在 `loop()` 函数中,通过 `digitalWrite()` 函数来控制引脚输出高电平(点亮 LED)和低电平(熄灭 LED),并使用 `delay()` 函数来控制灯亮和灭的时间间隔。4. 将代码上传到单片机中,例如 Arduino 开发板,然后运行
用单片机控制一个灯的亮灭?
include
void DelayMS(uint x){ uchar i;while(x--){ for(i=0;i<120;i++);} } //主程序 void main(){ uint s;while(1){ P0=0xfe;DelayMS(150);for(s=8;s>1;s--){ P0=_crol_(P0,1); //P0 的值向
用51单片机来简单说明一下:用8只LED代表8盏灯(D1~D8),限流电阻用一个9脚排阻RP1,原理图如下:为了视觉观察观察方便,用一个500ms,也就是0.5秒的延时程序来间隔灯的亮灭变化。当然这个时间是可以自由修改的,修改成
思路:循环控制常亮状态的值,将其从最高位循环到最低位。这个用于最后状态的常亮 在常亮循环中,控制不是常亮的其它所有位进行再次循环,逐渐从最低位亮灭循环到最高位 代码如下:include
;以89c51单片机为例,假定用P1控制LED:IO_LED EQU P1;led_0 BIT P1.0;led_1 BIT P1.1;led_2 BIT P1.2;led_3 BIT P1.3;led_4 BIT P1.4;led_5 BIT P1.
4、添加循环效果。5、点亮灯,通过k++,改变效果。6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。
1、依次亮,依次灭:从一个灯亮到全亮,再到全灭,每次改变一个灯亮灭 2、奇偶号灯间隔亮灭:隔一个灯亮一个灯亮灯时间为1s,没有灯全灭的时候 3、依次闪烁、切换时间为3秒,闪烁时间为2秒,我理解的是,没三秒
要求用51单片机控制8个LED亮灭的原理图+程序+解说?
上电灯就亮可能是单片机里有程序。你看下原理图。如果是高电平灯亮,就写个程序,给端口个低电平就好了,若是低电平亮就给高电平。要是没有原理图,你就看看你的LED是什么驱动的,若是三极管驱动的,一般是给高电平亮
*/ delay(500); /*此处延迟,保证连续两次按键动作处在程序的延时过程中,不进行其他程序从而不会影响小灯。*/ } }}void delay(uint z) //延时函数{ uint x, y; for(x=85; x>0; x--)
程序到处都是错误:code unsigned char led_code[8]={0xe7,0xdb,0xbd,0x7e,0x66,0x6d,0x7d,0x07}, 后面是分号不是逗号 led_code2[8]={0x1,0x3,0x7,0xf,0x1f,0x3f,0x7f,0xff};这个前面都没有定义类型
开机后用不着延时,而是你延时的时间过长了,需要耐心等待几分钟后才进入主循环程序,按键才起作用。或者把延时改成delay(5);就行,其实,真的没有必要延时,属于画蛇添足。下面是仿真结果,按键后P1口的8个灯全亮和全灭
程序错误:1,实际开关在P1^1,程序定义却是P0^3。2, while(1);后边不应该有分号,这样的话,程序就在此死循环了,不往下执行了。3,电路测试已经正常,是已经焊接实物电路了吗,那个D?是发光二极管吗,图中却是普通
51单片机 使用开关控制LED灯亮灭 看看程序有什么问题,为什么按下开关灯没有反应。电路测试已经正常。
你首先要确定你的电路。选择什么单片机和数码管,8个按键最简单8个IO口控制。一般简单的是用三极管驱动数码管。如果你会C语言的话,很容易上手。自己先从控制1个数码管学,在控制2个数码管(2个数码管基本上可以完成上面
1、创建项目文件。2、按键:S1=P3^2,点亮: led=P1^5。3、创建C语言主函数。4、创建循环效果,检测效果。while(1) {}。5、选择输出的效果。6、当按下一个按键时,关闭灯,整个程序运行,再按一次,程序停止。
1、首先打开编程软件Keil uVision4,新建一个工程文件,在菜单栏中Project—— New uVision Project..。2、然后选择单片机型号是 Atmel 公司的 AT89c52,单击OK。3、再单击工具栏上新建按钮,新建一个文档,然后再点击保存,
电平状态输出相应的信号来控制LED的亮灭。将按键与某个IO口相连。当按下按钮时,IO口会被拉低(变为低电平),未按下按钮时为高电平。在程序中通过循环检测IO口的状态,检测到低电平表示按钮被按下,可以执行相应操作。
if(!KEY1) //检测到按键按下 { LED = ~LED; /*LED取反,此时LED = 0,灯亮。当松手时,KEY1 = 1,不满足if语句不 进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入
51单片机的按键控制小灯亮灭的问题(程序类型:c语言)怎么解决?
void main(void){ InitTimer0();while(1)if(time==20) //中断20次,1s { time=0;LED=!LED; P1.0上的LED1s亮灭一次 } } void Timer0Interrupt(void) interrupt 1 { TH0 = 0x3c;TL0 = 0xb0;time++;}
9,10条指令,然后回来执行第5条指令,第5条指令就是让程序回到第1条开始执行,如此周而复始,灯就在持续地亮、灭了。在标号DELAY标志的这一行到RET这一行中的所有程序,这是一段延时程序,大概延时零点几秒,至于具体的
在每次循环中,通过给P1端口赋值来控制LED灯的亮灭状态。例如,给P1端口赋值为0x01,那么第一个LED灯就会亮起,其他LED灯则熄灭。然后使用delay函数来延迟一段时间,以便观察到LED灯的亮灭变化。接着再给P1端口赋值为0x02
1、创建项目,如图所示。2、创建延迟函数。3、创建C语言主函数。设计unsigned char k=0;变量。4、添加循环效果。5、点亮灯,通过k++,改变效果。6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。
设置芯片的时钟和计数器,以便实现时间控制。例如,可以使用定时器或延时函数来控制时间。在主函数中编写程序,实现LED点亮和灭的时间控制。可以使用if语句或while语句来判断时间是否达到要求,然后控制LED灯的点亮和灭。在main函
求控制led灯亮灭的例程和详解
题意没说的太清楚,随便写一个吧。#includesbit led=P1^0;main(){unsigned char dat;TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;SCON=0x50;while(1) { if(RI) { RI=0; dat=SBUF; if(dat==0x5a)led=0; if(dat==0xa5)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口--回到开始
你的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: } } }}
void main() { L1=0; if(K1==0) //1 按键按下后 { Delay10ms(); //2 延时去抖动 if(K1==0) //3 确认按下 { L1=0; //4 以下4句闪烁一次 Delay(1000); L1=1; Delay(1000); } while(1) //5 这里死循环,不能再执行上面的语句了。 { while(!K1) //6 判断按键是否按下,如果按下,则延时10ms,再判断是否按下,一致循环,知道你松开手。 { Delay10ms(); } while(!K1); //7 按键按下话,一致死等,直到你松开手 { //8 下面闪烁一次。 L1=0; Delay(1000); L1=1; // 9 Delay(1000); } } } } 你的程序来看,工作流程是这样的,开机后,按下按键不放,只闪烁一次。如果你放开你的手,释放按键,则LED一致闪烁。 你说再按一下为什么不熄灭,因为 标示9句那里置1了,你的硬件应该是L1置1亮吧? 因为L1=1,是你灯闪烁的最后一个状态,而后又会从5再次执行,如果你按下了按键,程序停在了6那里死循环, 则后面7,8都不会执行了。灯则保留了上一个循环最后的状态,也就是9的状态,所以就一致亮了。 你如果又松开按键,灯又会闪烁,你再按下按键,灯又一直亮了。如此循环。 你的程序的就是一个字概括,乱,你的思路很混乱,条理不清晰,建议先在纸上写下流程,再来写代码。想清楚了再下手。 你会学的很快的。 你的main函数有个性,呵呵,没有人会这么写main函数的,去看看单片机C语言的书吧!
#include 包含单片机专用头文件 #include 这个是什么俺也不知道,但这个程序不需要这个头文件 void Delay10ms(unsigned int c); 自定义的延时函数声明 main() 主函数 { unsigned int LED; 建立一个数值型变量,变量名 LED LED=0xfe; 给这个变量赋值,0xfe 换成二进制数为 1111 1110 while(1) 主循环 { P2=LED; 点亮发光管,即先点亮右边的第一个 Delay10ms(50); 延时一段时间 LED=LED<<1; 点亮的发光管,向左移动一位 if (P2==0x00) 判断是否8个全部点亮了 { LED=0xff; 如果全部点亮,则将全部发光管熄灭 } } } void Delay10ms(unsigned int c)延时函数主程序 { unsigned char a, b;建立两个变量 a b for(;c>0;c--)循环语句,不断改变变量数值,已达到延时目的 { for(b=38;b>0;b--) { for(a=130;a>0;a--); } } } 给你翻译了,希望能帮到你
一、利用定时器实现: /*****************************预处理命令*****************************/ #include #define OUT P0 //晶振:12MHZ /********************重新定义数据类型*******************************/ typedef unsigned char unit8; typedef unsigned short unit_16; /* 函数名:main() 函数功能: 主函数 输入:无 输出:无 */ void main() { TMOD = 0x01; TR0 = 1; ET0 = 1; EA = 1; while(1); } /* 函数名:Timer0_Rountine() interrupt 1 函数功能:内部中断T0 服务函数 输入: 无 输出:无 */ void Timer0_Rountine() interrupt 1 { static unit_16 Count=0; static unit8 Count_Sign=0; static bit Sign=0; TH0 = 0xfc; TL0 = 0x18; Count++; if(!Sign) OUT = 0xaa; //奇数 (1秒) if(Count>=1000) { Sign=1; Count=0; if(Count_Sign<3) //2秒 OUT = 0xaa; //奇数 else if(Count_Sign>=3&&Count_Sign<=10) //8秒 OUT = 0x55; //偶数 else if(Count_Sign>10&&Count_Sign<=22) //12秒 OUT = 0x00; //全部 else if(Count_Sign>22)Count_Sign=Sign=0; Count_Sign++; } } 二、利用软件延时实现: #include #define OUT P0 typedef unsigned char unit8; typedef unsigned int unit16; /* 函数名:delay_ms(unit16 x) 函数功能: 延时函数1MS 输入:x 输出:无 */ void delay_ms(unit16 x) { unit8 a,b; while(x--) { for(b=142;b>0;b--) for(a=2;a>0;a--); } } /* 函数名:main() 函数功能: 主函数 输入:无 输出:无 */ void main() { while(1) { OUT = 0xaa; //奇数 delay_ms(3000); //3秒 OUT = 0x55; //偶数 delay_ms(8000); //8秒 OUT = 0x00; //全部 delay_ms(12000);//12秒 } }