亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
單片機編程玩具機器人設計 Proteus仿真加源程序
[打印本頁]
作者:
51黑電子happy
時間:
2017-3-30 14:50
標題:
單片機編程玩具機器人設計 Proteus仿真加源程序
51單片機做的編程玩具機器人仿真原理圖(proteus工程文件可到本帖附件下載):
0.png
(37.27 KB, 下載次數: 147)
下載附件
2017-3-30 02:47 上傳
機器人的51單片機源程序:
//----------------------------------------------------------------------------------------------------------------------------------
// 程序名:JQR12-1.c
// 程序功能:編程玩具機器人
// --------------------------------------------------------------------------------------------------------------------------------
#include<reg51.h> //頭文件
sbit IRIN=P3^2; //定義紅外IR信號輸入位
sbit SLED=P3^1 ; //定義工作指示燈接口
sbit YJ=P3^0 ; //定義眼睛閃動LED接口
unsigned char IRDATA[7]; //定義數組,存儲紅外接收到的數據
void delay(unsigned char x); //延時約x*0.1ms 函數
void delay10ms(unsigned int count); //延時函數
void XQZ() ; //向前走函數
void DT(); //倒退走函數
void ZZ(); //向前左轉函數
void ZZ_Z(); //向前左轉函數
void YZ(); //向前右轉函數
void YZ_Z(); //向前右轉函數
void T_ZZ(); //向左瞄準函數
void T_YZ(); //向右瞄準函數
void TW(); //跳舞函數
void FS(); //發射函數
void LFS(); //連續發射函數
void SD_LED( ); //工作燈函數
void SD_JQR( ); //眼睛閃動函數
void IR_ZX(); //遙控執行函數
//-------------------------------------- 主函數 --------------------------------------
void main() //主函數
{
EA=1; //允許總中斷
EX0=1; //允許外部中斷INT0中斷
IT0=1; //外部中斷INT0采用脈沖觸發方式
SD_LED( ); //調用工作燈函數
{
IRIN=1; //IR 輸入位設置為高電平
P2=0x00;
while(1); //無限循環
}
}
//------------------------------------ 延時函數 ------------------------------------
void delay(unsigned char x) //延時約x*0.1ms
{
unsigned char i;
while(x--)
{for(i=0;i<10;i++){}}
}
//------------------------------------- 中斷解碼函數 -----------------------------------
void IR_IN() interrupt 0 using 0 //外部中斷INT0函數
{
unsigned char j,k,n=0; //定義變量,且n=0
EX0=0; //暫時先關中斷
delay(20); //延時0.10ms*20=2ms
if(IRIN==1) //如果IRIN出現高電平,是干擾信號
{
EX0=1;
return; //返回
}
while(!IRIN){delay(1);} //避開9ms前導低電平信
for(j=0;j<4;j++) //一共有4組數據
{
for(k=0;k<8;k++) //每組數據有8位
{
while(IRIN){delay(1);} // 避開4.5ms高電平
while(!IRIN){delay(1);}
// 開始接收數據
while(IRIN)
{
delay(1); //延時0.1ms
n++; //每過0.1ms時n就加1
if(n>=30) //如果超過30,放棄
{
EX0=1;
return;} //返回
}
IRDATA[j]=IRDATA[j]>>1; //右移1位
if(n>=8){IRDATA[j]=IRDATA[j]|0x80;}
n=0; //n清0
}
}
//檢查接收的數據和數據反碼是否相反
if(IRDATA[2]!=~IRDATA[3]) //判斷數據碼和數據反碼是不是相反
{ //否則就放棄
EX0=1;
return;
}
// 遙控執行
else
IR_ZX();
EX0=1; //開中斷
}
//-------------------------------------- 延時函數 ------------------------------------------
void delay10ms(unsigned int count) //延時函數
{
unsigned int i,j,k;
for(i=0; i<count; i++)
for(j=0; j<10; j++)
for(k=0; k<120; k++);
}
//------------------------------------ 向前走函數 ----------------------------------------
void XQZ() //向前走函數
{
P2=0x01; //左腿驅動電機正轉,機器人向前邁左腿
delay10ms(50); //延時0.5s
P2=0x00; //停止
delay10ms(100); //延時1s
P2=0x04; //右腿驅動電機正轉,機器人向前邁右腿
delay10ms(50); //延時0.5s
P2=0x00; //停止
delay10ms(100); //延時1s
P2=0x01; //左腿驅動電機正轉,機器人向前邁左腿
delay10ms(50); //延時0.5s
P2=0x00; //停止
delay10ms(100); //延時1s
P2=0x04; //右腿驅動電機正轉,機器人向前邁右腿
delay10ms(50); //延時0.5s
P2=0x00; //停止
delay10ms(100); //延時1s
}
//------------------------------------ 倒退走函數 ---------------------------------------
void DT() //倒退函數
{
P2=0x08; //右腿驅動電機反轉,機器人右腿后退
delay10ms(50); //延時0.5s
P2=0x00; //停止
delay10ms(100); //延時1s
P2=0x02; //左腿驅動電機反轉,機器人左腿后退
delay10ms(50); //延時0.5s
P2=0x00; //停止
delay10ms(100); //延時1s
P2=0x08; //右腿驅動電機反轉,機器人右腿后退
delay10ms(50); //延時0.5s
P2=0x00; //停止
delay10ms(100); //延時1s
P2=0x02; //左腿驅動電機反轉,機器人左腿后退
delay10ms(50); //延時0.5s
P2=0x00; //停止
delay10ms(100); //延時1s
}
//------------------------------------ 向前左轉函數 -------------------------------------------------
void ZZ() //向前左轉函數
{
P2=0x06; //左腿驅動電機反轉,右腿驅動電機正轉
delay10ms(50); //延時0.5s
P2=0x00; //停止
}
//--------------------------------- 向前左轉函數 -------------------------------------------
void ZZ_Z() //向前左轉函數
{
P2=0x06; //左腿驅動電機反轉,右腿驅動電機正轉
delay10ms(200); //延時2s
P2=0x00; //停止
}
//--------------------------------- 向前右轉函數 ------------------------------------------------
void YZ() //向前右轉函數
{
P2=0x09; //右腿驅動電機反轉,左腿驅動電機正轉
delay10ms(50); //延時0.5s
P2=0x00; //停止
}
//---------------------------------- 向前右轉函數 --------------------------------------------------
void YZ_Z() //向前右轉函數
{
P2=0x09; //右腿驅動電機反轉,左腿驅動電機正轉
delay10ms(200); //延時2s
P2=0x00; //停止
}
//---------------------------------- 向左瞄準函數 -------------------------------------------------
void T_ZZ() //頭左轉
{
P2=0x10; //頭驅動電機正轉
delay10ms(30); //延時0.3s
P2=0x00; //停止
}
//------------------------------------- 向右瞄準函數 -----------------------------------------------
void T_YZ() //頭右轉
{
P2=0x20; //頭驅動電機反轉
delay10ms(30); //延時0.3s
P2=0x00; //停止
}
//------------------------------------- 跳舞函數 ----------------------------------------------------
void TW() //跳舞
{
SD_JQR();
XQZ();
ZZ_Z();
DT();
YZ_Z();
XQZ();
DT();
SD_JQR();
}
//----------------------------------- 發射函數 ------------------------------------------------------
void FS() // 發射
{
P2=0x40; //加速驅動電機正轉
delay10ms(100); //延時1s
P2=0x80; //發射驅動電機正轉
delay10ms(50); //延時0.5s
P2=0x00; //停止
}
//----------------------------------- 連續發射函數 ---------------------------------------------
void LFS() // 連續發射
{
P2=0x40; //加速驅動電機正轉
delay10ms(100); //延時1s
P2=0x80; //發射驅動電機正轉
delay10ms(50); //延時0.5s
P2=0x00; //停止
delay10ms(100); //延時1s
P2=0x40; //加速驅動電機正轉
delay10ms(100); //延時1s
P2=0x80; //發射驅動電機正轉
delay10ms(50); //延時0.5s
P2=0x00; //停止
delay10ms(100); //延時1s
P2=0x40; //加速驅動電機正轉
delay10ms(100); //延時1s
P2=0x80; //發射驅動電機正轉
delay10ms(50); //延時0.5s
P2=0x00; //停止
delay10ms(100); //延時1s
}
//--------------------------------------- 工作燈函數 -------------------------------------------------
void SD_LED( ) //LED閃動
{
int y,i; //變量聲明
for(y=0;y<=30;y++) //循環30次
{
SLED=~SLED; //反相輸出
for(i=0;i<=30000;i++); //延時
}
SLED=1;
}
//---------------------------------------- 眼睛閃動函數 ---------------------------------------------
void SD_JQR( ) //LED閃動
{
int y,i; //變量聲明
for(y=0;y<=4;y++) //循環30次
{
YJ=~YJ; //反相輸出
for(i=0;i<=30000;i++); //延時
}
YJ=1;
}
//---------------------------------------- 遙控執行函數 -------------------------------------------------
void IR_ZX() //遙控執行函數
{
if(IRDATA[2]==0x01) //向前走
{
SD_JQR();
XQZ();
XQZ();
return;
}
else if(IRDATA[2]==0x02) //倒退
{
SD_JQR();
DT();
DT();
return;
}
else if(IRDATA[2]==0x03) //向前左轉
{
SD_JQR();
ZZ();
return;
}
else if(IRDATA[2]==0x04) //向前右轉
{
SD_JQR();
YZ();
return;
}
else if(IRDATA[2]==0x05) //跳舞
{
SD_JQR();
TW();
return;
}
else if(IRDATA[2]==0x06) //向左瞄準
{
SD_JQR();
T_ZZ();
return;
}
else if(IRDATA[2]==0x07) //向右瞄準
{
SD_JQR();
T_YZ();
return;
}
else if(IRDATA[2]==0x08) //發射
{
SD_JQR();
FS();
return;
}
else if(IRDATA[2]==0x09) //連續發射
{
SD_JQR();
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png
(68.83 KB, 下載次數: 151)
下載附件
2017-3-30 02:53 上傳
該系列源碼包含有很多非常經典,代碼風格十分規范,而且注釋詳細的單片機例程,還帶仿真,對于MCU學習特別是初學者是很有幫助的,全部源碼下載(共25個項目):
http://www.denmoz.com/bbs/dpj-79328-1.html
本例程下載(含proteus仿真工程文件與源碼):
單片機編程玩具機器人設計.rar
(72.33 KB, 下載次數: 61)
2017-3-30 02:52 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1