单片机输出PWM波
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机输出PWM波
//*******************函数声明,变量定义******************* #include
#include
#define uchar unsigned char
#define uint unsigned int
//端口定义
sfr p0=0x80;
sfr p1=0x90;
sfr p2=0xa0;
sfr p3=0xb0;
//键
sbit add_speed=P1^0;
sbit sub_speed=P1^1;
//PWM控速
uint time_PWM=0; //PWM时间计数
uint high_PWM=0; //PWM高电平时间
uint t_PWM=16; //PWM周期
//*******************延时程序*******************
void delayms(unsigned char ms)
{
unsigned char i ;
while(ms--)
{
for(i = 0 ; i < 120 ; i++) ;
}
}
//*******************键盘扫描程序*******************
void key_change()
{
if(add_speed==0)
{
delayms(10);
if(add_speed==0)
{
if(high_PWM < 16)
{
high_PWM++;
} } }
if(sub_speed==0)
{
delayms(10);
if(sub_speed==0)
{
if(high_PWM > 0)
{
high_PWM--;
} } } }
//*******************中断程序******************* //PWM波生成,T0中断
void PWM_T0(void) interrupt 1
{
TH0=0Xd8;
TL0=0Xf0;
time_PWM++;
if(time_PWM < high_PWM)
{
p2=0xff;
}
if(time_PWM==high_PWM)
{
p2=0x00;
}
else if(time_PWM==t_PWM)
{ p2=0xff;
time_PWM=0;
} }
//*******************主程序******************* void main()
{p0=0xff;
p1=0Xff;
p2=0xff;
p3=0xff;
TH0=0xd8; //定时10us
TL0=0xf0;
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
while(1)
{ key_change();
}}