標(biāo)題:
關(guān)于微信跳一跳物理助手的實(shí)現(xiàn)(單片機(jī)源碼+Proteus仿真)
[打印本頁]
作者:
1254333071
時(shí)間:
2019-3-10 12:51
標(biāo)題:
關(guān)于微信跳一跳物理助手的實(shí)現(xiàn)(單片機(jī)源碼+Proteus仿真)
使用51單片機(jī)實(shí)現(xiàn)的跳一跳物理外掛,包含了proteus仿真與元器件清單
代碼不免有粗糙之處;關(guān)于跳一跳物理助手的實(shí)現(xiàn)方法有很多,從串口通信到舵機(jī)、步進(jìn)電機(jī),如果要以快速精準(zhǔn)為目的,還可以使用攝像頭或者配合采樣電阻進(jìn)行AD轉(zhuǎn)換來實(shí)現(xiàn)來采集信息。
一、材料準(zhǔn)備:
單片機(jī)STC89C52RC、74HC138、74HC573、5V繼電器模塊、四腳輕觸開關(guān)、四位數(shù)碼管、晶振、電容、LED等。
硬件搭設(shè)
原理圖(見
FDF
)
實(shí)物圖
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(16 KB, 下載次數(shù): 79)
下載附件
2019-3-11 01:34 上傳
數(shù)據(jù)分析,首先通過給定的延時(shí)時(shí)間,測出小棋子跳的距離,記錄十組左右升序排列,建表,畫出折線圖,如下圖右側(cè):
得出的線性回歸方程為:
T = 22.26 * L + 56.44 (T
是延時(shí)時(shí)間,
L
是棋子跳的距離
)
若要得到更準(zhǔn)確的方程,可再多測量幾次數(shù)據(jù),再求方程。
(折線的原因是游戲本身是
3D
的,所以每次用尺子測量的距離誤差很大)
總結(jié)
代碼不免有粗糙之處;關(guān)于跳一跳物理助手的實(shí)現(xiàn)方法有很多,從串口通信到舵機(jī)、步進(jìn)電機(jī),如果要以快速精準(zhǔn)為目的,還可以使用攝像頭或者配合采樣電阻進(jìn)行AD轉(zhuǎn)換來實(shí)現(xiàn)來采集信息。
注:僅以學(xué)習(xí)為目的,本人不建議使用外掛,以維護(hù)游戲的公平性。
軟件及數(shù)據(jù)調(diào)試:
1、軟件
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define GPIO_SEG1 P0
sbit LsA=P2^2;
sbit LsB=P2^3;
sbit LsC=P2^4;
sbit K1=P2^0;
sbit Kt=P3^2;
sbit RELAY=P2^1;
float m=22.26,n=56.44,L;
uint T;
uchar num=0;
uchar code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
void delay_ms(uint n);
void DigDisplay();
uchar dig[4];
void DisplayData(uchar c);
void Rela();
void keyscan();
void Init0();
void main()
{
Init0();
while(1)
{
keyscan();
T=m*L+n;
DisplayData(L);
DigDisplay();
Rela();
}
}
void Rela()
{
if(K1==0)
{
delay_ms(10);
if(K1==0)
{
RELAY=0;
delay_ms(T);
RELAY=1;
while(!K1);
num=0;
L=0;
}
}
else
{
RELAY=1;
}
}
void delay_ms(unsigned int n)
{
unsigned int i=0,j=0;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
void DigDisplay()
{
uchar i;
for(i=0;i<4;i++)
{
switch(i)
{
case 0:
LsC=0;LsB=0;LsA=0;break;
case 1:
LsC=0;LsB=0;LsA=1;break;
case 2:
LsC=0;LsB=1;LsA=0;break;
case 3:
LsC=0;LsB=1;LsA=1;break;
}
P1=dig[i];
delay_ms(1);
P1=0x00;
}
}
void DisplayData(uchar c)
{
dig[0]=smgduan[c/1000];
dig[1]=smgduan[(c-(c/1000)*1000)/100];
dig[2]=smgduan[(c%100)/10];
dig[3]=smgduan[c%10];
}
void keyscan()
{
uint a=0;
uchar KeyValue;
GPIO_SEG1=0x0f;
if(GPIO_SEG1!=0x0f)
{
delay_ms(10);
if(GPIO_SEG1!=0x0f)
{
GPIO_SEG1=0x0f;
switch(GPIO_SEG1)
{
case(0x07):
KeyValue=0;break;
case(0x0b):
KeyValue=1;break;
case(0x0d):
KeyValue=2;break;
case(0x0e):
KeyValue=3;break;
}
GPIO_SEG1=0xf0;
switch(GPIO_SEG1)
{
case(0x70):
KeyValue=KeyValue;break;
case(0xb0):
KeyValue=KeyValue+4;break;
case(0xd0):
KeyValue=KeyValue+8;break;
case(0xe0):
KeyValue=KeyValue+12;break;
}
while(a<500&&(GPIO_SEG1!=0xf0))
{
delay_ms(1);
a++;
}
num++;
if(num==1)
{
L=KeyValue*10.0;
}
if(num==2)
{
L=L+KeyValue*1.0;
num=0;
}
}
}
}
void Init0()
{
EA=1;
EX0=1;
IT0=0;
}
void Int0() interrupt 0
{
delay_ms(10);
if(Kt==0)
{
L=0;
num=0;
}
}
復(fù)制代碼
0.png
(47.15 KB, 下載次數(shù): 64)
下載附件
2019-3-11 01:34 上傳
全部資料51hei下載地址:
微信跳一跳物理助手.zip
(2.84 MB, 下載次數(shù): 65)
2019-3-10 12:50 上傳
點(diǎn)擊文件名下載附件
51單片機(jī)實(shí)現(xiàn)的跳一跳物理外掛,包含了proteus仿真與元器件清單
下載積分: 黑幣 -5
作者:
灰色太極
時(shí)間:
2019-7-27 14:35
膜拜大佬
作者:
fgfd
時(shí)間:
2020-4-15 21:03
這個(gè)數(shù)碼管是共陰的嗎?
作者:
黃馬年
時(shí)間:
2020-6-5 10:56
能不能弄個(gè)電腦識(shí)別距離教程
作者:
lxlb87
時(shí)間:
2022-1-28 22:57
謝謝,認(rèn)真學(xué)習(xí)一下
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1