求51单片机PWM程序(一个定时器产生三路PWM 可独立运作) 简单来说就是用三路独立的pwm控制三个LED

求51单片机PWM程序(一个定时器产生三路PWM 可独立运作) 简单来说就是用三路独立的pwm控制三个LED,第1张

怎么可能搞不了三路独立的呢楼下那位是被STC12C5A60S2的硬件蒙蔽了视线,他认为,STC12C只有两路PWM,无法实现3路,你却忘记了最原始的办法,不要说STC12有PWM功能,即使是传统的AT89S52这类没有PWM功能的单片机也一样能够实现楼主的要求

下面我简单的分析一下我的思路,楼主尝试编程,如果不懂,再追问:

你是用三路独立的PWM调光用的,PWM调光,为了保证不让人眼产生闪烁,理论上PWM的频率要大于20Hz,而在实际的测试用,一般PWM要大于25Hz才能保证不闪烁为了保险起见,我们将PWM的频率设定在30Hz左右,那么,周期就是33333333ms,假设,我们实现10级调光,那个 每级的时间是333333ms

然后设置三个变量和一个计数器,我描述不太清楚,你看一下程序:

sbit P1_0 = P1^0; //---P10,P11,P12是三路PWM输出

unsigned char Set_PWM0 = 0; //--Set_PWM0 Set_PWM1 Set_PWM2

//--分别是低电平占整个脉冲的百分比

//--他们最小取0,最大取9

unsigned char counter = 0;//--用于计数的

void ISR_Timer0(void) interrupt 1 //---我们就用定时器0来做,不用PWM硬件

{ //----33333ms中断一次

counter++;

if(counter >= 10) counter = 0;

if(counter >= Set_PWM0) P1_0 = 0; else P1_0 = 1;

if(counter >= Set_PWM1) P1_1 = 0; else P1_1 = 1;

if(counter >= Set_PWM2) P1_2 = 0; else P1_2 = 1;

}

这样,定时器0用于决定PWM的反占空比,你只要设置 Set_PWM0等三个参数就可以了

怎么会实现不了呢

控制 PWM 的程序我这没有,但我这有跟串口接收数据的

利用单片机和电脑的串口助手来控制单片机开发板上面的8个LED

电脑发送不同的数值,即可点亮不同的LED

你可以根据这个程序的原理,来自己试着编写电脑控制PWM

如果有什么疑问可以随时向我提问,或私密我加好友,记得采纳哦!

//

//串口发送的数据格式单个数字,电脑端以字符形式发送

#include <REG52h> //通用89C52头文件

char table[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f},i,n;//LED编码

//

void main(void)//主函数

{

TMOD=0x20;     //定时器1工作方式2,8位,,定时器0工作方式1,16位

PCON=0x00;     //SMOD=0,不加倍

SCON=0x50;     //串口工作方式1,允许接收

IE=0x92; //启用串口中断与定时器0中断,并开启总中断

TH1=0xfd;     //定时器1设置初值,波特率9600bit/s,

TL1=0xff; //晶振频率 110592

TR1=1;       //启动定时器T1

while(1)//主循环

{

     P2=table[i];//输出状态

}

}

//

void ser() interrupt 4//串口接收,中断方式

{

n=SBUF; while(!RI); RI=0;//接收一个字符

switch(n)//根据接收的字符对 i 赋相应的数值值

{

case 0x31:i=1;break; case 0x32:i=2;break;

case 0x33:i=3;break; case 0x34:i=4;break;

case 0x35:i=5;break; case 0x36:i=6;break;

case 0x37:i=7;break; case 0x38:i=8;break;

case 0x39:i=9;break; default:i=0;

}//如果是0,或其他字符,则关闭所有LED

}

//

问得太笼统了,PWM实现的电路有很多,也有很多基于PWM的专用LED调光电路。像一些比较通用的开关电源IC都差不多是基于PWM来实现的,稍作修改就可以用来做LED调光用了。LED调光实际上就是一个可调的恒流源,可以用PWM来实现,也可以用线性电路来实现,但PWM的效率要高。

以上就是关于求51单片机PWM程序(一个定时器产生三路PWM 可独立运作) 简单来说就是用三路独立的pwm控制三个LED全部的内容,包括:求51单片机PWM程序(一个定时器产生三路PWM 可独立运作) 简单来说就是用三路独立的pwm控制三个LED、电脑通过单片机串口发送调光指令使单片机产生PWM信号对LED调光、你好 我想问一下 怎样用PWM实现对多路LED的调光呢没有分了 希望你能帮帮我~谢了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10212183.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存