突发奇想做的这个东东 没有什么实用价值 只作为一次实践 一般情况我们想在游戏里“耍流氓”都是通过软件方法即 开挂, 但我就是想通过“物理方法”来玩别踩白块儿 嘿嘿
先上视频:
视频里 因为第二个电磁铁回弹有点问题所以卡了几次
原理:用四个光敏电阻来测 手机游戏里的四个位置 然后用单片机AD转换 来驱动四个电磁铁(我是拆了四个继电器)点击手机屏幕上相应的位置
先拆继电器
拆好后在 弹片上焊上一个电阻的引脚
弄四个
PS:这里引脚的头上是锡箔纸 后来发现点击手机屏幕的效果不好 所以就换成了四个电容笔的头
焊到板上
然后焊上线 就不插图了
now 把光敏电阻 按手机的游戏界面的位置 焊到板上 引脚留长一点 方便测光(我在多处来的引脚上套了热缩管来防止干扰)
这里我在板的两端焊了粗漆包线 来当支架
合影
然后 一系列编程 调试
电路图附上:
程序(估计用不着,但里面的几个单片机的关于ADC的模板可能用的着):
---------------------------------------------------------------------------------------------------------------------------------------------------
#include //单片机头文件 #include //51基本运算(包括_nop_空函数)
sbit AAA = P3 ^ 2; sbit BBB = P3 ^ 3; sbit CCC = P3 ^ 4; sbit 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;}; }
}
-------------------------------------------------------------------------------------------------------------------------------------------------------
Thanks watching! 祝大家新年快乐! (责任编辑:admin) |