没有用到定时器,代码简易,效果也还行。
使用的是atc89c52RC,P1^1口接led,P1^1口位高电平小灯亮起,代码如下:
- #include "reg52.h"
- void delay(int t)
- {
- while(t--);
- }
- int main(void)
- {
- int c=400;//定义周期
- int h,l;//定义高电平低电平highlow
- while(1)
- {
- for(h=1;h<=c;h++)
- {
- P1=0x01;
- delay(h);
- P1=0x00;
- l=c-h;
- delay(l);
- }//高电平逐渐增加
- for(l=1;l<=c;l++)
- {
- P1=0x00;
- delay(l);
- P1=0x01;
- h=c-l;
- delay(h);
- }//低电平逐渐增加
- }
- }
复制代码 我也是偶然看到这个方法的,感觉还行分享出来。
首先我们定义了一个delay,接着是main主函数,在主函数里定义死循环,while里面用了for循环,目的是为了增加占空比,先让小灯置位高电平,延时h秒,接着低电平,延时L秒,就这样模拟了PWM的占空比,就有了高电平比例逐渐上升又逐渐下降的效果。
不喜勿喷,还是新手。
管理员求黑币!!!
|