日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/3/15 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机自动调光C语言,51单片机触控调光程序C语言 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

程序名:    觸控調光臺燈

編寫人:    孫文

編寫時間:  2017年 12月 25日

硬件支持:  STC12C2052??12MHz

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

修改日志:

NO.1-20090725_0622 完成觸控開關LED燈部分和PWM調光部分程序。

NO.2-20090725_0638 完成開關燈時的漸變亮度。

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

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

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

#include //STC12Cx052或STC12Cx052AD系列單片機頭文件

sbit ON_OFF_Key = P1 ^ 7; //ON/OFF開關鍵

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

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

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

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

bit POWER=0; //LED燈開/關狀態標志位

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

函數名:PWM初始化函數

調??用:PWM_init();

參??數:無

返回值:無

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

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

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

void PWM_init (void){

CMOD=0x02; //設置PCA定時器

CL=0x00;

CH=0x00;

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

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

CCAP0H=0x00; // PWM0初始時為0

CR=1; //啟動PCA定時器

}

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

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

函數名:PWM0占空比設置函數

調??用:PWM0_set();

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

返回值:無

結??果:設置PWM模式占空比,為0時全部高電平,為1時全部低電平

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

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

void PWM0_set (unsigned char a){

CCAP0L= a; //設置值直接寫入CCAP0L

CCAP0H= a; //設置值直接寫入CCAP0H

}

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

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

函數名:毫秒級CPU延時函數

調??用:DELAY_MS (?);

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

返回值:無

結??果:占用CPU方式延時與參數數值相同的毫秒時間

備??注:應用于1T單片機時i<600,應用于12T單片機時i<125

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

void DELAY_MS (unsigned int a){

unsigned int i;

while( --a != 0){

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

}

}

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

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

函數名:主函數

調??用:無

參??數:無

返回值:無

結??果:程序開始處,無限循環

備??注:

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

void main (void){

PWM_init(); //PWM初始化

P1M0 = 0xff; //將P1接口設置為高阻態輸入

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

DELAY_MS (200); //延時等待I/O接口電平狀態穩定

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

unsigned char a; //臨時變量

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

if(POWER == 0){ //如果當前狀態為關,則執行開燈程序

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

PWM0_set(a);

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

}

PWM0_set(Bright); //達到存儲的LED亮度

POWER = 1; //把狀態標志位變成開

}else{ //如果當前狀態為開,則執行關燈程序

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

PWM0_set(a);

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

}

PWM0_set(0); //關LED

POWER = 0; //把狀態標志位變成關

}

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

}

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

Bright++; //亮度值加1

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

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

Bright = 0xFD;

}

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

}

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

Bright--; //亮度值減1

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

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

Bright = 0x08;

}

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

}

}

}

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。