\\ P1.0为低电平时, LED为灭 } 3 其实电路图 可以更简化和使用些 如下是常用的LED接法 P1.0= 0 LED 亮 P1.0=1 LED 灭 呵呵 别忘给俺加分哦 (没有分 就选满意回答吧)

因为51单片机IO口的灌电流能力比较强,而拉电流能力比较弱(即IO口的低平驱动能力较强而高电平驱动能力较差),所以最好不要用IO高电平进行驱动。你的图就是用低电平驱动的。当IO输出高电平是即0xff的时候,所有LED都熄灭

LED_D1 =1;//=1亮灯 ,=0灭灯当也要看电路,完善的电路还会有驱动电路如三极管点了,也要看LED固定的那端是接地还是接VCC。最终无非就是通过单片机的IO口输出一个0或1来是LED二极管电路正向导通形成发光。

你的LED,必然是共阳极。所以P1.0对应的灯亮。(如果是共阴极,那么P1.7~P1.1共7个LED亮,P1.0上的LED不亮)

郭天祥51单片机点亮LED灯,程序0亮还是1亮?

void timer0() interrupt 1 { uchar t;//定义变量 TF0=0;//定时器清0 t++; //中断一次累加1 if(t==20) //预置值,溢出20次就是1秒钟,晶振12MHZ { t=0;P3=~P3; //反转LED灯的亮灭 } } /***/

void main(){ int i, j;a = 0xfe;while(1) { a = _crol_(a, 1);P1 = a; //单个LED灯,接在P1的任意引脚 for(j = 100; j > 0; j--)for(i = 1000; i > 0; i--);} }

C语言实现LED灯闪烁控制配套51单片机开发板。include //包含单片机寄存器的头文件 /***函数功能:延时一段时间 / void delay(void) //两个void意思分别为无需返回值,没有参数传递。{ unsigned int i; //定义

led=1;//点亮 delay(100);//延时100MS led=0;//熄灭 } else led=0;} void delay(unsigned int i){自己根据单片机频率写个1MS带形参的演示程序} 这个程序是现写的。。应该能执行,有些细节没有写,自己修改下,

同时开放了定时器中断,并将定时器中断优先级设置为1(即高优先级)。在无限循环中,不断检测K1和K2按键状态,以改变全局变量“freq”并控制LED灯的闪烁频率;然后使用一个计时器中断服务程序来控制LED灯的闪烁,具体实现方式

1、新建项目,如图所示。2、添加头文件,创建延迟函数。3、创建C主函数。4、添加死循环效果。5、点亮LED灯。P1=0x7e;二进制11111110。6、添加延迟效果。注意事项:很多公司都有51系列的兼容机型推出,今后很长的一段时间内

说明:单片机控制LED灯间隔时间闪烁 所用程序很简单,实际情况可作相应变化,也有多种方式实现。proteus电路图 所需元件清单:(分别是) 51单片机 电容 瓷片电容(也可用普通电容) 晶振 红色二极管 电阻 (tip:没有给高电

51单片机C程序实验LED灯:[1]单个灯闪烁

你要用51产生PWM去控制LED,首先你要确定PWM的周期T和占空比D,确定了这些以后,你可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间需要多少个时间

val=analogRead(potpin);// 读取传感器的模拟值并赋值给val Serial.println(val);//显示val 变量 analogWrite(ledpin,val/4);// 打开LED 并设置亮度(PWM 输___出最大值255)delay(10);//延时0.01 秒 } 原理图:

写论文的时候直接粘贴就行,单片机实验PWM更简单,只要你学过嵌入式应该就会的,拿51单片机来说就是I/O端口作为PWM输出,注意下单片机的总输入/输出电流不要超过设计范围就行,

用T0定时器控制PWM的占空比,T1定时器控制脉宽(最大:65536微妙)。T0、T1定时器设置成:16位定时器。程序清单:(12MHz)PwmData0 ;T0定时t1所需的定时初值(字)PwmData1 ;T1定时T所需的定时初值(字);setb

如何用51单片机产生pwm 并利用pwm控制led灯的功率?

case 1: Led1 = 0; Led2 = 1; break;case 2: Led1 = 0; Led2 = 0; break;case 3: Led1 = 1; Led2 = 1; break;default : break;} 就可以了,,,顺序的话 可以按照具体要求更换下位置就可以了。

可以实现 这个有个高大上的名字:呼吸灯 可以自动慢慢亮然后慢慢灭,也可以增加按键控制亮灭的程度 原理是用PWM实现不同电压的输出来实现灯的变亮和变暗,下面是网上截的图,比较容易理解,具体程序的话,就自己动手吧

;P1.0 P1.1接2LED,P2.0接一按键。上电2LED不亮,按第1 次键2LED同时以1S周期闪烁,按第2 次 2LED轮流1S闪烁同此循环。;11 04 17 ORG 00H AJMP MAIN ORG 0BH AJMP T0INT ORG 30H MAIN:MOV TMOD,#

89c51单片机两个以上数码管同时工作,一般采用扫描显示方式,如果加上按键(矩阵扫描按键)就是如下面的仿真图,可以作为参考,有参考代码如下。include define uchar unsigned char uchar temp;int key1,key,disbuf

1、新建项目,如图所示。2、添加头文件,创建延迟函数。3、创建C主函数。4、添加死循环效果。5、点亮LED灯。P1=0x7e;二进制11111110。6、添加延迟效果即可。注意事项:Proteus 自从有了单片机也就有了开发系统,随着单片机

R6,D2 DJNZ R5,D1 RET (2).输出控制 如图所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以

51单片机控制两个发光二极管的电路图 和程序

#include sfr CCON = 0xD8; sfr CMOD = 0xD9; sfr CL = 0xE9; sfr CH = 0xF9; sfr CCAP0L = 0xEA; sfr CCAP0H = 0xFA; sfr CCAPM0 = 0xDA; sfr CCAPM1 = 0xDB; #define uint unsigned int #define uchar unsigned char uchar whith_p=50; uchar max_p=255; uchar min_p=1; uint fre = 0xffff; sbit CR = 0xDE; sbit led = P2^0; void timer0_int (void) interrupt 1 using 1 { TH0 = fre >> 8; TL0 = fre & 0xff; led = ~led; } void timer0_init(void) { TMOD &= 0xf0; TMOD |= 0x1; TH0 = 0xff; TL0 = 0xff; TR0 = 1; ET0 = 1; } void pwm_init(void) { CMOD = 0x4; CL = 0x0; CH = 0x0; CCAP0H = whith_p; CCAPM0 = 0x42; CR = 1; } void soft_delay(uint _1ms) { unsigned int tmp; while(_1ms--!=0) { for(tmp=0;tmp<144;tmp++); } } void pwm_out(void) { whith_p=50; while(whith_p<max_p) { CCAP0H =whith_p; soft_delay(10); whith_p=whith_p+5; CCAP0H = whith_p; soft_delay(10); } whith_p=max_p; while(min_p<whith_p) { CCAP0H = whith_p; soft_delay(10); whith_p=whith_p-5; CCAP0H = whith_p; soft_delay(10); } } void main (void) { pwm_init(); timer0_init(); EA = 1; while(1){ pwm_out(); } } STC单片机具有PWM输出功能,最近玩12864LCD万年历时,用的是杜洋的FT4时钟电路,用他提供的H文件控制时,具有调光功能,由于只是玩一玩,没有购买源码,而网上流行的程序都没有此功能,无奈,只能自己弄,好在杜老师及人所及早在网站中备下了资料,简单攒一下,居然成功了,并成功的汇入了万年历的程序中,现在将其改成完整的控制程序公开于此供参考。 /************************************************* STC单片机单/双键控制LED亮度PWM调光程序 原创WanNengGong 2010/09/20 参考程序: 杜洋工作室PWM功能程序模块 *************************************************/ #include //头文件 #define uchar unsigned char #define uint unsigned int uchar vx=5; //vx=5在用于12864LCD的LED背光调整时上电为半亮度状态,可根据自己的用途及要求任意设定 sbit KEY_H=P2^4; sbit KEY_L=P2^5; /*******************************************************************************/ void PWM_init (void){//PWM初始化函数 CMOD=0x02; //设置PCA定时器 CL=0x00; CH=0x00; CCAPM1=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010) CCAP1L=0x00; //设置PWM0初始值与CCAP0H相同 CCAP1H=0x00; // PWM0初始时为0 CR=1; //启动PCA定时器 } /******************************************************************************/ void PWM0_set (uchar a){//PWM0占空比设置函数 CCAP1L=a; //设置值直接写入CCAP1L CCAP1H=a; //设置值直接写入CCAP1H } /*****************************************************************************/ void DelayM(unsigned int a){//延时函数 1mS/次(用于1T单片机) unsigned char n,i,j; while(--a!=0){ for(n=1;n>0;n--) for(j=222;j>0;j--) for(i=12;i>0;i--); } } /****************************************************************************/ void main(void) { KEY_H = 1;KEY_L = 1; PWM_init (); while(1) { PWM0_set(vx*24); //数字24是配合vx调试取得的,此时vx的赋值范围约为1-10对应最暗-最亮 //--------减调整---------// if (KEY_L == 0 ){ DelayM(20); //延时20毫秒消抖动 if(KEY_L == 0){ //如果20SM后KEY_L还是0状态则确认下调键是按下的 vx--; if(vx<1){vx=5;} //如果设定vx=10,将语句改为if(vx<1){vx=10;}则为单按键循环控制,则可去除加调整控制部分 } while(KEY_L == 0);//等待键松开 } //--------加调整---------// if (KEY_H == 0 ){ DelayM(20); if(KEY_H == 0){ vx++; if(vx>10){vx=5;} } while(KEY_H == 0); } } } 程序自己理解消化了,就可以编出你自己的程序了,你说的,完全可以实现,而且比这俩个例子简单N多。 这是百度里面别人的回答,感觉可以解决您单片机产生PWM的问题了,至于后面如何控制功率,那你就要搞清功率的单位是什么,除了w,还有什么,在时间一定的情况下,如何改变功率,只需要改变其PWM的占空比。如果一个周期里面,它有50%是高电平,那么它是正常输入的50%的功率,如果只有20%呢,10%呢?这不就在改变其功率么?
电流800mA,那要用大功率三极管了。单片机控制时,应采用二个三极复合的形式,即单片机控制一个小功率,再用小功率管推动大功率管。
给你分享一份资料密码:ze4e51单片机的特殊功能寄存器有好些,每一个都表示内存中相应的地址,起着不同的作用,P0123四组寄存器分别留有外接的IO口供使用,P0口表示从0X80开始的一个字节,8个位,你对其赋值0xfh,0xfh是16进制数,用二进制表示是11111101,则P0口从P07--P00,分别为11111101,而1和0分别表示高电平和低电平,51单片机的高低电平分别为5V和0V,所以P07--P00,分别输出高高高高高高低高,LED一般是灌电流方式驱动,正极接高电平,负极接IO口,所以,IO口输出低时LED点亮,输出高时LED熄灭,PO口连接的LED只有P01连接led亮!
你的led灯到底是连在哪个口的,P0还是P1?如果一直亮一个的话,看你程序应该是连在P0上的,所以你把while里边最后那句改成P0=temp;应该就可以了。