用C语言写一个AT89S52的PWM控制程序.

硬件要求2个按键1个为增加PWM占空比1个为减少PWM的占空比8051的P1口的0脚输出PWM脉冲希望高手帮我写一份程序谢谢!我用来搞实验.... 硬件要求2个按键1个为增加PWM占空比 1个为减少PWM的占空比 8051的P1口的0脚输出PWM脉冲 希望高手帮我写一份程序谢谢! 我用来搞实验. 展开
 我来答
tony_sgt
推荐于2016-01-12 · TA获得超过8418个赞
知道大有可为答主
回答量:5330
采纳率:66%
帮助的人:1175万
展开全部
#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++);
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式