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

正文內(nèi)容

帶lcd顯示功能的避障小車(chē)的設(shè)計(jì)畢業(yè)論文-資料下載頁(yè)

2025-06-23 02:24本頁(yè)面
  

【正文】 distance_data*17)/1000。 //這個(gè)公式修改為單位CM,沒(méi)有用到浮點(diǎn)運(yùn)算,不會(huì)有小數(shù)位 } distance1=distance_data。 D[0]=distance1/10。 D[1]=distance1%10。 WriteAddress(0x48)。 for(k=0。k2。k++) { delay_ms(100)。 WriteData(distance[k]+0X30)。 }}/************直流電機(jī)子程序,直流電機(jī)的驅(qū)動(dòng)未加PWM調(diào)速,ENA,ENB直接接了VCC,使用最大速****************///其中各程序的延時(shí)時(shí)間需要進(jìn)行實(shí)測(cè)//左轉(zhuǎn),且轉(zhuǎn)向時(shí)一個(gè)車(chē)輪正傳,一個(gè)車(chē)輪反轉(zhuǎn),轉(zhuǎn)過(guò)的角度,取決于延時(shí)時(shí)間,因?yàn)閑left()之后總是跟eon()void eleft(){ out1=0。out2=1。out3=1。out4=0。 delay_ms(120)。}//右轉(zhuǎn)void eright (){ out1=1。out2=0。out3=0。out4=1。delay_ms(120)。}//前進(jìn)void eon(){out2=0。 out4=0。 out1=1。 out3=1。}//后退void back(){out2=1。 out4=1。 out1=0。 out3=0。 delay_ms(150)。}//停止void stop() { out1=0。 out2=0。 out3=0。 out4=0。}//掉頭,跟左轉(zhuǎn)一樣,只是延時(shí)時(shí)間長(zhǎng),就造成了掉頭void turn(){out2=1。 out4=0。 out1=0。 out3=1。 delay_ms(250)。} /************測(cè)距判斷并動(dòng)作子程序****************///疑問(wèn):那個(gè)距離15什么單位?修改嗎?判斷機(jī)制合理嗎?void shunback(){ uint DATA1,DATA2。 chaoshengbo()。//超聲測(cè)距,返回測(cè)得距離distance1,此時(shí)小車(chē)沒(méi)有停止 if(distance1=15)//15cm { stop()。//當(dāng)判斷出小車(chē)車(chē)距小于15CM時(shí),小車(chē)先停止,判斷和處理動(dòng)作之后再跑動(dòng) TR1=1。 pro=10。 //0176。 delay_ms(100)。 beep()。 TR1=0。 chaoshengbo()。 DATA1= distance1。 TR1=1。 pro=36。 //180,買(mǎi)到舵機(jī)先做角度測(cè)試??! delay_ms(100)。 beep()。 TR1=0。 chaoshengbo()。 DATA2= distance1。 TR1=1。 pro=24。 //180176。 delay_ms(100)。 beep()。 TR1=0。//無(wú)論判斷出來(lái)的情況如何,最后總是eon(),所以這個(gè)子程序之后小車(chē)總是在跑動(dòng)的,//也就是說(shuō)下一次進(jìn)入該子程序,進(jìn)行超聲波測(cè)距時(shí)小車(chē)是在跑動(dòng)中 if(DATA115 amp。amp。 DATA1DATA2)//轉(zhuǎn)過(guò)幾個(gè)角度,進(jìn)行測(cè)距后,判斷轉(zhuǎn)向,以下為判斷機(jī)制,有更好的判斷機(jī)制嗎?? {eright()。beep()。eon()。} else if (DATA215 amp。amp。 DATA2DATA1) {eleft ()。beep()。eon()。} else if (DATA215 amp。amp。 DATA115) {back()。turn()。beep()。eon()。 } } else{ eon()。 }}/************主程序****************///對(duì)于兩個(gè)中斷,外部中斷只在chaoshengbo()中開(kāi)放了一次,而定時(shí)器1中斷也只在舵機(jī)需要搖頭的時(shí)候,開(kāi)TR1開(kāi)放,搖頭結(jié)束馬上關(guān)閉,搖頭時(shí)小車(chē)也不在行進(jìn)中//所以可以改PWM電機(jī)調(diào)速。void main(void) { unsigned char i,j。 P1=0XFF。 P2=0XFF。 P3=0XFE。//會(huì)不會(huì)影響TRIG引腳一直為高,以為要超聲波模塊要工作?改FE P0=0XFF。 Init()。 baidong()。 LcdInitiate()。 WriteAddress(0x00)。 for(i=0。i17。i++) { delay_ms(50)。 WriteData(A[i])。 } while(1) { while(K1==1amp。amp。K2==1) //無(wú)障礙物 { shunback()。 } while(K1==0||K2==0) //有障礙物,光電的感應(yīng)距離肯定很小,此時(shí)不進(jìn)行超聲判斷了,直接倒車(chē)之后停止 { stop()。 delay_ms(20)。 back()。 turn()。 } }}//修改時(shí)把主直流電機(jī)的程序改為PWM控制速度,提高可控性,方便加測(cè)速和PID調(diào)節(jié),STC89C52本身帶三個(gè)定時(shí)器。附錄二include //包含單片機(jī)寄存器的頭文件include //包含_nop_()函數(shù)定義的頭文件sbit RS=P1^2。 //寄存器選擇位,sbit RW=P1^3。 //讀寫(xiě)選擇位,sbit E=P1^4。 //使能信號(hào)位,sbit BF=P0^7。 //忙碌標(biāo)志位,/*****************************************************函數(shù)功能:延時(shí)1ms(3j+2)*i=(333+2)10=1010(微秒),可以認(rèn)為是1毫秒***************************************************/void delay1ms(){ unsigned char i,j。 for(i=0。i10。i++) for(j=0。j33。j++) 。 } /*****************************************************函數(shù)功能:延時(shí)若干毫秒入口參數(shù):n***************************************************/ void delay(unsigned char n) { unsigned char i。 for(i=0。in。i++) delay1ms()。 }/*****************************************************函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)返回值:result。result=1,忙碌。result=0,不忙***************************************************/ unsigned char BusyTest(void) { bit result。 RS=0。 //根據(jù)規(guī)定,RS為低電平,RW為高電平時(shí),可以讀狀態(tài) RW=1。 E=1。 //E=1,才允許讀寫(xiě) _nop_()。 //空操作 _nop_()。 _nop_()。 _nop_()。 //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 result=BF。 //將忙碌標(biāo)志電平賦給result E=0。 return result。 }/*****************************************************函數(shù)功能:將模式設(shè)置指令或顯示地址寫(xiě)入液晶模塊入口參數(shù):dictate***************************************************/void WriteInstruction (unsigned char dictate){ while(BusyTest()==1)。 //如果忙就等待 RS=0。 //根據(jù)規(guī)定,RS和R/W同時(shí)為低電平時(shí),可以寫(xiě)入指令 RW=0。 E=0。 //E置低電平(根據(jù)表86,寫(xiě)指令時(shí),E為高脈沖, // 就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置0 _nop_()。 _nop_()。 //空操作兩個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 P0=dictate。 //將數(shù)據(jù)送入P0口,即寫(xiě)入指令或地址 _nop_()。 _nop_()。 _nop_()。 _nop_()。 //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 E=1。 //E置高電平 _nop_()。 _nop_()。 _nop_()。 _nop_()。 //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 E=0。 //當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開(kāi)始執(zhí)行命令 }/*****************************************************函數(shù)功能:指定字符顯示的實(shí)際地址入口參數(shù):x***************************************************/ void WriteAddress(unsigned char x) { WriteInstruction(x|0x80)。 //顯示位置的確定方法規(guī)定為80H+地址碼x }/*****************************************************函數(shù)功能:將數(shù)據(jù)(字符的標(biāo)準(zhǔn)ASCII碼)寫(xiě)入液晶模塊入口參數(shù):y(為字符常量)***************************************************/ void WriteData(unsigned char y) { while(BusyTest()==1)。 RS=1。 //RS為高電平,RW為低電平時(shí),可以寫(xiě)入數(shù)據(jù) RW=0。 E=0。 //E置低電平(根據(jù)表86,寫(xiě)指令時(shí),E為高脈沖, // 就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置0 P0=y。 //將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫(xiě)入液晶模塊 _nop_()。 _nop_()。 _nop_()。 _nop_()。 //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 E=1。 //E置高電平 _nop_()。 _nop_()。 _nop_()。 _nop_()。 //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 E=0。 //當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開(kāi)始執(zhí)行命令 }/*****************************************************函數(shù)功能:對(duì)LCD的顯示模式進(jìn)行初始化設(shè)置***************************************************/void LcdInitiate(void){ delay(15)。 //延時(shí)15ms,首次寫(xiě)指令時(shí)應(yīng)給LCD一段較長(zhǎng)的反應(yīng)時(shí)間 WriteInstruction(0x38)。 //顯示模式設(shè)置:162顯示,57點(diǎn)陣,8位數(shù)據(jù)接口 delay(5)。 //延時(shí)5ms  WriteInstruction(0x38)。 delay(5)。 WriteInstruction(0x38)。 delay(5)。 WriteInstruction(0x0c)。 //顯示模式設(shè)置:顯示開(kāi),有光標(biāo),光標(biāo)閃爍 delay(5)。 WriteInstruction(0x06)。 //顯示模式設(shè)置:光標(biāo)右移,字符不移 delay(5)。
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1