微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 硬件外挂基础-看我来山寨按键盒子

硬件外挂基础-看我来山寨按键盒子

时间:11-30 来源:互联网 点击:
材料清单:

旧鼠标一个 (这个大家都能找到就不算资金啦!)

STC89C52最小系统板一块(15元)

PL2303 USB转TTL小板一块(12元)

杜邦线 (附送的!)

9013三极管2个1k电阻两个


Ok了就这么多,下面开始做啦


(89c52最小系统板)



(旧鼠标电路板~~~哈哈,光电管被我拆了搞个LED做电源指示用)

这里拆除左右按键开关,用9013焊上基极焊1k电阻引出来做控制端。


(PL2303 USB转TTL小板)



(全家福!!呵呵)


PL2303和89c52板子的连接就不说了,资料上都有。鼠标板子引出的两个1k电阻用杜邦线接到89c52的P12和P13脚,分别对应左键触发和右键触发。

Ok 万事大吉,下面就是写点代码了,很简单,Let’s gooooooooooo!

89c52的代码如下:

#include

unsigned char message;

sbit L=P1 ^ 2;//左键

sbit R=P1 ^ 3;//右键

void delay21ms(void) //误差-0.651041666671us

{

unsigned char a,b;

for(b=150;b>0;b--)

for(a=63;a>0;a--);

}

void InitUART(void)

{

TMOD = 0x20;

SCON = 0x50;

TH1 = 0xFD; //速率19200 倍速

TL1 = TH1;

PCON = 0x80;

EA = 1;

ES = 1;

TR1 = 1;

}

void SendOneByte(unsigned char c)

{

SBUF = c;

while(!TI);

TI = 0;

}

void main(void)

{

L=0;

R=0;

InitUART();

}

void UARTInterrupt(void) interrupt 4

{

if(RI)

{

RI = 0;

message=SBUF;

if (message==a) //左键按下

{

L=1;

delay21ms();

L=0;

SendOneByte(!);

}

if (message==b) //右键按下

{

R=1;

delay21ms();

R=0;

SendOneByte(!);

}

}

else

TI = 0;

}

代码就是这些,很简单,用Keil编译后,使用stc的isp下载工具通过PL2303转接下载到89c52芯片中,至此,硬件部分结束!

这下可以用串口测试工具检测下片子工作正常不,串口参数:19200,8,n,1

发送字符‘a’返回‘!’,发送字符‘b’返回‘!’,这样就正常了


下面开始做上位机程序,很简单,就是在需要的时候发送字符,就可以控制鼠标的左右键点击了。我用的是delphi ,使用spcomm控件

我用大漠的插件做一个cf自动开枪的程序,可以参考下。

哈哈,有了这个什么230错误啊,什么开枪变慢啊,什么wai挂检测啊。。。都不存在了,只要你会找敌人就能把他干倒!!

源码如下:

unit Unit10;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,Dm_TLB,ComObj,madKernel, ExtCtrls, SPComm;

type
TForm10 = class(TForm)
btn1: TButton;
tmr1: TTimer;
lbl1: TLabel;
cm1: TComm;
btn2: TButton;
cbb1: TComboBox;
procedure FormCreate(Sender: TObject);
procedure tmr1Timer(Sender: TObject);
procedure leftclick();
procedure rightclick();
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form10: TForm10;
plug:dmsoft;

implementation

{$R *.dfm}

procedure TForm10.btn2Click(Sender: TObject);
begin
cm1.CommName:=cbb1.Text;
cm1.StartComm;
tmr1.Enabled:=True;
btn2.Enabled:=False;
end;

procedure TForm10.FormClose(Sender: TObject; var Action: TCloseAction);
begin
cm1.StopComm;
end;

procedure TForm10.FormCreate(Sender: TObject);
begin
Plug:=CreateComObject(CLASS_dmsoft) as dmsoft;
end;

procedure TForm10.leftclick;
begin
cm1.WriteCommData(a,1);
end;

procedure TForm10.rightclick;
begin
cm1.WriteCommData(b,1);
end;

procedure TForm10.btn1Click(Sender: TObject);
begin
tmr1.Enabled:=False;
cm1.StopComm;
Self.Close;
end;

procedure TForm10.tmr1Timer(Sender: TObject);
var
x,y:OleVariant;
isfind:Integer;
begin
begin
isfind:=Plug.FindColor(370,350,430,351,AE3D2B,0.9,2,X,Y);
if isfind=1 then
begin
leftclick;
Sleep(30);
leftclick;
end;
Sleep(20);
end;
end;

end.

好了 就说这么多了,可能有的地方没说全,下次再补补吧,好晚了,明天还要出差。

其实这个只是最最简单的硬件控制方案了,呵呵,无奈水平有限只能做个这个出来了,以后有时间再研究了!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top