freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于單片機(jī)c51智能車(已改無錯(cuò)字)

2022-07-23 13:45:16 本頁面
  

【正文】 r(void) interrupt 4 using 1它的樣子和我以前學(xué)過的定時(shí)/計(jì)數(shù)器0中斷函數(shù)相似,它的作用就是進(jìn)行串口中斷服務(wù),接收和發(fā)送數(shù)據(jù)?!?”是串口的中斷號(hào);“1”表示用了第1 組寄存器。在智能車行走過程中,如果有胡須被觸動(dòng),那就意味著碰到了東西。導(dǎo)航程序需要接受這些輸入信息,判斷它的意義,調(diào)用一系列使智能車倒退、旋轉(zhuǎn)朝不同方向行走的動(dòng)作子函數(shù)以避開障礙物。我的程序讓智能車向前走直到碰到障礙物。在這種情況下,智能車用它的一根或者兩根胡須探測(cè)障礙物。一旦胡須探測(cè)到障礙物,調(diào)用導(dǎo)航程序和子程序使小車倒退或者旋轉(zhuǎn),然后再重新再向前行走,直到遇到另一個(gè)障礙物。下面是編寫的胡須避障程序:includeincludeint P1_4state(void){ return (P1amp。0x10)?1:0。}int P2_3state(void){ return (P2amp。0x08)?1:0。}void Forward(void) //向前行走子程序{ P1_1=1。 delay_nus(1700)。 P1_1=0。 P1_0=1。 delay_nus(1300)。 P1_0=0。 delay_nms(20)。}void Left_Turn(void) //原地左轉(zhuǎn)子程序{ int i。 for(i=1。i=26。i++) { P1_1=1。 delay_nus(1300)。 P1_1=0。 P1_0=1。delay_nus(1300)。 P1_0=0。 delay_nms(20)。 }}void Right_Turn(void) //原地右轉(zhuǎn)子程序{ int i。 for(i=1。i=26。i++) { P1_1=1。 delay_nus(1700)。 P1_1=0。 P1_0=1。 delay_nus(1700)。 P1_0=0。 delay_nms(20)。 }}void Backward(void) //后退行走子程序{ int i。 for(i=1。i=65。i++) { P1_1=1。 delay_nus(1300)。 P1_1=0。 P1_0=1。 delay_nus(1700)。 P1_0=0。 delay_nms(20)。 }}int main(void){ uart_Init()。 printf(Program Running!\n)。 while(1) { if((P1_4state()==0)amp。amp。(P2_3state()==0)) //兩胡須同時(shí)碰到 { Backward()。 //向后 Left_Turn()。//向左 Left_Turn()。//向左 } else if(P1_4state()==0) //右胡須碰到 { Backward()。//向后 Left_Turn()。//向左 } else if(P2_3state()==0) //左胡須碰到 { Backward()。//向后 Right_Turn()。//向右 } else //胡須沒有碰到 Forward()。//向前 }}本設(shè)計(jì)的智能車是這樣胡須避障的:這里先定義了智能車的前后左右四個(gè)方向:當(dāng)智能車向前走時(shí),它將走向本頁紙的右邊;當(dāng)向后走時(shí),會(huì)走向紙的左邊;向左轉(zhuǎn)會(huì)使其向紙的頂端移動(dòng);向右轉(zhuǎn)它會(huì)朝著本頁紙的底端移動(dòng)。根據(jù)前進(jìn)方向的定義,智能車向前走時(shí),從智能車的左邊看,它向前走時(shí)輪子是逆時(shí)針旋轉(zhuǎn)的;從右邊看另一個(gè)輪子則是順時(shí)針旋轉(zhuǎn)的,所以按照定義,讓右輪順時(shí)針轉(zhuǎn)動(dòng);,讓左輪逆時(shí)針旋轉(zhuǎn),這樣就能讓智能車向前走。向后和向前基本一致。主程序中的語句首先檢查胡須的狀態(tài)。如果兩個(gè)胡須都觸動(dòng)了即P1_4state()和P2_3state()都為0,調(diào)用Backward(),緊接著調(diào)用Left_Turn ()兩次,也就是當(dāng)2個(gè)胡須都碰到了障礙物,則智能車后退3秒,然后向左轉(zhuǎn)2次;如果只是右胡須被觸動(dòng)即只有P1_4state()==0,程序調(diào)用Backward(),然后再調(diào)用Left_Turn (),也就是右胡須碰到障礙物,則智能車先后退3秒,然后向左轉(zhuǎn)1次;如果左胡須被觸動(dòng)即只有P2_3state()==0,程序調(diào)用Backward(),然后再調(diào)用Right _Turn();即左胡須碰到障礙物,則智能車先后退3秒,再向右轉(zhuǎn)1次。如果兩個(gè)胡須都沒有觸動(dòng),在這種情況下,在else中調(diào)用Forward()語句,繼續(xù)前進(jìn)。函數(shù)Left_Turn(),Right_Turn()以及Backward()和函數(shù)Forward()有一個(gè)不同之處。后者只發(fā)送一個(gè)脈沖,然后返回。因?yàn)橹悄苘嚳梢栽谙蚯靶凶咧械拿績(jī)蓚€(gè)脈沖之間檢查胡須的狀態(tài)。也就意味著,智能車在向前行走的過程中,每秒檢查觸須狀態(tài)大概43次(1000ms/23ms ≈=43)。因?yàn)槊總€(gè)全速前進(jìn)的脈沖都使得智能車前進(jìn)大約半厘米。只發(fā)送一個(gè)脈沖,然后回去檢查胡須的狀態(tài)是很有效的辦法。每次程序從Forward()返回后,程序再次從while循環(huán)的開始處執(zhí)行,此時(shí)if…else語句會(huì)再次檢查胡須的狀態(tài)。,具體程序如下:/* delay functions usamp。ms*/ /*內(nèi)嵌匯編的方法:一般格式 pragma ASM nop ; pragma ENDASM,*/void delay_nus(unsigned int i) //延時(shí):i=12 ,i的最小延時(shí)單12 us{ i=i/10。 while(i)。} void delay_nms(unsigned int n) //延時(shí)n ms{ n=n+1。 while(n) delay_nus(900)。 //延時(shí) 1ms,同時(shí)進(jìn)行補(bǔ)償} 在該頭文件中定義了兩個(gè)延時(shí)函數(shù):void delay_nms(unsigned int i)與void delay_nus(unsigned int i)。與整型數(shù)據(jù)int 相比,無符號(hào)整型數(shù)據(jù)unsigned int只有一個(gè)區(qū)別:數(shù)據(jù)的取值范圍從32768~+32767變?yōu)?~65535,也就是說它只能取非負(fù)整數(shù)。delay_nms( )是毫秒級(jí)的延時(shí),而delay_nus( )是微秒級(jí)的延時(shí)。如果我要延時(shí)1秒鐘,可以使用語句delay_nms(1000)。 1毫秒的延時(shí)則用delay_nus(1000)來完成。因?yàn)榧t外檢測(cè)器有一個(gè)電子濾波器, kHz的電信號(hào)通過。換句話說,檢測(cè)器只尋找每秒閃爍38,500次的紅外光。所以我要用P1_3(P3_6),如果紅外光被小車路徑上的物體反射回來,紅外檢測(cè)器將給微控制器發(fā)送一個(gè)信號(hào),讓它知道已經(jīng)檢測(cè)到反射回的紅外光。編寫的紅外線避障程序如下:includeincludeincludedefine LeftIR P1_2 //左邊紅外接收連接到P1_2define RightIR P3_5 //右邊紅外接收連接到P3_5define LeftLaunch P1_3 //左邊紅外發(fā)射連接到P1_3define RightLaunch P3_6 //右邊紅外發(fā)射連接到P3_6void IRLaunch(unsigned char IR){ int counter。 if(IR==39。L39。) //左邊發(fā)射 for(counter=0。counter38。counter++) //發(fā)射時(shí)間比胡須長(zhǎng) { LeftLaunch=1。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 LeftLaunch=0。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 } if(IR==39。R39。) //右邊發(fā)射 for(counter=0。counter38。counter++) { RightLaunch=1。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 RightLaunch=0。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 }}void Forward(void) //向前行走子程序{ P1_1=1。 delay_nus(1700)。 P1_1=0。 P1_0=1。 delay_nus(1300)。 P1_0=0。 delay_nms(20)。}void Left_Turn(void) //原地左轉(zhuǎn)子程序{ int i。 for( i=1。i=26。i++) { P1_1=1。 delay_nus(1300)。 P1_1=0。 P1_0=1。 delay_nus(1300)。 P1_0=0。 delay_nms(20)。 }}void Right_Turn(void) //原地右轉(zhuǎn)子程序{ int i。 for( i=1。i=26。i++) { P1_1=1。 delay_nus(1700)。 P1_1=0。 P1_0=1。 delay_nus(1700)。 P1_0=0。 delay_nms(20)。 }}void Backward(void) //向后行走子程序{ int i。 for( i=1。i=65。i++) { P1_1=1。 delay_nus(1300)。 P1_1=0。 P1_0=1。 delay_nus(1700)。 P1_0=0。 delay_nms(20)。 }}int main(void){ int irDetectLeft,irDetectRight。 uart_Init()。 printf(Program Running!\n)。 while(1) {
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1