用定時器實現的呼吸燈(內有原理圖)
單片機源程序如下:
- #include <reg51.h>
- #define ON 1
- #define OFF 0
- #define STANYBY 2
- sbit EN1 = P2^0;
- sbit EN2 = P1^5;
- sbit K2 = P3^0;
- sbit K3 = P3^2;
- int pwm_val_left;
- int push_led=1;
- int dir=STANYBY;
- unsigned int count=0;
- void KeyScan(void);
- void pwm_val_left_moto(void);
- //延時函數
- void delay_ms(unsigned int xms)
- {
- unsigned int i,j;
- for(i=xms;i>0;i--)
- for(j=112;j>0;j--);
- }
- void main()
- {
- TMOD = 0x11;
- EA = 1;
- ET0 = 1;
- ET1 = 1;
- TH0 = 0xFC;
- TL0 = 0x66;
- TH1 = (65535-50000)/256;
- TL1 = (65535-50000)%256;
- TR0 = 1;
- TR1 = 1;
- while(1)
- {
- if(K2==0)
- {
- dir=ON;
- }
- if(K3==0)
- {
- dir=OFF;
- }
- }
- }
- void timer0()interrupt 1
- {
- TH0 = 0xFC;
- TL0 = 0x66;
- pwm_val_left++;
- pwm_val_left_moto();
- }
- void pwm_val_left_moto(void)
- {
- if(dir==ON || dir == OFF)
- {
- if(pwm_val_left<=push_led)
- {
- EN1 = 0;
- }
- else
- {
- EN1 = 1;
- }
- if(pwm_val_left>=25)
- pwm_val_left=0;
- }
- }
- void timer1()interrupt 3
- {
- TH1 = (65535-50000)/256;
- TL1 = (65535-50000)%256;
- count++;
- if(count%6)
- {
- if(dir == ON)
- {
- if(push_led<25)
- push_led++;
- }
- else
- {
- if(push_led>0)
- push_led--;
- }
- }
-
- }
復制代碼
所有資料51hei提供下載:
呼吸燈.zip
(263.45 KB, 下載次數: 7)
2019-1-18 21:28 上傳
點擊文件名下載附件
|