用C语言写一个AT89S52的PWM控制程序.
硬件要求2个按键1个为增加PWM占空比1个为减少PWM的占空比8051的P1口的0脚输出PWM脉冲希望高手帮我写一份程序谢谢!我用来搞实验....
硬件要求2个按键1个为增加PWM占空比 1个为减少PWM的占空比 8051的P1口的0脚输出PWM脉冲 希望高手帮我写一份程序谢谢! 我用来搞实验.
展开
1个回答
展开全部
#include <reg51.H >
#include < intrins.h >
sbit K1 =P1^4 ; //增加键
sbit K2 =P1^5 ; //减少键
sbit lamp =P3^7 ; //闪烁灯
sbit CLK=P1^0;
unsigned char PWM=0x7f ; //初值
void Lamp(); //灯控制函数
void delayms(unsigned char ms); //延时变数
void delay(unsigned char t); //延时变数
void main()
{
CLK =1;
lamp=0;
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 Lamp() ;
}
while(K1==0); //增加脉宽
do{
if(PWM!=0x01) //判断是否到达下限
{PWM-- ;delayms(10);}
else Lamp() ;
}
while(K2==0); //减少脉宽
}
}
void T0X() interrupt 1 // 定时器0中断服务程序.
{
TR1=0 ;
TH0=0xfc ; //赋初值
TL0=0x66 ;
TH1=PWM ;
TR1=1 ;
CLK=0 ; //启动输出
}
void T1X() interrupt 3 // 定时器1中断服务程序
{
TR1=0 ;
CLK=1 ; //结束输出
}
void Lamp() //闪烁灯子程序
{
unsigned char i ;
for (i=0 ;i<5 ;i++)
{
delayms(100) ;
lamp=!lamp ; //lamp取反
}
lamp=0 ; //关闭闪烁灯
}
void delayms(unsigned char ms) // 延时子程序
{
unsigned char i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
#include < intrins.h >
sbit K1 =P1^4 ; //增加键
sbit K2 =P1^5 ; //减少键
sbit lamp =P3^7 ; //闪烁灯
sbit CLK=P1^0;
unsigned char PWM=0x7f ; //初值
void Lamp(); //灯控制函数
void delayms(unsigned char ms); //延时变数
void delay(unsigned char t); //延时变数
void main()
{
CLK =1;
lamp=0;
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 Lamp() ;
}
while(K1==0); //增加脉宽
do{
if(PWM!=0x01) //判断是否到达下限
{PWM-- ;delayms(10);}
else Lamp() ;
}
while(K2==0); //减少脉宽
}
}
void T0X() interrupt 1 // 定时器0中断服务程序.
{
TR1=0 ;
TH0=0xfc ; //赋初值
TL0=0x66 ;
TH1=PWM ;
TR1=1 ;
CLK=0 ; //启动输出
}
void T1X() interrupt 3 // 定时器1中断服务程序
{
TR1=0 ;
CLK=1 ; //结束输出
}
void Lamp() //闪烁灯子程序
{
unsigned char i ;
for (i=0 ;i<5 ;i++)
{
delayms(100) ;
lamp=!lamp ; //lamp取反
}
lamp=0 ; //关闭闪烁灯
}
void delayms(unsigned char ms) // 延时子程序
{
unsigned char i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询