沒有用到定時器,代碼簡易,效果也還行。
使用的是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的占空比,就有了高電平比例逐漸上升又逐漸下降的效果。
不喜勿噴,還是新手。
管理員求黑幣!!!
|