|
這是我編寫(xiě)的PWM呼吸燈程序,但是只有在中斷里面加上while(1)循環(huán)他才能呼吸。沒(méi)有這個(gè)while直接就不亮了,但我看別人的呼吸燈函數(shù)中斷內(nèi)沒(méi)有while循環(huán)也能呼吸,這是為什么?
還有一個(gè)問(wèn)題,加上while循環(huán)后的呼吸燈在逐漸變暗的時(shí)候“燈亮滅的抖動(dòng)”明顯,怎么能讓他看起來(lái)流暢一點(diǎn)。
單片機(jī)源程序如下:
- #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;
- }
- // }
- }
復(fù)制代碼
|
|