51單片機利用I/O口高阻狀態實現觸摸控制LED燈
1.概述
這篇文章介紹使用I/O口的高阻狀態實現一個觸摸控制LED燈亮滅的實驗。該實驗通過手觸摸P3.7引腳,改變電平信號控制燈的亮滅。
2.實驗過程
2.1.實驗材料
名稱 | 型號 | 數量 |
---|---|---|
單片機 | STC12C2052 | 1 |
LED彩燈 | 無 | 1 |
晶振 | 12MHZ | 1 |
電容 | 30pf | 2 |
電阻 | 100歐姆 | 1 |
面包板 | 無 | 1 |
連接線 | 無 | 5 |
2.2.電路原理
將P3.7接口的燈連接到P1.7接口上,其他的按照電路圖鏈接即可。
2.3.實驗程序
/*************************************************************
* 程序名: IO口高阻模式實現觸控控制LED燈
* 編寫人: bruce
* 硬件支持:STC12C2052
* 日 期: 2023-11-23
* 修改日志:
/*************************************************************/#include<STC12C2052AD.H>// 定義P1.3 和 P1.2接口
sbit LED1 = P1^7;
sbit KEY = P3^7;void main(void){//設置P1接口為準雙口模式P1M0 = 0X00;P1M1 = 0X00;//設置P3.7接口為高阻模式P3M0 = 0X80;P3M1 = 0X00;// 定義接口高電平LED1 = 1;while(1){LED1 = ~KEY;}}
將手指放在P3.7接口上燈就會點亮,離開后就會熄滅。但是在實際使用中,手指還沒接觸到P3.7接口,燈就亮了,這就是受到干擾造成的。下面對此做了優化。
- 首先將P3.7設置為準雙口+延遲,避免未接觸到P3.7就變為低電平控制燈亮。在手開始接觸P3.7時,該接口處于準雙口,有輸出功能可以將干擾電流拉到GND,消除了一部分干擾
- 當設置P3.7為高阻狀態時,增加一個延遲,再次消除一部分干擾。
- 經過優化后比之前要穩定很多,手指觸摸到P3.7和P1.0引腳才會點亮LED燈。
/*************************************************************
* 程序名: IO口高阻模式實現觸控控制LED燈
* 編寫人: bruce
* 硬件支持:STC12C2052
* 日 期: 2023-11-23
* 修改日志:
/*************************************************************/#include<STC12C2052AD.H>// 定義P1.3 和 P1.2接口
sbit LED1 = P1^7;
sbit KEY = P3^7;/*********************************************************************************************
函數名:毫秒級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){//設置P1接口為準雙口模式P1M0 = 0X00;P1M1 = 0X00;//設置P3.7接口為高阻模式P3M0 = 0X80;P3M1 = 0X00;//初始化高低電平LED1 = 1;KEY = 0;while(1){//當手靠近還未觸摸到P3.7引腳,感應到微電流后就會改變狀態使控制燈的開關不穩定。//設置為準雙口,+ 延遲 過濾微電流影響觸摸不穩定現象。P3M0 = 0X00;DELAY_MS(2);P3M0 = 0X80;DELAY_MS(2);LED1 = ~KEY;}}