欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
stc15單片機4足仿生機器人源程序
[打印本頁]
作者:
崔振男
時間:
2018-9-29 09:34
標題:
stc15單片機4足仿生機器人源程序
單片機源程序如下:
#include "stc15.H"
#include "stdio.h"
#include <string.h>
#include <intrins.h>
#include "類型.h"
#define dingshi 0xfd46 //20us中斷一次
#define gao (dingshi>>8)
#define di dingshi
//#define FOSC 11059200L
//#define FOSC 22118400L
#define FOSC 27000000L
//#define BAUD 115200
#define BAUD 1200
#define S1_S0 0x40 //P_SW1.6
#define S1_S1 0x80 //P_SW1.7
#define max 20
#define jiange 2000 //接收到兩個字節中間的最大間隔 單位是中斷個數
#define duo_ji_shu 18 //舵機數
#define su_du 3000
#define qian1 0x45
#define qian2 0x39
#define qian3 0x2b
#define qian4 0x2b
#define hou1 0x33
#define hou2 0x29
#define hou3 0x3b
#define hou4 0x3b
#define shang1 0x29
#define shang2 0x55
#define shang3 0x29
#define shang4 0x55
#define xia1 0x39
#define xia2 0x3f
#define xia3 0x39
#define xia4 0x43
#define jiaozhun1 5
#define jiaozhun2 5
#define jiaozhun3 5
sbit DJ1=P0^5;
sbit DJ2=P0^6;
sbit DJ3=P0^7;
sbit DJ4=P1^0;
sbit DJ5=P1^1;
sbit DJ6=P4^7;
sbit DJ7=P1^2;
sbit DJ8=P1^3;
sbit DJ9=P1^4;
sbit DJ10=P1^5;
sbit DJ11=P1^5;
sbit DJ12=P1^5;
sbit DJ13=P1^5;
sbit DJ14=P1^5;
sbit DJ15=P1^5;
sbit DJ16=P1^5;
sbit DJ17=P1^5;
sbit DJ18=P1^5;
sbit RX=P4^3;
sbit TX=P4^4;
code uchar qian[8*6]={ //動作數組-向前走
hou1,shang1,qian2,xia2,hou3,shang3,qian4,xia4,
qian1,shang1,hou2,xia2,qian3,shang3,hou4,xia4,
qian1,xia1,hou2,xia2,qian3,xia3,hou4,xia4,
qian1,xia1,hou2,shang2,qian3,xia3,hou4,shang4,
hou1,xia1,qian2,shang2,hou3,xia3,qian4,shang4,
hou1,xia1,qian2,xia2,hou3,xia3,qian4,xia4
};
code uchar hou[8*6]={ //動作數組-向后走
hou1,xia1,qian2,xia2,hou3,xia3,qian4,xia4,
hou1,xia1,qian2,shang2,hou3,xia3,qian4,shang4,
qian1,xia1,hou2,shang2,qian3,xia3,hou4,shang4,
qian1,xia1,hou2,xia2,qian3,xia3,hou4,xia4,
qian1,shang1,hou2,xia2,qian3,shang3,hou4,xia4,
hou1,shang1,qian2,xia2,hou3,shang3,qian4,xia4
};
code uchar you[8*6]={ //動作數組-向右轉
hou1,shang1,qian2,xia2,qian3,shang3,hou4,xia4,
qian1,shang1,hou2,xia2,hou3,shang3,qian4,xia4,
qian1,xia1,hou2,xia2,hou3,xia3,qian4,xia4,
qian1,xia1,hou2,shang2,hou3,xia3,qian4,shang4,
hou1,xia1,qian2,shang2,qian3,xia3,hou4,shang4,
hou1,xia1,qian2,xia2,qian3,xia3,hou4,xia4
};
code uchar zuo[8*6]={ //動作數組-向左轉
hou1,xia1,qian2,xia2,qian3,xia3,hou4,xia4,
hou1,xia1,qian2,shang2,qian3,xia3,hou4,shang4,
qian1,xia1,hou2,shang2,hou3,xia3,qian4,shang4,
qian1,xia1,hou2,xia2,hou3,xia3,qian4,xia4,
qian1,shang1,hou2,xia2,hou3,shang3,qian4,xia4,
hou1,shang1,qian2,xia2,qian3,shang3,hou4,xia4,
};
code uchar tiao[8*6]={ //動作數組-跳舞
hou1,xia1,qian2,xia2,qian3,xia3,hou4,xia4,
hou1,xia1,qian2,shang2,qian3,xia3,hou4,shang4,
qian1,xia1,hou2,shang2,hou3,xia3,qian4,shang4,
qian1,xia1,hou2,xia2,hou3,xia3,qian4,xia4,
qian1,shang1,hou2,xia2,hou3,shang3,qian4,xia4,
hou1,shang1,qian2,xia2,qian3,shang3,hou4,xia4,
};
uchar sheding[duo_ji_shu]; //現在設定值
uchar xinzhi[duo_ji_shu]; //新角度
bit jieshou=0; //接收成功標志
bit jk=0;//測試
bit jk2=0;//測試
uchar len=0; //數據長度
uchar ml=0; //要執行的命令
uchar shuju[max];
uint jishu_jg=0;
bit shijian_l=0;
bit wancheng=0;
bit zhi_xing=0; //開始執行標志
bit MS_1=0;
unsigned int time=0;
unsigned int timer=0;
float S=0;
bit flag =0;
void Delay1ms() //@27.000MHz
{
unsigned char i, j;
;
;
i = 7;
j = 141;
do
{
while (--j);
} while (--i);
}
void yanshi_ms(uint m)
{
while(m--)Delay1ms();
}
void fu_wei()
{
uchar i=0;
sheding[0]=0x33;
sheding[1]=0x3d;//1f
sheding[2]=0x37;
sheding[3]=0x43;
sheding[4]=0x2f;
sheding[5]=0x39;
sheding[6]=0x3b;
sheding[7]=0x41;
}
void chushihua(void) //初始化20us中斷22.1184MHz
{
uchar i=0;
ACC = P_SW1;
ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0
P_SW1 = ACC; //(P3.0/RxD, P3.1/TxD)
SCON = 0x50; //8位可變波特率
T2L = (65536 - (FOSC/4/BAUD)); //設置波特率重裝值
T2H = (65536 - (FOSC/4/BAUD))>>8;
AUXR = 0x14; //T2為1T模式, 并啟動定時器2
AUXR |= 0x01; //選擇定時器2為串口1的波特率發生器
AUXR |= 0x80;
TMOD &= 0xF0;
TL0 = di;
TH0 = gao;
TF0 = 0;
TR0 = 1;
ET0=0;
ES=1;
EA=1;
AUXR &= 0xdf; //定時器時鐘12T模式
TMOD &= 0x0F; //設置定時器模式
TF1 = 0; //清除TF1標志
TR1 = 0; //定時器1開始計時
fu_wei();
}
void yanshi(uint m)
{
while(m--)
{
if(!zhi_xing)break;
}
}
void send(uchar *j,l)
{
uchar i=0;
for(i=0;i<l;i++)
{
SBUF=*(j+i);
while(!TI);
TI=0;
}
yanshi(40000);
yanshi(40000);
yanshi(40000);
yanshi(40000);
}
bit Hand(unsigned char *a) //是否包含文本
{
if(strstr(shuju,a)!=NULL)
return 1;
else
return 0;
}
void Uart() interrupt 4
{
if (RI)
{
RI = 0;
if(len<max)
{
shuju[len++]=SBUF;
jishu_jg=0;//清零時間間隔變量
shijian_l=1;
}
}
// if(TI)TI=0;
}
void zhongduan() interrupt 1 //中斷服務
{
uchar i=0;
static int jishu=0;
// static uchar MS=0;
ET0=0;
// DJ1=!DJ1;
if(shijian_l)
{
jishu_jg++;
if(jishu_jg>jiange)
{
jieshou=1;//間隔時間到就說明接收到一個完整的字符串
shijian_l=0;
}
}
if(jishu++==900)
{
jishu=0;
}
DJ1=(jishu<sheding[0]);
DJ2=(jishu<sheding[1]);
DJ3=(jishu<sheding[2]);
DJ4=(jishu<sheding[3]);
DJ5=(jishu<sheding[4]);
DJ6=(jishu<sheding[5]);
DJ7=(jishu<sheding[6]);
DJ8=(jishu<sheding[7]);
DJ9=(jishu<sheding[8]);
DJ10=(jishu<sheding[9]);
DJ11=(jishu<sheding[10]);
DJ12=(jishu<sheding[11]);
DJ13=(jishu<sheding[12]);
DJ14=(jishu<sheding[13]);
DJ15=(jishu<sheding[14]);
DJ16=(jishu<sheding[15]);
DJ17=(jishu<sheding[16]);
DJ18=(jishu<sheding[17]);
TL0 = di;
TH0 = gao;
ET0=1;
}
void StartModule() //T1中斷用來掃描數碼管和計800MS啟動模塊
{
TX=1; //800MS 啟動一次模塊
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
float juli()
{
StartModule();
TH1=0;
TL1=0;
while(!RX); //當RX為零時等待
TR1=1; //開啟計數
while(RX); //當RX為1計數并等待
TR1=0; //關閉計數
time=TH1*256+TL1;
TH1=0;
TL1=0;
S=(time*2.0)/1000; //算出來是CM
if(flag==1)
{
flag=0;
S=1000;
}
return S;
}
void qingkong() //清空接收緩存
{
uchar i=0;
for(i=0;i<max;i++)
{
shuju[i]=0;
}
}
void WIFI()
{
while(!Hand("OK")) //判斷是否握手成功,如果不成功延時一會,再發送AT握手指令
{
len=0;
qingkong();
send("AT\r\n",4); //發送聯機指令
yanshi_ms(1000);
}
qingkong();
while(!Hand("OK"))
{
len=0;
qingkong();
send("AT+CWMODE=2\r\n",13); //設置為AP模式 讓手機鏈接wifi
yanshi_ms(1000);
}
qingkong();
while(!Hand("OK"))
{
len=0;
qingkong();
send("AT+CIPMUX=1\r\n",13); //設置為多連接模式
yanshi_ms(1000);
}
qingkong();
send("AT+CIPSERVER=1,8349\r\n",21);
yanshi_ms(1000);
send("AT+CIPSERVER=1,8349\r\n",21);
yanshi_ms(1000);
send("AT+CIPSERVER=1,8349\r\n",21);
qingkong();
len=0;
yanshi_ms(1000);
wancheng=1; //初始化完成 置標志位
}
uchar to_uchar(uchar g,uchar d)
{
if(g>=97)
{
g=g-87;
}
else
{
if(g<=57)
{
g=g-48;
}
}
if(d>=97)
{
d=d-87;
}
else
{
if(d<=57)
{
d=d-48;
}
}
return (g<<4)|d;
}
void qianjin()
{
uchar j=0;
static uchar i=0;
static uint y=0;
if(zhi_xing)
{
if(y++>su_du)
{
y=0;
for(j=0;j<8;j++)
{
sheding[j]=qian[i*8+j];
}
if(i++==5)i=0;
}
}
}
void houtui()
{
uchar j=0;
static uchar i=0;
static uint y=0;
if(zhi_xing)
{
if(y++>su_du)
{
y=0;
for(j=0;j<8;j++)
{
sheding[j]=hou[i*8+j];
}
if(i++==5)i=0;
}
}
}
void zuozhuan()
{
uchar j=0;
static uchar i=0;
static uint y=0;
if(zhi_xing)
{
if(y++>su_du)
{
y=0;
for(j=0;j<8;j++)
{
sheding[j]=zuo[i*8+j];
}
if(i++==5)i=0;
}
}
}
void youzhuan()
{
uchar j=0;
static uchar i=0;
static uint y=0;
if(zhi_xing)
{
if(y++>su_du)
{
y=0;
for(j=0;j<8;j++)
{
sheding[j]=you[i*8+j];
}
if(i++==5)i=0;
}
}
}
void tiaowu()
{
uchar j=0;
static uchar i=0;
static uint y=0;
if(zhi_xing)
{
if(y++>su_du)
{
y=0;
for(j=0;j<8;j++)
{
sheding[j]=tiao[i*8+j];
}
if(i++==5)i=0;
}
}
}
void zhixing() //執行遙控命令
{
uchar i=0;
if(zhi_xing)
{
switch(ml)
{
case 18:
qianjin(); //前進
break;
case 19:
houtui(); //后退
break;
case 20:
zuozhuan();//左轉
break;
case 21:
youzhuan();//右轉
break;
case 22:
tiaowu();//跳舞
break;
case 88: //遙控按鍵抬起
zhi_xing=0;
break;
}
}else fu_wei();
}
void main()
{
uchar k=0,chang=0,i=0,pian_yi=0;
bit jj=0;
chushihua();//初始化
yanshi(40000);
yanshi(40000);
yanshi(40000);
yanshi(40000);
yanshi(40000);
yanshi(40000);
yanshi(40000);
yanshi(40000);
WIFI();
yanshi(40000);
jk=1;
ET0=1;
// while(1)
// {
// sheding[0]=0x18;
// }
while(1)
{
if(jieshou)
{
if(Hand("+IPD"))
{
k=(uchar)strstr(shuju,"+IPD");
if(shuju[10]==':')//+IPD,2,9:123456789 +IPD,2,12:123456789012
{
chang=to_uchar('0',shuju[7]);//取出數據長度
pian_yi=11;
}else if (shuju[9]==':')
{
chang=to_uchar(shuju[7],shuju[8]);
pian_yi=10;
}else if (shuju[8]==':')
{
pian_yi=9;
}
ml=to_uchar(shuju[pian_yi],shuju[pian_yi+1]); //保存命令
if(ml<18)//命令小于18 是設定單個舵機角度值
{
sheding[ml]=to_uchar(shuju[pian_yi+2],shuju[pian_yi+3]);//把接收來的角度值賦給相應的舵機
}else
{
zhi_xing=1; //命令大于17 是遙控指令 置執行標志 執行相應的遙控動作
}
}
jieshou=0;
len=0;
qingkong();
}
zhixing(); //調用執行子程序
}
}
復制代碼
所有資料51hei提供下載:
4足仿生機器人.zip
(167.91 KB, 下載次數: 14)
2018-9-29 09:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2018-9-29 17:42
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1