资源简介

模拟量电容式触摸 单片机型号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


评论

共有 条评论