不行。这类IC都是有专门的调光引脚:如低压恒流的PT4115:高压隔离恒流的PT4209:高压非隔离的PT4207:PWM调光,就是通过给予的PWM信号的脉冲宽度,积分到不同的电压值,改变IC内部的驱动输出脉冲的占空比,进而改变LED的平均

可以,单片机PWM是能直接控制一个恒流电源驱动的LED的。PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。由于当今科学技术的发展已经没有了学科之间的界限,结合

从原理讲,PWM是没问题的,比如占比高,工作正常,不能说电路有什么问题,就如同一个水龙头,开到一定程度,管路就共振,其它水龙头就没事,这不是具体哪个水管和水龙头的问题。具体到你的问题,PWM本身就有先天缺陷,寄生

也就是说从一个周期整体看来,LED的平均电压只有5*0.1+0*0.9=0.5V。PWM信号频率很高的,我们无法通过肉眼来观察到每一个周期LED灯亮灭的变化过程,所以只好通过平均电压这样一种方式来决定这个LED的亮的程度了。关于开

可以分10个段,也就是10秒,PWM值从100到0每次减10,这样就可以实现这个效果了。

pwm控制led灯亮度原理:旋转电阻就是可调电阻,单片机不能直接得到电阻量。所以得将电阻的变化转换为模拟信号或数字信号,可搭建一个简单的分压电路。单片机转换成数字量,通过程序判断后,调节PWM参数,进使LED亮度变化。PWM是

pwm能不能控制led闪灯

