這是我編寫的PWM呼吸燈程序,但是只有在中斷里面加上while(1)循環他才能呼吸。沒有這個while直接就不亮了,但我看別人的呼吸燈函數中斷內沒有while循環也能呼吸,這是為什么?
還有一個問題,加上while循環后的呼吸燈在逐漸變暗的時候“燈亮滅的抖動”明顯,怎么能讓他看起來流暢一點。
單片機源程序如下:
- #include "reg52.h"
- typedef unsigned char u8;
- typedef unsigned int u16;
- sbit LED = P2^0;
- u16 timer1, count, value;
- bit flag;
- void TimeInit()//¶¨ê±1us
- {
- TMOD |= 0x10;
- TH1 = 0xFF;
- TL1 = 0xFF;
- TR1 = 1;
- EA = 1;
- ET1 = 1;
- }
- void main()
- {
- LED = 1;
- timer1 = 0;
- count = 0;
- value = 0;
- flag = 0;
- TimeInit();
- while(1);
- }
- void Time() interrupt 2
- {
- TH1 = 0xFF;
- TL1 = 0xFF;
- //while(1)
- // {
- timer1++;
- count++;
- if(timer1 == 1000)
- {
- timer1 = 0;
- LED = 1;
- }
- if(count == 100)
- {
- count = 0;
- if(flag == 0)
- {
- value++;
- }
- if(flag == 1)
- {
- value--;
- }
- }
- if(value == 1000)
- {
- flag = 1;
- }
- if(value == 0)
- {
- flag = 0;
- }
- if(value > timer1)
- {
- LED = 0;
- }
- else
- {
- LED = 1;
- }
- // }
- }
復制代碼
|