日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

单片机自动调光C语言,51单片机触控调光程序C语言

發(fā)布時(shí)間:2025/3/15 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机自动调光C语言,51单片机触控调光程序C语言 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

/*********************************************************************************************

程序名:    觸控調(diào)光臺(tái)燈

編寫人:    孫文

編寫時(shí)間:  2017年 12月 25日

硬件支持:  STC12C2052??12MHz

接口說明:  P3.7(PWM0)用PWM控制LED,P1.5~P1.7接3路觸摸鍵

修改日志:

NO.1-20090725_0622 完成觸控開關(guān)LED燈部分和PWM調(diào)光部分程序。

NO.2-20090725_0638 完成開關(guān)燈時(shí)的漸變亮度。

/*********************************************************************************************

說明:電路制作時(shí)需要將觸摸鍵和VCC線放在一起,然后觸摸時(shí)將手同時(shí)觸摸按鍵引腳和VCC線。

/*********************************************************************************************/

#include //STC12Cx052或STC12Cx052AD系列單片機(jī)頭文件

sbit ON_OFF_Key = P1 ^ 7; //ON/OFF開關(guān)鍵

sbit Add_Key = P1 ^ 6; //加亮度(+)

sbit Doc_Key = P1 ^ 5; //減亮度(-)

//LED與P3.7(PWM0)連接

unsigned char Bright=0x88; //全局變量,亮度值

bit POWER=0; //LED燈開/關(guān)狀態(tài)標(biāo)志位

/*********************************************************************************************

函數(shù)名:PWM初始化函數(shù)

調(diào)??用:PWM_init();

參??數(shù):無

返回值:無

結(jié)??果:將PCA初始化為PWM模式,初始占空比為0

備??注:需要更多路PWM輸出直接插入CCAPnH和CCAPnL即可

/**********************************************************************************************/

void PWM_init (void){

CMOD=0x02; //設(shè)置PCA定時(shí)器

CL=0x00;

CH=0x00;

CCAPM0=0x42; //PWM0設(shè)置PCA工作方式為PWM方式(0100 0010)

CCAP0L=0x00; //設(shè)置PWM0初始值與CCAP0H相同

CCAP0H=0x00; // PWM0初始時(shí)為0

CR=1; //啟動(dòng)PCA定時(shí)器

}

/**********************************************************************************************/

/*********************************************************************************************

函數(shù)名:PWM0占空比設(shè)置函數(shù)

調(diào)??用:PWM0_set();

參??數(shù):0x00~0xFF(亦可用0~255)

返回值:無

結(jié)??果:設(shè)置PWM模式占空比,為0時(shí)全部高電平,為1時(shí)全部低電平

備??注:如果需要PWM1的設(shè)置函數(shù),只要把CCAP0L和CCAP0H中的0改為1即可

/**********************************************************************************************/

void PWM0_set (unsigned char a){

CCAP0L= a; //設(shè)置值直接寫入CCAP0L

CCAP0H= a; //設(shè)置值直接寫入CCAP0H

}

/**********************************************************************************************/

/*********************************************************************************************

函數(shù)名:毫秒級(jí)CPU延時(shí)函數(shù)

調(diào)??用:DELAY_MS (?);

參??數(shù):1~65535(參數(shù)不可為0)

返回值:無

結(jié)??果:占用CPU方式延時(shí)與參數(shù)數(shù)值相同的毫秒時(shí)間

備??注:應(yīng)用于1T單片機(jī)時(shí)i<600,應(yīng)用于12T單片機(jī)時(shí)i<125

/*********************************************************************************************/

void DELAY_MS (unsigned int a){

unsigned int i;

while( --a != 0){

for(i = 0; i < 600; i++);

}

}

/*********************************************************************************************/

/*********************************************************************************************

函數(shù)名:主函數(shù)

調(diào)??用:無

參??數(shù):無

返回值:無

結(jié)??果:程序開始處,無限循環(huán)

備??注:

/**********************************************************************************************/

void main (void){

PWM_init(); //PWM初始化

P1M0 = 0xff; //將P1接口設(shè)置為高阻態(tài)輸入

P1M1 = 0x00; //觸摸按鍵啟用

DELAY_MS (200); //延時(shí)等待I/O接口電平狀態(tài)穩(wěn)定

while(1){ //循環(huán)程序部分

unsigned char a; //臨時(shí)變量

if(ON_OFF_Key == 1){ //開關(guān)鍵按下

if(POWER == 0){ //如果當(dāng)前狀態(tài)為關(guān),則執(zhí)行開燈程序

for(a=0;a<=Bright;a++){ //

PWM0_set(a);

DELAY_MS (20); //漸暗的時(shí)間間隔

}

PWM0_set(Bright); //達(dá)到存儲(chǔ)的LED亮度

POWER = 1; //把狀態(tài)標(biāo)志位變成開

}else{ //如果當(dāng)前狀態(tài)為開,則執(zhí)行關(guān)燈程序

for(a=Bright;a>0;a--){ //循環(huán)漸暗

PWM0_set(a);

DELAY_MS (20); //漸暗的時(shí)間間隔

}

PWM0_set(0); //關(guān)LED

POWER = 0; //把狀態(tài)標(biāo)志位變成關(guān)

}

while(ON_OFF_Key == 1); //等待按鍵放開

}

if(Add_Key == 1 && POWER == 1){ //加亮度鍵按下,同時(shí)在開燈狀態(tài)下

Bright++; //亮度值加1

PWM0_set(Bright); //將值寫入PWM控制LED亮度

if(Bright >= 0xFD){ //如果亮度值大于0xFD,則不再增加

Bright = 0xFD;

}

DELAY_MS (20); //漸變亮度的時(shí)間間隔

}

if(Doc_Key == 1 && POWER == 1){ //減亮度鍵按下,同時(shí)在開燈狀態(tài)下

Bright--; //亮度值減1

PWM0_set(Bright); //將值寫入PWM控制LED亮度

if(Bright < 0x08){ //如果亮度值小于0x08,則不再減少

Bright = 0x08;

}

DELAY_MS (20); //漸變亮度的時(shí)間間隔

}

}

}

/**********************************************************************************************/

總結(jié)

以上是生活随笔為你收集整理的单片机自动调光C语言,51单片机触控调光程序C语言的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。