您的位置 首页 国产IC

让没有PWM功用的单片机完成PWM功用

AT89S51本身没有PWM接口,程序采用软件模拟PWM,P1口控制LED亮度,模拟PWM输出控制灯的10个亮度级。includereg51h>defineuIntuns

AT89S51自身没有PWM接口,程序选用软件模仿PWM,P1口操控LED亮度,模仿PWM输出操控灯的10个亮度级。

#include
#define uInt unsigned int
#define uchar unsigned char
uchar PWM_T = 0; //占空比操控变量
//////////////////主程序进口//////////////////////
void main(void)
{
bit flag = 1; //操控灯渐亮渐熄方法
uInt n;
TMOD=0x02; //守时器0,作业形式2,8位守时形式
TH0=241; //写入预置初值241到守时器0,使15微秒溢出一次(11.0592MHz)
TL0=241; //写入预置值
TR0=1; //发动守时器
ET0=1; //答应守时器0中止
EA=1; //答应总中止
P1=0xff; //初始化P1
while(1)
{
for(n=0;n<300;n++); //延时,将呼应守时器中止,灯展主动加/减一个层次的亮度
if(flag==1) //灯渐亮
PWM_T++;
else //灯渐熄
PWM_T–;
if(PWM_T>=10) //设置灯亮度级别为10
flag=0;
if(PWM_T==0) //限制最低亮度级别为0
flag= 1;
}
}
///////////////////守时器0中止模仿PWM////////////////////
timer0() interrupt 1 using 2
{
static uchar t ; //t用来保存当时时刻在一秒中的份额方位
t++; //每15微秒添加1
if(t==10) //1.5毫秒的时钟周期
{
t=0; //使t=0,开端新的PWM周期
P1=0x00; //使LED灯亮
}
if(PWM_T==t) //依照当时占空比切换输出为高电平
P1=0xff; //使LED灯灭
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/318661.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部