標(biāo)題:
注釋詳細(xì)的51單片機(jī)pwm調(diào)光代碼
[打印本頁(yè)]
作者:
z6509103
時(shí)間:
2019-5-18 14:59
標(biāo)題:
注釋詳細(xì)的51單片機(jī)pwm調(diào)光代碼
單片機(jī)pwm調(diào)光源程序如下:
/*-----------------------------------------------
名稱(chēng):PWM調(diào)光
修改:無(wú)
內(nèi)容:通過(guò)PWM(脈寬調(diào)制)調(diào)節(jié)LED的亮度
------------------------------------------------*/
#include<reg52.h> //包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義
sbit LED0=P1^0;// 用sbit 關(guān)鍵字 定義 LED到P1.0端口,LED是自己任意定義且容易記憶的符號(hào)
void Delay(unsigned int t); //函數(shù)聲明
/*------------------------------------------------
主函數(shù)
------------------------------------------------*/
void main (void)
{
unsigned int CYCLE=1000,PWM_LOW=0;//定義周期并賦值
while (1) //主循環(huán)
{
LED0=1;
Delay(60000); //特意加延時(shí),可以看到熄滅的過(guò)程
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++){ //PWM_LOW表示低
//電平時(shí)間,這個(gè)循環(huán)中低電平時(shí)長(zhǎng)從1累加到CYCLE(周期)的值,即600次
LED0=0; //點(diǎn)亮LED
Delay(PWM_LOW);//延時(shí)長(zhǎng)度,600次循環(huán)中從1加至599
LED0=1; //熄滅LED
Delay(CYCLE-PWM_LOW);//延時(shí)長(zhǎng)度,600次循環(huán)中從599減至1
}
LED0=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--){ //與逐漸變亮相反的過(guò)程
LED0=0;
Delay(PWM_LOW);
LED0=1;
Delay(CYCLE-PWM_LOW);
}
//主循環(huán)中添加其他需要一直工作的程序
}
}
/*------------------------------------------------
延時(shí)函數(shù),含有輸入?yún)?shù) unsigned int t,無(wú)返回值
unsigned int 是定義無(wú)符號(hào)整形變量,其值的范圍是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}
復(fù)制代碼
所有資料51hei提供下載:
15-PWM調(diào)光.zip
(20.94 KB, 下載次數(shù): 165)
2019-5-18 14:59 上傳
點(diǎn)擊文件名下載附件
pwm調(diào)光
下載積分: 黑幣 -5
作者:
jizhouheng
時(shí)間:
2020-6-4 00:48
這個(gè)程序我覺(jué)得是很標(biāo)準(zhǔn)的寫(xiě)法,容易讀。感謝。
作者:
doctorshi
時(shí)間:
2020-12-31 08:03
借鑒一下,做了個(gè)九檔調(diào)光電路,數(shù)碼管顯示。
作者:
rsx9583
時(shí)間:
2020-12-31 10:14
有點(diǎn)意思,做單純的PWM還是思路不錯(cuò)的,沒(méi)搞計(jì)時(shí)器,最簡(jiǎn)單的。
作者:
人人學(xué)會(huì)單片機(jī)
時(shí)間:
2020-12-31 11:37
#include "STC89.H" //頭文件包含
#include <intrins.h> //頭文件包含
typedef unsigned char u8; //重新定義數(shù)據(jù)類(lèi)型名
typedef unsigned short u16; //重新定義數(shù)據(jù)類(lèi)型名
typedef unsigned long u32; //重新定義數(shù)據(jù)類(lèi)型名
sbit PWM_OUT=P2^1;
u8 idata PWM_Write_Byte[3]=0;
// 定時(shí)器0初始化 晶振11059200,12T,輸出50Hz的PWM,占空比0~255
// 定時(shí)器初值為:256-(11059200÷12÷50Hz÷256) = 184 = 0xB8
//***************************祁緒電子 2020年5月***
void PWM_Init(void)
{
TMOD &= 0xF0; //配置定時(shí)器工作模式
TMOD |= 0x02; //配置定時(shí)器工作模式 8位自動(dòng)重裝模式
TL0 = 0xB8;; //定時(shí)器初值
TH0 = 0xB8; //定時(shí)器重裝初值
TR0 = 1; //啟動(dòng)定時(shí)器0
ET0=1; //允許定時(shí)器0申請(qǐng)中斷
EA=1; //中斷總閘閉合
}
//定時(shí)器0的CPU處理函數(shù),位置任意寫(xiě)都行
//****************************祁緒電子 2020年5月***
void PWM_Display_timer0() interrupt 1
{
static u8 pwm_t=0; //局部變量,不丟失數(shù)據(jù)
if(pwm_t<PWM_Write_Byte[0])
{
PWM_OUT=1;
}
else PWM_OUT=0;
pwm_t++;
}
// PWM 數(shù)模變換數(shù)據(jù)分配
//**************************祁緒電子 2020年5月***
void PWM_Allot()
{
static u8 kkk=0;
static u8 count=0;
count++;
if(count>100)
{
count=0;
kkk++;
PWM_Write_Byte[0]=kkk; //kkk為占空比自動(dòng)增加
PWM_Write_Byte[1]=10;
PWM_Write_Byte[2]=10;
}
}
void main() //主函數(shù)
{
PWM_Init();
while(1) //主函數(shù)大循環(huán)
{
PWM_Allot();
}
}
作者:
chjchj816
時(shí)間:
2020-12-31 14:36
程序很標(biāo)準(zhǔn)的寫(xiě)法 注釋得詳細(xì)
作者:
人人學(xué)會(huì)單片機(jī)
時(shí)間:
2020-12-31 15:21
STC89單片機(jī) 定時(shí)器做PWM程序
http://www.torrancerestoration.com/bbs/dpj-200820-1.html
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1