資源簡介
模擬量電容式觸摸
單片機型號STC12C2052AD 使用ADC功能 內部RC時鐘
P1.1接口引線接一塊金屬片。
可實現對P1.6 P1.7的控制。
測試程序時可以在P1.6或P1.7在VCC之間連接LED,方可測試。
P1.6為鎖存 P1.7為不鎖存。實現效果見實驗
可自行控制5V繼電器實現自己要做的東西。
程序出自杜洋工作室。 希望各位網友多點支持

代碼片段和文件信息
說明:
模擬量電容式觸摸
STC12C2052AD?使用ADC功能?內部RC時鐘???
P1.1接口引線接一塊金屬片。
可實現對P1.6?P1.7的控制。
測試程序時可以在P1.6或P1.7在VCC之間連接LED,方可測試。
P1.6為鎖存?P1.7為不鎖存。實現效果見實驗
/*********************************************************************************************/
#include??//STC12Cx052或STC12Cx052AD系列單片機頭文件
#include? //51基本運算(包括_nop_空函數)
sbit?LED1?=?P1?^?7;?//I/O設置為強推高電平?(無鎖存功能)
sbit?LED2?=?P1?^?6;?//I/O設置為強推高電平?(鎖存功能)
/*********************************************************************************************
函數名:毫秒級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++);
}
}
/*********************************************************************************************/
/*********************************************************************************************
函數名:8位A/D轉換函數
調??用:??=?Read?(?);
參??數:輸入的端口(0000?0XXX?其中XXX是設置輸入端口號,可用十進制0~7表示,0表示P1.0,7表示P1.7)
返回值:8位的ADC數據
結??果:讀出指定ADC接口的A/D轉換值,并返回數值
備??注:適用于STC12C2052AD單片機
/**********************************************************************************************/
unsigned?char?Read?(unsigned?char?CHA){
unsigned?char?AD_FIN=0;?//存儲A/D轉換標志
????CHA?&=?0x07;????????????//選擇ADC的8個接口中的一個(0000?0111?清0高5位)
????ADC_CONTR?=?0x00; //ADC轉換的速度(0XX0?0000?其中XX控制速度,請根據數據手冊設置)
????_nop_();
????ADC_CONTR?|=?CHA;???????//選擇A/D當前通道
????_nop_();
????ADC_CONTR?|=?0x80;??????//啟動A/D電源
????DELAY_MS(1);????????????//使輸入電壓達到穩定(1ms即可)
????ADC_CONTR?|=?0x08;??????//啟動A/D轉換(0000?1000?令ADCS?=?1)
????while?(AD_FIN?==0){?????//等待A/D轉換結束
????????AD_FIN?=?(ADC_CONTR?&?0x10);?//0001?0000測試A/D轉換結束否
????}
????ADC_CONTR?&=?0xE7;??????//1111?0111?清ADC_FLAG位?關閉A/D轉換?
return?(ADC_DATA);??????????//返回A/D轉換結果(8位)
}
/**********************************************************************************************/
/*********************************************************************************************
函數名:觸摸按鍵處理函數
調??用:??=?Read_R?();
參??數:無
返回值:bit?1表示有感應物,0表示沒有感應物
結??果:
備??注:需要根據實現應用調協靈敏度和其他參數
/**********************************************************************************************/
bit?Read_R?(void){
unsigned?char?Riim=0ijk;
bit?aa;
for(ii=0;ii<3;ii++){?//循環檢查防干擾
j=0;k=0;
for(i=0;i<10;i++){?//一次采集數據的數量
DELAY_MS?(3);
R?=?Read?(0);
if(R?0x2F){?//此參數可調整感應靈敏度值在0x01到0x2F
k++;
}
if(R?==?0xFF){?
j++;
}
}
if(k>1?&&?j>1){
m++;
}else{
m=0;
}
}
if(m>2){
aa?=1;
}else{
aa=0;
}
LED1?=?~aa;
return(aa);
}
/**********************************************************************************************/
/*********************************************************************************************
函數名:主函數
調??用:無
參??數:無
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4386??2010-06-20?19:04??ADC電容式\EASY_TOUCH_ADCC
?????文件???????4077??2012-03-23?15:32??ADC電容式\EASY_TOUCH_ADCC.c
?????文件????????627??2010-06-20?19:04??ADC電容式\EASY_TOUCH_ADCC.hex
?????文件?????????62??2010-06-20?19:04??ADC電容式\EASY_TOUCH_ADCC.lnp
?????文件???????7076??2010-06-20?19:04??ADC電容式\EASY_TOUCH_ADCC.LST
?????文件???????9502??2010-06-20?19:04??ADC電容式\EASY_TOUCH_ADCC.M51
?????文件???????4903??2010-06-20?19:04??ADC電容式\EASY_TOUCH_ADCC.OBJ
?????文件???????1049??2010-06-20?22:48??ADC電容式\EASY_TOUCH_ADCC.Opt
?????文件???????2684??2010-06-20?22:48??ADC電容式\EASY_TOUCH_ADCC.plg
?????文件???????2126??2010-06-20?18:42??ADC電容式\EASY_TOUCH_ADCC.Uv2
????.......??????1042??2010-06-20?18:58??ADC電容式\EASY_TOUCH_ADCC_Opt.Bak
????.......?????????0??2010-06-20?18:37??ADC電容式\EASY_TOUCH_ADCC_Uv2.Bak
?????目錄??????????0??2010-06-20?22:48??ADC電容式
-----------?---------??----------?-----??----
????????????????37534????????????????????13
- 上一篇:基于百度地圖的地圖分區三級聯動插件
- 下一篇:2.tcl
評論
共有 條評論