|
前段時(shí)間寫(xiě)了一個(gè)使用51單片機(jī)對(duì)SG90玩具舵機(jī)的連續(xù)旋轉(zhuǎn)控制程序。今天突發(fā)奇想,將該程序稍作調(diào)整,改為呼吸燈控制程序,分享一下,大家可以根據(jù)這個(gè)程序再做改動(dòng),使其更加完善。
呼吸燈的PWM輸出引腳為51單片機(jī)的P0.0引腳,接發(fā)光二極管正極。
QQ圖片20180817005009.jpg (2.71 MB, 下載次數(shù): 40)
下載附件
2018-8-17 01:01 上傳
單片機(jī)源程序如下:
- // 呼吸燈程序,51單片機(jī)模擬PWM輸出
- // 使用單片機(jī)STC89C51
- // 晶振:11.0592M
- // 編譯環(huán)境 Keil uVision2
- ////////////////////////////////////////////////
- #include <reg52.h>
- #define uint unsigned int
- uint count,i,j;
- sbit pwm=P0^0 ; //信號(hào)輸出引腳P00
- void pwm100us(uint); //20ms周期pwm模型函數(shù),函數(shù)變量是0.1ms高電平的整數(shù)倍
- void delay100ms();
- ////////////////////////////////////////////////
- void main()
- {
- EA=1; //打開(kāi)總中斷
- TMOD=0x10; //定時(shí)器工作方式寄存器初始化TMOD=0001 0000B(T1為16位計(jì)時(shí)模式)
- while(1)
- {
- i=0;
- j=199;
- for(i=0;i<199;i++) //占空比從100%遞減至0
- {
- pwm100us(i);
- }
- pwm=1;
- delay100ms();
- for(j=199;j>0;j--) //占空比從100%遞減至0
- {
- pwm100us(j);
- }
- pwm=0;
- delay100ms();
- }
- }
- //////////////////////////////////////////////
- void pwm100us(uint x)
- { uint y;
- pwm=1; //輸出信號(hào)高電平
- while(count<x) //下面是單次100us的計(jì)時(shí),利用循環(huán)函數(shù)產(chǎn)生100*x us的高電平
- {
- TF1=0; //初始化定時(shí)器1溢出標(biāo)記位
- TH1=0xff; //初始化定時(shí)器1高位寄存器
- TL1=0xa4; //初始化定時(shí)器1低位寄存器
- TR1=1; //定時(shí)器1開(kāi)始計(jì)時(shí)
- while(TF1==0); //等待定時(shí)器1溢出
- count++;
- }
- count=0;
- y=(200-x); //給出y與x的關(guān)系
- pwm=0; //輸出信號(hào)低電平
- while(count<y)
- {
- TF1=0;
- TH1=0xff;
- TL1=0xa4;
- TR1=1;
- while(TF1==0);
- count++;
- }
- count=0;
- }
- /////////////////////////////////////////////
- void delay100ms()
- {
- unsigned char a,b;
- for(b=221;b>0;b--)
- for(a=207;a>0;a--);
- }
復(fù)制代碼
所有資料51hei提供下載:
呼吸燈hex文件和C程序.zip
(1.36 KB, 下載次數(shù): 64)
2018-8-17 00:59 上傳
點(diǎn)擊文件名下載附件
呼吸燈hex文件和C程序.zip 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|