[media]http://v.youku.com/v_show/id_XODg2NjgwNjM2.html[/media]
原理:用四个光敏电阻来测 手机游戏里的四个位置 然后用单片机AD转换 来驱动四个电磁铁(我是拆了四个继电器)点击手机屏幕上相应的位置
先拆继电器
拆好后在 弹片上焊上一个电阻的引脚
弄四个
PS:这里引脚的头上是锡箔纸 后来发现点击手机屏幕的效果不好 所以就换成了四个电容笔的头
焊到板上
然后焊上线 就不插图了
now 把光敏电阻 按手机的游戏界面的位置 焊到板上 引脚留长一点 方便测光(我在多处来的引脚上套了热缩管来防止干扰)
这里我在板的两端焊了粗漆包线 来当支架
合影
然后 一系列编程 调试
[color=rgb(68, 68, 68) !important]电路图附上:
程序(估计用不着,但里面的几个单片机的关于ADC的模板可能用的着):
---------------------------------------------------------------------------------------------------------------------------------------------------
#include //单片机头文件
#include //51基本运算(包括_nop_空函数)
***it AAA = P3 ^ 2;
***it BBB = P3 ^ 3;
***it CCC = P3 ^ 4;
***it DDD = P3 ^ 5;
/*********************************************************************************************/
/*********************************************************************************************
函数名:毫秒级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)
返回值:无
结 果:开启ADC功能并设置ADC的输入端口
备 注:适用于STC12C2052AD系列单片机(必须使用STC12C2052AD.h头文件)
/**********************************************************************************************/
void Read_init (unsigned char CHA){
unsigned char AD_FIN=0; //存储A/D转换标志
CHA &= 0x07; //选择ADC的8个接口中的一个(0000 0111 清0高5位)
ADC_CONTR = 0x60; //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)
_nop_();
ADC_CONTR |= CHA; //选择A/D当前通道
_nop_();
ADC_CONTR |= 0x80; //启动A/D电源
DELAY_MS(1); //使输入电压达到稳定(1ms即可)
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:8位A/D转换函数
调 用:? = Read ();
参 数:无
返回值:8位的ADC数据
结 果:读出指定ADC接口的A/D转换值,并返回数值
备 注:适用于STC12C2052AD系列单片机(必须使用STC12C2052AD.h头文件)
/**********************************************************************************************/
unsigned char Read (void){
unsigned char AD_FIN=0; //存储A/D转换标志
ADC_CONTR |= 0x08; //启动A/D转换(0000 1000 令ADCS = 1)
_nop_();
_nop_();
_nop_();
_nop_();
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位)
}
/**********************************************************************************************
主函数
**************************************************************************************************/
void main (void){
unsigned char a;
unsigned char b;
unsigned char c;
unsigned char d;
P1M0 = 0x0f;
AA:
while(1){
Read_init (0);
DELAY_MS (2);
a = Read ();
Read_init (1);
DELAY_MS (2);
b = Read ();
Read_init (2);
DELAY_MS (2);
c = Read ();
Read_init (3);
DELAY_MS (2);
d = Read ();
if(a<80){AAA = 0 ;
DELAY_MS (200);
AAA=1;
goto AA ;};
if(b<80){BBB = 0 ;
DELAY_MS (200);
BBB=1;
goto AA;};
if(c<80){CCC = 0 ;
DELAY_MS (200);
CCC=1;
goto AA;};
if(d<80){DDD = 0 ;
DELAY_MS (200);
DDD=1;
goto AA;};
}
}