这一次学习定时器和PWM:
由于我已经在以前写过关于51单片机的定时器和PWM, 所以这里不再赘述, 附上我以前的博客:
https://blog.youkuaiyun.com/Beking17113/article/details/84033588
这里只贴上蓝桥杯的产生PWM波的代码:
//实现LED的亮度变暗
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit BUZZ=P0^6;
sbit RELAY=P0^4;
uchar pwmnum=20; //低电平所占的百分比为 20%
void CloseBUZZ();
void CloseLED();
uint n;
void main()
{
TMOD=0x01;
TH0=0xFF;
TL0=0x9C;
TR0=1;
EA=1;
ET0=1;
CloseBUZZ(); CloseLED();
while (1)
{
if (n==100-pwmnum) //值时间为pwmnm时间
{
P0=0xFE;P2=(P2&0x1f)|0x80; P2&=0x1f;
}
if (n==100)
{
P0=0xFF; P2=(P2&0x1f)|0x80; P2&=0x1f;
n=0;
}
}
}
void CloseBUZZ()
{
BUZZ=0; RELAY=0; P2=(P2&0x1f)|0xa0; P2&=0x1f;
}
void CloseLED()
{
P0=0xFF; P2=(P2&0x1f)|0x80; P2&=0x1f;
}
void time0int() interrupt 1
{
n++; TH0=0xFF; TL0=0x9C;
}
效果为LED的亮度变暗, 其中的变量pwmnum为亮度值, 值越大亮度越大.