void pwm()m1,m4为电机的使能端,为1时电机工作,为0时电机不工作,通过电机导通和不导通的时间的控制就能产生pwm信号,在这 里只要调节speed的变化就可以调节pwm信号的占空比了。{ m1=1;m4=1;delayms(speed);m1=0;m

使用单片机来控制直流电机的变速,一般采用调节电枢电压的方式,通过单片机控制PWM1,PWM2,产生可变的脉冲,这样电机上的电压也为宽度可变的脉冲电压。根据公式 U=aVCC 其中:U为电枢电压;a为脉冲的占空比(0

unsigned char / TH0和TL0是计数器0的高8位和低8位计数器,计算办法:TL0=(65536-C)%256;TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器 工作模式选择,0X01表示选用模式1,它有16

PWM EQU 7FH ;PWM赋初始值 OUT EQU P0 ;8个LED灯的接口 INCKEY EQU P1.4 ;K1,PWM值增加键。DECKEY EQU P1.5 ;K2,PWM值减小键。BEEP EQU P3.7 ;--- ORG 0000H SJMP

基于单片机的直流电机PWM调速控制(要单片机的代码)快啊

else led=1;//关灯 f(t>80)t=0;//t置零,要改呼吸频率就改掉“80”这个数还有下面的一个“80”也一起改 } } void Timer0Interrupt(void) interrupt 1 //T0中断,用来控制PWM电平,每50微秒,t自加一次 {

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

//模拟PWM输出控制灯的10个亮度级别 void main(void) // 主程序 { uint n;RCAP2H =0xF3; //赋T2的预置值,溢出1次是1/1200秒钟 RCAP2L =0x98;TR2=1; //启动定时器 ET2=1; //打开定时器2中断 EA=1; //

Clr tr0 Mov TH0,High(PwmData1)Mov TL0,Low(PwmData1)Setb tr0 Clr PwmF reti 说明:在主程序中计算PwmData0、PwmData1的值。 可变脉宽PWM输出 用T0定时器控制PWM的占空比,T1定时器控制脉宽(最大:65536微妙)

int ledpin=11;//定义数字接口11(PWM 输出)int val=0;// 暂存来自传感器的变量数值 void setup(){ pinMode(ledpin,OUTPUT);//定义数字接口11 为输出 Serial.begin(9600);//设置波特率为9600 //注意:模拟接口自动

void PWM1_set (uchar a){//PWM1占空比设置函数 CCAP1L=a; //设置值直接写入CCAP1L CCAP1H=a; //设置值直接写入CCAP1H } void DelayM(unsigned int a){//延时函数 1mS/次(用于1T单片机)unsigned char n,i,j

define uint unsigned int define uchar unsigned char uchar count ,z;sbit key_1 = P3^7;sbit key_2 = P3^6;sbit PWM = P2^0;void key_control();void init ();void create_PWM(uchar);void delay(uint);v

急求用51单片机(stc89c52)利用pwm控制led灯光亮度变化的c程序,电路图如下:

PWM 控制 LED 灯渐亮渐灭程序 / ; PWM 控制 LED 灯渐亮渐灭程序 ; 利用定时器控制产生占空比可变的 PWM 波 ; 按K1,PWM值增加,则占空比减小,LED 灯渐暗。; 按K2,PWM值减小,则占空比增加,LED 灯渐亮。;当PWM

首先,要做一个软件三角波发生器子程序,频率自己定,就是变亮变暗的周期。此函数的返回值作为pwm的输入值。再做一个pwm的模拟程序,占空比(0-100)是三角波发生器的输出,pwm模拟程序控制某个端口输出1和0的占空比来控

可以分10个段,也就是10秒,PWM值从100到0每次减10,这样就可以实现这个效果了。

PWM EQU 7FH WM赋初始值- K; H, S9 t! G;OUT EQU P0 ;8个LED灯的接口, {; ~, G! M* f; @% m2 q7 x ! O2 y; \$ {. P4 p6 {( d9 z INCKEY EQU P3.4 ;K1,PWM值

用PWM控制LED的由灭渐亮的程序?

。 P0 |= (1 << LEDx); PWM正占空 else if(x > Count) PORTA &= ~(1 << LEDx); //51怎么改?。 P0 &= ~(1 << LEDx); PWM负占空 }void main( void ){ unsigned char delay = 0;

我刚学单片机,对PWM是什么都还不是很明白,这个是上次学习的程序,不知道是不是你要的! ;用51的P1口控制8个LED,1 点亮,0 熄灭。 第1个亮1/8,第2个亮2/8,第3个亮3/8,第4个亮4/8,;第5个亮5/8

第三,每进入中断一次count++,满足条件count==PWM_ON或count==CYCLE时改变LED的当前状态。作用是给小灯亮或灭的时间不同。第四,LED的亮度与其通电时间有关,也可以说成是占空比。上面的条件要理解成是呈线性增加或减小的

再做一个pwm的模拟程序,占空比(0-100)是三角波发生器的输出,pwm模拟程序控制某个端口输出1和0的占空比来控制灯 的明暗。pwm的思路是:检查设置值是否不等于0,是则端口置1,程序开始加1计数,计数后检查计数值是否等于

51单片机pwm调光电路参考源程序:int potpin=0;//定义模拟接口0 int ledpin=11;//定义数字接口11(PWM 输出)int val=0;// 暂存来自传感器的变量数值 void setup(){ pinMode(ledpin,OUTPUT);//定义数字接口11 为输

51单片机输出pwm波控制led灯亮度 频率50HZ,周期是20ms 看你调节的精度 如定时器定时1ms,高电平宽度一次变化是5% 如果想要调节精度高,定时器定时时间小,就要频繁地发生中断,会影响主程序的运行 如 要求占空比每步调

请教51单片机利用PWM控制灯的亮度的程序

#include typedef unsigned char int8; typedef unsigned int int16; sbit led=P1^0;//P1^0口控制LED灯 int16 t,a;int8 b; //电平宽度变化控制变量,控制电平宽度,b=0变长,b=1变短 void InitTimer(void)//定时器初始化 { TMOD = 0x11; EA = 1; //总中断:开 TH0 = 0xff; //T1计时器计数器初始化 TL0 = 0xce; TH1 = 0xb1; //T1计时器计数器初始化 TL1 = 0xe0; ET0 = 1; //T0中断:开 ET1 = 1; //T1中断:开 TR0 = 1; //T0计时:启动 TR1 = 1; //T1计时:启动 } void main() { t=0; a=0; b=0;//使用变量前的初始化 InitTimer(); while(1) { if(t<a)//t<a时打开LED灯 led=0; else led=1;//关灯 f(t>80)t=0;//t置零,要改呼吸频率就改掉“80”这个数还有下面的一个“80”也一起改 } } void Timer0Interrupt(void) interrupt 1 //T0中断,用来控制PWM电平,每50微秒,t自加一次 { TH0 = 0xff; TL0 = 0xce; t++; } void Timer1Interrupt(void) interrupt 3//T1中断,控制PWM电平宽度,使电平宽度由短变长,又由长变短循环,造成呼吸效果 { TH1 = 0xb1; TL1 = 0xe0; //每20毫秒增加1个单位的呼吸长度 if(b==0) { a++; if(a==80) //改掉可以改呼吸频率 b=1; } else { a--; if(a==0)b=0; } }
PWM 控制 LED 灯渐亮渐灭程序 /******************************************************************************** ; PWM 控制 LED 灯渐亮渐灭程序 * ; 利用定时器控制产生占空比可变的 PWM 波 * ; 按K1,PWM值增加,则占空比减小,LED 灯渐暗。 * ; 按K2,PWM值减小,则占空比增加,LED 灯渐亮。 * ;当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警 * ;资源:p0口,8路指示灯。p1.4,p1.5亮度控制按键(端口按键)p3.7小喇叭报警 * ;********************************************************************************/ #include #include sbit K1 =P1^4 ; //PWM值增加键 sbit K2 =P1^5 ; //PWM值减少键 sbit BEEP =P3^7 ; //蜂鸣器 unsigned char PWM=0x7f ; //赋初值 void Beep(); void delayms(unsigned char ms); void delay(unsigned char t); /*********************************************************/ void main() { P1=0xff; TMOD=0x21 ; TH0=0xfc ; //1ms延时常数 TL0=0x66 ; //频率调节 TH1=PWM ; //脉宽调节 TL1=0 ; EA=1; ET0=1; ET1=1; TR0=1 ; while(1) { do{ if(PWM!=0xff) {PWM++ ;delayms(10);} else Beep() ; } while(K1==0); do{ if(PWM!=0x02) {PWM-- ;delayms(10);} else Beep() ; } while(K2==0); } } /*********************************************************/ // 定时器0中断服务程序 (频率) /*********************************************************/ void timer0() interrupt 1 { TR1=0 ; TH0=0xfc ; TL0=0x66 ; TH1=PWM ; TR1=1 ; P0=0x00 ; //启动输出 } /*********************************************************/ // 定时器1中断服务程序 (脉宽) /*********************************************************/ void timer1() interrupt 3 { TR1=0 ; P0=0xff ; //结束输出 } /*********************************************************/ //蜂鸣器子程序 /*********************************************************/ void Beep() { unsigned char i ; for (i=0 ;i<100 ;i++) { delay(100) ; BEEP=!BEEP ; //Beep取反 } BEEP=1 ; //关闭蜂鸣器 delayms(100); } /*********************************************************/ // 延时子程序 /*********************************************************/ void delay(unsigned char t) { while(t--) ; } /*********************************************************/ // 延时子程序 /*********************************************************/ void delayms(unsigned char ms) { unsigned char i ; while(ms--) { for(i = 0 ; i < 120 ; i++) ; } } /*********************************************************/
要看你的驱动电压够不够。具体要看参数。最好有个驱动电路,不要直接控制。关于LED的一些事可以关注“射影无忌”公众号,里面有比较全的LED知识。
你的程序功能就是一直闪呀。 计时器0中断20次后输出反相,后每中断128次输出反相。就一直亮熄了。 计时器1中断作用不大。
加三极管,TEMPAL接在单片机的IO上,就可以了
首先89C52内部没有硬件PWM发生器,只能通过定时器模拟!你可以通过两个定时器,T0控制周期,T1控制占空比。 例如:实现周期为1000us,占空比为20%的PWM,用P1.0实现 首先你设置T0为65536-1000 (12M晶振) T1为65536-200 首先初始化P1.0=1,两个定时器同时打开,在定时器T1中断时拉低P1.0,在定时器T0中断时在拉高P1.0,同时将两定时器初始值初始化T0为65536-1000 ,T1为65536-200 希望对你有用,呵呵!!!
用89C51编的程,步进电机调速,看你能不能用到 ORG 0000H LJMP MAIN ORG 001BH LJMP LOOP ORG 0100H MAIN: MOV R0,#08H MOV P0,#0FFH MOV TMOD,#10H JB P1.6,SK7 MOV DPTR,#FORWARD SJMP SUDU SK7: JNB P1.7,SK6 SJMP MAIN SK6: MOV DPTR,#REVERSE SUDU:JNB P1.0,L0 JNB P1.1,L1 JNB P1.2,L2 JNB P1.3,L3 JNB P1.4,L4 JNB P1.5,L5 SJMP MAIN L0: MOV TL1,#00H MOV TH1,#00H SJMP LOOP1 L1: MOV TL1,#22H MOV TH1,#22H SJMP LOOP1 L2: MOV TL1,#44H MOV TH1,#44H SJMP LOOP1 L3: MOV TL1,#66H MOV TH1,#66H SJMP LOOP1 L4: MOV TL1,#88H MOV TH1,#88H SJMP LOOP1 L5: MOV TL1,#0AAH MOV TH1,#0AAH LOOP1: MOV IE,#88H SETB TR1 SJMP $ FORWARD: DB 0EH,0CH,0DH,09H,0BH,03H,07H,06H REVERSE: DB 06H,07H,03H,0BH,09H,0DH,0CH,0EH LOOP:JNB P1.0,L01 JNB P1.1,L11 JNB P1.2,L21 JNB P1.3,L31 JNB P1.4,L41 JNB P1.5,L51 SJMP LOOP L01: MOV TL1,#00H MOV TH1,#00H SJMP LOOP2 L11: MOV TL1,#22H MOV TH1,#22H SJMP LOOP2 L21: MOV TL1,#44H MOV TH1,#44H SJMP LOOP2 L31: MOV TL1,#66H MOV TH1,#66H SJMP LOOP2 L41: MOV TL1,#88H MOV TH1,#88H SJMP LOOP2 L51: MOV TL1,#09FH MOV TH1,#09FH LOOP2:MOV A,#00H MOVC A,@A+DPTR MOV P0,A INC DPTR DJNZ R0,LOOP3 MOV R0,#08H JB P1.6,SK72 MOV DPTR,#FORWARD SJMP LOOP3 SK72: JNB P1.7,SK62 SJMP LOOP SK62: MOV DPTR,#REVERSE LOOP3: RETI END
//4级速度可调:0、1、2、3; 对应占空比:0、1/4、2/4、3/4 #include sbit key=P3^6; sbit motor=P2^4; unsigned char key_scan(void); void motor_set(unsigned char v) ; void motor_init(void); unsigned char PWM_H=0,n=0,i=0; void main() { motor_init(); while(1) { if (key_scan() == 1) { motor_set(i%4); } } } //电机转动 void motor_run() interrupt 3 { if(n<PWM_H) motor=1; else motor=0; n++; if(n>=4) n=0; } //速度控制,4级速度可调:0、1、2、3; 对应占空比:0、1/4、2/4、3/4 void motor_set(unsigned char v) { if (v>3) v=3; if (v == 0) TR1 = 0; else { TR1 = 1; PWM_H = v; } } //电机初始化 void motor_init(void) { EA=1; ET1=1; TMOD=TMOD & 0X0F | 0x20; } //扫描按键 unsigned char key_scan(void) { unsigned char on = 0,i; while(1) { if(key==0) //判断是否按下 { for(i=0;i<100;i++); //软件延时 if(key==0) //再次判断是否按下 { on = 1; break; //跳出循环 } } } while(key==0); return 1; }
首先要确定PWM的周期T和占空比D,确定了这些以后,可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间需要多少个时间基准n‘。   那么就可以编写程序,根据定的时间基准t给定时器赋值初始化,然后开启定时器,定义一个标志位flag,根据flag的状态决定输出高平还是低电平,假设定义flag=1的时候输出高电平,用一个变量去记录定时器中断的次数,每次中断就让记录中断次数的变量+1,在中断程序里面判断这个变量的值是否到了 n,如果到了说明高电平的时间够了,那么就改变flag为0,输出低电平,同时记录中断变量的值清零,每次中断的时候依旧+1,根据flag=0的情况跳去判断记录变量的值是否到了n’ 如果到了,说明PWM的低电平时间够了,那么就改flag=1,输出改高电平,同时记录次数变量清零,重新开始,如此循环便可得到想要的PWM波形。
其实通俗一点去理解是这样子的,你可以理解为:PWM的占空比越大,那么释放的能量越高,反之释放的能量越低,这样就会使得LED的亮度变亮或者变暗,PWM的占空比是可以持续调节的,0-100%连续调节,这样LED就会逐渐变亮或者变暗,通过控制PWM占空比调节的时间间隔就可以实现呼吸灯的效果!时间间隔越大LED的变化就慢,反之就快!