资讯详情

让没有PWM功能的单片机实现PWM功能

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

#include <reg51.h> #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灯灭 }

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台