
#include<reg51.h>
unsigned char pwhh,pwhl,pwlh,pwll
bit flag
sbit pwm=P1^0
void t0isr() interrupt 1
{
if(flag)
{
TH0=pwhh
TL0=pwhl
}
else
{
TH0=pwlh
TL0=pwll
}
pwm=~pwm
}
main()
{
TMOD=0x01
pwhh=(65536-1000)/256
pwhl=(65536-1000)%256
pwlh=(65536-500)/256
pwll=(65536-500)%256
TH0=pwhh
L0=pwhl
TR0=1
ET0=1
EA=1
while(1)
}
有二种情况,第一,如果你所使用的8051单片机(例如stc12系列)是带有专用的pwm输出i/o口的话,那就只要控制里面的特殊功能寄存器改变输出占空比就行了,不要外加什么硬件电路的。第二,如果是通入软件模拟pwm输出的话,那就用定时器可以解决的,也不需要外加电路。15-PWM调光#include<reg52.h>//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
void Delay(unsigned int t)
{
while(--t)
}
void main ( )
{
unsigned int CYCLE=600,PWM_LOW=0//定义周期并赋值
while (1) //主循环
{
P2=0X00
Delay(60000) //特意加延时,可以看到熄灭的过程
for(PWM_LOW=1PWM_LOW<CYCLEPWM_LOW++)
{
P2=0XFF //点亮LED
Delay(PWM_LOW)//延时长度,600次循环中从1加至599
P2=0X00 //熄灭LED
Delay(CYCLE-PWM_LOW)//延时长度,600次循环中从599减至1
}
P2=0XFF
for(PWM_LOW=CYCLE-1PWM_LOW>0PWM_LOW--)
{ //与逐渐变亮相反的过程
P2=0XFF
Delay(PWM_LOW)
P2=0X00
Delay(CYCLE-PWM_LOW)
}
}
}
自己修改 可以改变占空比
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)