版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 智能循跡小車設(shè)計(jì)與制作</p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p><b> 系 別:</b></p><p><b> 專 業(yè):</b></p><p><b> 班 級(jí):</b><
2、;/p><p><b> 成 員:</b></p><p><b> 指導(dǎo)老師:</b></p><p> 時(shí) 間: 二〇一一年6月30日</p><p><b> 一、設(shè)計(jì)目的:</b></p><p> 1、學(xué)會(huì)智能電子產(chǎn)品的功能設(shè)
3、計(jì)與任務(wù)分析,能進(jìn)行小型電子產(chǎn)品方案設(shè)計(jì);</p><p> 2、掌握基于51單片機(jī)、FPGA模數(shù)混合硬件系統(tǒng)設(shè)計(jì)和程序設(shè)計(jì);</p><p> 3、熟悉電子信息類企業(yè)項(xiàng)目完整的運(yùn)作過程及管理規(guī)范,培養(yǎng)團(tuán)隊(duì)協(xié)作能力、溝通能力、創(chuàng)新能力和組織能力。</p><p> 二、智能循跡小車任務(wù)分析</p><p> 這是一種基于STC89C5
4、1單片機(jī)的小車尋跡系統(tǒng)。該系統(tǒng)采用兩組高靈敏度的光電對(duì)管,對(duì)路面黑色(白色)軌跡進(jìn)行檢測(cè),并利用單片機(jī)產(chǎn)生PWM波,控制小車速度。測(cè)試結(jié)果表明,該系統(tǒng)能夠平穩(wěn)跟蹤給定的路徑。</p><p> 整個(gè)系統(tǒng)基于普通玩具小車的機(jī)械結(jié)構(gòu),并利用了小車的底盤、前后輪電機(jī)及其自動(dòng)復(fù)原裝置,能夠平穩(wěn)跟蹤路面黑色軌跡運(yùn)行</p><p> 三、智能循跡小車循跡原理</p><p&g
5、t; 該智能小車在畫有黑線的白紙 “路面”上行駛,由于黑線和白紙對(duì)光線的反射系數(shù)不同,可根據(jù)接收到的反射光的強(qiáng)弱來判斷“道路”—黑線。利用了簡單、應(yīng)用比較普遍的檢測(cè)方法—發(fā)光二極管+光敏電阻。</p><p> 發(fā)光二極管+光敏電阻,即利用光線在不同顏色的物理表面具有不同的反射性質(zhì)的特點(diǎn)。在小車行駛過程中不斷地向地面發(fā)射白光,當(dāng)白光遇到白色地面時(shí)發(fā)生漫發(fā)射,反射光被裝在小車上的接收管接收;如果遇到黑線則紅外光
6、被吸收,則小車上的接收管接收不到信號(hào)。</p><p> 四、智能循跡小車總體方案</p><p> 整個(gè)電路系統(tǒng)分為檢測(cè)、控制、顯示、驅(qū)動(dòng)四個(gè)模塊。首先利用光電對(duì)管對(duì)路面信號(hào)進(jìn)行檢測(cè),經(jīng)過比較器處理之后,送給軟件控制模塊進(jìn)行實(shí)時(shí)控制,然后顯示小車的運(yùn)行狀態(tài),輸出相應(yīng)的信號(hào)給驅(qū)動(dòng)芯片驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng),從而控制整個(gè)小車的運(yùn)動(dòng)。系統(tǒng)方案方框圖如圖1所示。</p><p>
7、; 圖1 智能小車尋跡系統(tǒng)框圖</p><p> 五、智能循跡小車各模塊方案</p><p><b> 1、循跡模塊設(shè)計(jì)</b></p><p><b> 方案1:</b></p><p> 用紅外發(fā)射管:接收管自己制作光電對(duì)管循跡傳感器。紅外發(fā)射管發(fā)出紅外線,當(dāng)發(fā)出的紅外線照射到白色的平
8、面后反射,若紅外接收管能接收到反射回的光線則檢測(cè)出白線繼而輸出低電平,若接收不到發(fā)射出的光線則測(cè)出黑線繼而輸出高電平。這樣自己制作組裝的尋跡傳感器基本能夠滿足要求,但是工作不夠穩(wěn)定,且容易受外界光線的影響,因此我們放棄了這個(gè)方案。</p><p><b> 方案2:</b></p><p> 發(fā)光二極管+光敏電阻組成光敏探測(cè)器,光敏電阻的阻值可以根跟隨周圍環(huán)境光線
9、的變化而變化。當(dāng)光線照射到白線上面時(shí),光線發(fā)射強(qiáng)烈,光線照射到黑線上面時(shí),光線發(fā)射較弱 。因此光敏電阻在白線和黑線上方時(shí),阻值會(huì)發(fā)生明顯的變化。將阻值的變化值經(jīng)過比較器就可以輸出高低電平。該方案雖然有明顯的光線的車前但靈敏度好。因此我們采用這種方案。</p><p><b> 如理圖如下:</b></p><p> R61限制發(fā)射二極管的電流,發(fā)射管的電流和發(fā)射功
10、率成正比,但受其極限輸入正向電流50mA的影響,用R1=150的電阻作為限流電阻,Vcc=5V作為電源電壓,測(cè)試發(fā)現(xiàn)發(fā)射功率完全能滿足檢測(cè)需要;可變電阻RP61可限制接收電路的電流,一方面保護(hù)接收紅外管;另一方面可調(diào)節(jié)檢測(cè)電路的靈敏度。因?yàn)閭鞲衅鬏敵龆说玫降氖悄M電壓信號(hào),所以在輸出端增加了比較器,先將LM339輸出電壓與2.5V進(jìn)行比較,再送給單片機(jī)處理和控制。</p><p><b> 傳感器的安
11、裝</b></p><p> 正確選擇檢測(cè)方法和傳感器件是決定循跡效果的重要因素,而且正確的器件安裝方法也是循跡電路好壞的一個(gè)重要因素。從簡單、方便、可靠等角度出發(fā),同時(shí)在底盤裝設(shè)5個(gè)光敏二極管,進(jìn)行兩級(jí)方向糾正控制,將大大提高其循跡的可靠性,具體位置分布如圖3所示。</p><p> 圖3 光敏電阻的分布圖</p><p> 圖中循跡傳感器全部在
12、一條直線上。其中X1與Y1為第一級(jí)方向控制傳感器,X2與Y2為第二級(jí)方向控制傳感器,并且黑線同一邊的兩個(gè)傳感器之間的寬度不得大于黑線的寬度。小車前進(jìn)時(shí),始終保持(如圖3中所示的行走軌跡黑線)在X1和Y1這兩個(gè)第一級(jí)傳感器之間,當(dāng)小車偏離黑線時(shí),第一級(jí)傳感器就能檢測(cè)到黑線,把檢測(cè)的信號(hào)送給小車的處理、控制系統(tǒng),控制系統(tǒng)發(fā)出信號(hào)對(duì)小車軌跡予以糾正。第二級(jí)方向探測(cè)器實(shí)際是第一級(jí)的后備保護(hù),它的存在是考慮到小車由于慣性過大會(huì)依舊偏離軌道,再次對(duì)
13、小車的運(yùn)動(dòng)進(jìn)行糾正,從而提高了小車循跡的可靠性。</p><p><b> 2、控制模塊設(shè)計(jì)</b></p><p> 此部分是整個(gè)小車運(yùn)行的核心部件,起著控制小車所有的運(yùn)行狀態(tài)作用。控制方法很多,大部分都采用單片機(jī)控制。這里選擇了ATMEL公司的AT89C52作為控制芯片,在芯片體積小、集成度高、可靠性好、容量足夠、驅(qū)動(dòng)能力強(qiáng)、運(yùn)用方便、經(jīng)濟(jì)廉價(jià)。</p&
14、gt;<p><b> 3、電機(jī)驅(qū)動(dòng)模塊</b></p><p> 從單片機(jī)輸出信號(hào)功率很弱,即使在沒有其它外在負(fù)載是也無法帶動(dòng)電機(jī),所以在實(shí)際電路中我們加入了電機(jī)驅(qū)動(dòng)芯片提高輸入電機(jī)信號(hào)的功率,從而能夠根據(jù)需要控制電機(jī)轉(zhuǎn)動(dòng)。根據(jù)驅(qū)動(dòng)功率大小以及連接電路的簡單化要求選擇L298為直流電機(jī)驅(qū)動(dòng)芯片。</p><p><b> 電路圖如下:&
15、lt;/b></p><p> 4、FPGA系統(tǒng)軟件設(shè)計(jì)</p><p><b> 原理圖:</b></p><p><b> 4.1尋跡模塊</b></p><p> 尋跡板送過來的4路檢測(cè)信號(hào)送到FPGA板,F(xiàn)PGA將此4路信號(hào)送出至4個(gè)LED燈顯示狀態(tài)(檢測(cè)至黑線亮,否則滅);同
16、時(shí)將此4路信號(hào)送到單片機(jī)。</p><p> 顯示模塊及要求(采用1602)</p><p> 小車啟動(dòng):小車啟動(dòng)時(shí),顯示“Start”。</p><p> 小車左拐:小車左拐時(shí),顯示“Left”。</p><p> 小車右拐:小車右拐時(shí),顯示“Right”。</p><p> 小車前進(jìn):小車前進(jìn)時(shí),顯示“R
17、unning”。</p><p> 小車后退:小車后退時(shí),顯示“Back”。</p><p> 停車:小車停車時(shí),顯示“Stop”。</p><p><b> 4.2提示音模塊</b></p><p><b> ?。?) 小車啟動(dòng)</b></p><p> 小車啟動(dòng)前
18、發(fā)出3聲“嘟、嘟、嘟”的聲音,提示音結(jié)束后,F(xiàn)PGA發(fā)出一個(gè)啟動(dòng)信號(hào)給單片機(jī),從而啟動(dòng)小車。</p><p><b> ?。?)停車</b></p><p> 小車停車時(shí),F(xiàn)PGA播放一首音樂,音樂播放結(jié)束即表示小車完成了任務(wù)。</p><p> 4.3 FPGA設(shè)計(jì)總原理圖如下:</p><p><b>
19、 5、單片機(jī)控制模塊</b></p><p><b> 5.1 啟動(dòng)小車</b></p><p> 小車在接收到FPGA送過來的啟動(dòng)指令后,讀取尋跡信號(hào),根據(jù)尋跡信號(hào)確定小車的運(yùn)行狀態(tài),將小車的運(yùn)行狀態(tài)送至FPGA,同時(shí)根據(jù)相應(yīng)算法,驅(qū)動(dòng)小車的左右電機(jī)前進(jìn)。由于其實(shí)跑道與正常跑道有一段路程不好處理,所以需要沖一段路程才能使跑到正常軌道。</p&
20、gt;<p><b> 5.2 正常前進(jìn)</b></p><p> 當(dāng)尋跡板中間兩個(gè)傳感器檢測(cè)到黑線,小車都正常前進(jìn)。</p><p><b> 5.3 左拐彎</b></p><p> 當(dāng)最左端的兩個(gè)傳感器同時(shí)檢測(cè)到黑線,或只有一個(gè)檢測(cè)到黑線時(shí),右端其它傳感器檢測(cè)到白色時(shí),小車應(yīng)左拐彎。但是根據(jù)跑道
21、要求,當(dāng)循跡板第一次檢測(cè)到全黑時(shí),小車應(yīng)左轉(zhuǎn)。</p><p><b> 5.4 右拐彎</b></p><p> 當(dāng)最右端的兩個(gè)傳感器檢同時(shí)測(cè)到黑線,或只有一個(gè)檢測(cè)到黑線時(shí),左端其它傳感器檢測(cè)到白色時(shí),小車應(yīng)右拐彎。</p><p><b> 5.5 后退</b></p><p> 當(dāng)4個(gè)
22、傳感器都檢測(cè)到白色,小車后退。</p><p><b> 5.6 停車</b></p><p> 當(dāng)4個(gè)傳感器同時(shí)第六次檢測(cè)到黑線,小車停車。小車停車后,發(fā)出一個(gè)停車標(biāo)志信號(hào)送給FPGA,使FPGA播放音樂。</p><p><b> 5.7中斷模塊</b></p><p> 5.8 電機(jī)控
23、制模塊</p><p> 5.9 小車速度的PWM調(diào)制</p><p><b> PWM基本原理</b></p><p> PWM是通過控制固定電壓的直流電源開關(guān)頻率,從而改變負(fù)載兩端的電壓,進(jìn)而達(dá)到控制要求的一種電壓調(diào)整方法。</p><p> 在PWM驅(qū)動(dòng)控制的調(diào)整系統(tǒng)中,按一個(gè)固定的頻率來接通和斷開電源,并
24、根據(jù)需要改變一個(gè)周期內(nèi)“接通”和“斷開”時(shí)間的長短。通過改變直流電機(jī)電樞上電壓的“占空比”來改變平均電壓的大小,從而控制電動(dòng)機(jī)的轉(zhuǎn)速。</p><p><b> 六、心得體會(huì)</b></p><p> 這次循跡小車課程設(shè)計(jì)不得不說是個(gè)大工程,讓我們從中學(xué)會(huì)了許多東西,特別是分工與合作。從最開始的買元器件,到焊接、調(diào)試循跡板,再到FGPA的VHDL程序和C語言程序的
25、編寫,都不簡單。我們的循跡板在第一次焊接完畢,經(jīng)過調(diào)試后,能正常工作。但是,當(dāng)我們把它裝在小車上讓它去跑時(shí),問題就來了,有個(gè)燈就不亮了。后來經(jīng)過檢測(cè)后,終于又弄好了。然后在寫C語言時(shí),主要就是調(diào)節(jié)小車的速度和轉(zhuǎn)彎時(shí)的角度。而最難的是FPGA程序的編寫,特別是音樂的編程,真的很復(fù)雜,花了我們很多時(shí)間才把它寫好。而1602液晶的編寫,用到了我們沒有學(xué)過的狀態(tài)機(jī),經(jīng)過查找資料后,才弄清楚狀態(tài)機(jī)到底是什么回事。</p><p
26、> 由于這次課程設(shè)計(jì)的工作量很大,所以我們組這次的分工非常明確。一個(gè)人寫C語言程序,一個(gè)人寫VHDL程序,一個(gè)人負(fù)責(zé)循跡板的焊接與調(diào)試,還有一個(gè)負(fù)責(zé)資料的收集和報(bào)告的書寫。最后,經(jīng)過我們組的分工協(xié)作,終于把循跡小車的制作完成了。這次課程設(shè)計(jì),收獲最大的,還是告訴了我們要主動(dòng)去學(xué)習(xí)新的知識(shí)。</p><p> 附錄一:循跡板原理圖</p><p> 附錄二:單片機(jī)C 語言程序&l
27、t;/p><p> #include<reg52.h></p><p> /*********************第一部分 ***************************************/</p><p> //以下是點(diǎn)擊驅(qū)動(dòng)芯片 L298 管腳位聲明</p><p> sbit PWM1=P1^0;
28、//電機(jī)使能端</p><p> sbit PWM2=P1^1;</p><p> sbit IN1=P1^2; //電機(jī)控制端</p><p> sbit IN2=P1^3;</p><p> sbit IN3=P1^4;</p><p> sbit IN4=P1^5;</p><p
29、> sbit start=P0^0;//小車啟動(dòng)信號(hào)</p><p> sbit stop=P0^1;//小車停止信號(hào)</p><p> sbit RP1=P2^3;//此處是傳感器 管腳位聲明</p><p> sbit RP2=P2^2;</p><p> sbit RP3=P2^1;</p>&l
30、t;p> sbit RP4=P2^0;</p><p> int count1,count2;//用于中斷計(jì)數(shù)</p><p> //延時(shí)函數(shù),延時(shí)z秒</p><p> void delay(int z)</p><p><b> {</b></p><p><b>
31、; int x,y;</b></p><p> for(x=z;x>0;x--)</p><p> for(y=124;y>0;y--);</p><p><b> }</b></p><p> /*********************第二部分 電機(jī)控制子函數(shù)************
32、****************/</p><p> void forward1()//電機(jī) 1 前進(jìn)</p><p><b> {</b></p><p><b> IN1=0;</b></p><p><b> IN2=1;</b></p><p
33、><b> }</b></p><p> void forward2()//電機(jī) 2 前進(jìn)</p><p><b> {</b></p><p><b> IN3=0;</b></p><p><b> IN4=1;</b></p&g
34、t;<p><b> }</b></p><p> void back1()//電機(jī) 1 后退</p><p><b> {</b></p><p><b> IN1=1;</b></p><p><b> IN2=0;</b>&l
35、t;/p><p><b> }</b></p><p> void back2()//電機(jī) 2 后退</p><p><b> {</b></p><p><b> IN3=1;</b></p><p><b> IN4=0;</b
36、></p><p><b> }</b></p><p> /***************電機(jī)的速度控制 用PWM調(diào)速************************/</p><p> void speed(int cnt1,int sd1,int cnt2,int sd2) </p><p><b
37、> {</b></p><p> if(cnt1<sd1) //電機(jī)1 PWM調(diào)速</p><p><b> PWM1=1;</b></p><p><b> else</b></p><p><b> PWM1=0;</b></p
38、><p> if(cnt2<sd2)//電機(jī)2 PWM調(diào)速</p><p><b> PWM2=1;</b></p><p><b> else </b></p><p><b> PWM2=0;</b></p><p><b&g
39、t; }</b></p><p> /***************電機(jī)的前進(jìn)、左轉(zhuǎn)、右轉(zhuǎn)控制************************/</p><p> void turn(int cnt1,int sd1,int cnt2,int sd2)</p><p><b> {</b></p><p&
40、gt; forward1();</p><p> forward2();</p><p> speed(cnt1,sd1,cnt2,sd2);</p><p><b> }</b></p><p> /***************電機(jī)的后退控制************************/</p&g
41、t;<p> void back(int cnt1,int sd1,int cnt2,int sd2)</p><p><b> {</b></p><p><b> back1();</b></p><p><b> back2();</b></p><p&
42、gt; speed(cnt1,sd1,cnt2,sd2);</p><p><b> }</b></p><p> /*********************第三部分 主函數(shù)****************************/</p><p> void main()</p><p><b>
43、 {</b></p><p> int num=0;</p><p><b> stop=0;</b></p><p> TMOD=0x01;//中斷模式設(shè)置</p><p><b> EA=1;</b></p><p> TH0=(65536-
44、1000)/256;//定時(shí)1ms</p><p> TL0=(65536-1000)%256;</p><p><b> ET0=1;</b></p><p> TR0=1; </p><p> start=1; //給FPGA發(fā)送START信號(hào)</p><p>
45、 delay(3000);//等待FPGA發(fā)送循跡信號(hào) delay(3000);等待FPGA發(fā)送循跡信號(hào)</p><p> start=0; </p><p> turn(count1,250,count2,250); //使小車沖上黑色軌道</p><p> delay(350); //延時(shí)等待小車沖上黑色軌道</p>
46、;<p><b> while(1)</b></p><p><b> {</b></p><p> if(RP1==1&&RP2==1&&RP3==1&&RP4==1) </p><p> back(count1,50,count2,50); //
47、 1111 當(dāng)四個(gè)LED檢測(cè)到黑線時(shí),小車后退</p><p> if(RP1==1&&RP2==0&&RP3==0&&RP4==1) </p><p> turn(count1,200,count2,200); //1001當(dāng)?shù)诙馤ED檢測(cè)到黑線時(shí),小車前進(jìn)</p><p> if(RP1==0&
48、;&RP2==1&&RP3==1&&RP4==0) </p><p> turn(count1,150,count2,150); // 0110 當(dāng)?shù)谝?、三個(gè)LED檢測(cè)到黑線時(shí),小車減速前進(jìn)</p><p> /**********************小車左轉(zhuǎn)*****************************/</p>
49、<p> if(RP1==0&&RP2==1&&RP3==1&&RP4==1)</p><p> turn(count1,0,count2,150); // 0111 當(dāng)最右邊的LED檢測(cè)到黑線時(shí),小車左轉(zhuǎn)</p><p> if(RP1==1&&RP2==0&&RP3==1&&
50、RP4==1) </p><p> turn(count1,80,count2,150); // 1011 當(dāng)?shù)诙€(gè)LED檢測(cè)到黑線時(shí),小車偏左轉(zhuǎn)</p><p> if(RP1==0&&RP2==0&&RP3==1&&RP4==1)</p><p> turn(count1,0,count2
51、,100); // 0011 當(dāng)?shù)谝?、二個(gè)LED檢測(cè)到黑線時(shí),小車左轉(zhuǎn)</p><p> if(RP1==0&&RP2==0&&RP3==0&&RP4==1)</p><p> turn(count1,0,count2,200); // 0001 當(dāng)?shù)谝?、二、三個(gè)LED檢測(cè)到黑線時(shí),小車左大轉(zhuǎn)</p><p>
52、/***********************小車右轉(zhuǎn)*******************************/</p><p> if(RP1==1&&RP2==1&&RP3==0&&RP4==1) </p><p> turn(count1,150,count2,80); // 1101 當(dāng)?shù)谌齻€(gè)LED檢測(cè)到黑線時(shí),小車偏右轉(zhuǎn)
53、</p><p> if(RP1==1&&RP2==1&&RP3==1&&RP4==0) </p><p> turn(count1,180,count2,0); // 1110 當(dāng)?shù)谒膫€(gè)LED檢測(cè)到黑線時(shí),小車右轉(zhuǎn)</p><p> if(RP1==1&&RP2==1&&RP3=
54、=0&&RP4==0) </p><p> turn(count1,100,count2,0); //1100 當(dāng)?shù)谌母馤ED檢測(cè)到黑線時(shí),小車右轉(zhuǎn)</p><p> if(RP1==1&&RP2==0&&RP3==0&&RP4==0)</p><p> turn(count1,200,co
55、unt2,0); // 1000 當(dāng)?shù)诙?、三、四個(gè)LED檢測(cè)到黑線時(shí),小車右大轉(zhuǎn)</p><p> /**************小車檢測(cè)到全黑情況的處理----停車與左轉(zhuǎn)----*************/</p><p> if(RP1==0&&RP2==0&&RP3==0&&RP4==0)</p><p>
56、<b> { </b></p><p> if(num==0)</p><p><b> {</b></p><p> back1();// 0000 當(dāng)四個(gè)LED第一次檢測(cè)到黑線時(shí),左輪后退,右輪前進(jìn)小車左轉(zhuǎn)</p><p> forward2();</p>
57、<p> delay(100);//延時(shí)100ms,等待小車轉(zhuǎn)過彎道</p><p><b> }</b></p><p> if(num>0 && num<6)</p><p><b> {</b></p><p> turn(count1,20
58、0,count2,200);// 0000 當(dāng)四個(gè)LED再次檢測(cè)到黑線的次數(shù)小于6次時(shí),</p><p> // 即到達(dá)斑馬線時(shí)小車前進(jìn)速度大于后退速度</p><p><b> }</b></p><p> if(num>=6)</p><p><b> {</b></p&g
59、t;<p><b> PWM1=0;</b></p><p> PWM2=0;//當(dāng)四個(gè)LED第六次檢測(cè)到黑線時(shí),小車停止</p><p> stop=1; //發(fā)送停止信號(hào)給FPGA,使FPGA播放音樂</p><p><b> }</b></p><p&
60、gt;<b> num++; </b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /*********第四部分 中斷服務(wù)函數(shù) **************
61、*****************/</p><p> void time0()interrupt 1</p><p><b> {</b></p><p> TH0=(65536-1000)/256;//定時(shí)1ms</p><p> TL0=(65536-1000)%256;</p><p&
62、gt;<b> count1++;</b></p><p><b> count2++;</b></p><p> if(count1>=500)//周期是 500ms</p><p><b> count1=0;</b></p><p> if(count2&
63、gt;=500)//周期是 500ms</p><p><b> count2=0;</b></p><p><b> } </b></p><p> 附錄三:FPGA的1602液晶VHDL程序</p><p> library IEEE;</p><p>
64、use IEEE.STD_LOGIC_1164.ALL;</p><p> use IEEE.STD_LOGIC_ARITH.ALL;</p><p> use IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> --------------------------------------------------------------
65、------------</p><p> entity LCD1602c is</p><p> port(CLK,RST: in std_logic; --狀態(tài)機(jī)時(shí)鐘信號(hào),同時(shí)也是液晶時(shí)鐘信號(hào),其周期應(yīng)該滿足液晶數(shù)據(jù)的建立時(shí)間</p><p> flag_start,flag_stop:in std_logic; --開始和停止信號(hào),使液晶顯示st
66、art和stop并伴隨音樂</p><p> text1:in std_logic_vector(3 downto 0);--將FPGA檢測(cè)到的數(shù)據(jù)傳給單片機(jī)</p><p> speaker:in std_logic; --音樂的輸入端,開始和停止時(shí)才播放音樂</p><p> dududu:in std_logic ; --開vector(3
67、 downto 0); --尋跡板的四路信號(hào)輸入</p><p> --始的時(shí)候響3次嘟嘟聲</p><p> text1_out:out std_logic_vector(3 downto 0); --將尋跡板的四路信號(hào)不做處理直接從FPGA輸出給單片機(jī)</p><p> led:out std_logic_vector(5 downto 0);--設(shè)置尋跡
68、板的四路信號(hào)對(duì)應(yīng)的四個(gè)led燈代表其尋跡狀態(tài) 后兩個(gè)表示開始和停止</p><p> LCD_EN,LCD_RS,LCD_RW : out std_logic;--使能信號(hào)、 寄存器選擇信號(hào) 液晶讀寫信號(hào) </p><p> LCD_Data : out std_logic_vector(7 downto 0) ;--液晶數(shù)據(jù)信號(hào)</p><p> spea
69、ker_out:out std_logic); --音樂輸出</p><p> end LCD1602c;</p><p> --------------------------------------------------------------------------</p><p> architecture Behavioral of LCD160
70、2c is</p><p> type state is (set_cls,set_func,set_DisCon,set_InMode,set_ddram,write_ddram,set_delay); --狀態(tài)機(jī),7種狀態(tài)</p><p> signal C_ST :state; --定義狀態(tài)信號(hào)</p><p> type ram1 is array
71、(0 to 9) of std_logic_vector(7 downto 0); --</p><p> type ram2 is array(0 to 9) of std_logic_vector(7 downto 0);</p><p> type ram3 is array(0 to 9) of std_logic_vector(7 downto 0);</p>
72、<p> type ram4 is array(0 to 9) of std_logic_vector(7 downto 0);</p><p> type ram5 is array(0 to 9) of std_logic_vector(7 downto 0);</p><p> type ram6 is array(0 to 9) of std_logic_vect
73、or(7 downto 0);</p><p> constant textram1:ram1:=(x"80",x"80",x"62",x"61",x"63",x"6B",x"80",x"80",x"80",x"80&quo
74、t;);--back</p><p> constant textram2:ram2:=(x"74",x"75",x"72",x"6E",x"80",x"72",x"69",x"67",x"68",x"74");
75、--turn right</p><p> constant textram3:ram3:=(x"61",x"64",x"76",x"61",x"6E",x"63",x"65",x"80",x"80",x"80")
76、; --advance</p><p> constant textram4:ram4:=(x"74",x"75",x"72",x"6E",x"80",x"6C",x"65",x"66",x"74",x"80");
77、 --turn left</p><p> constant textram5:ram5:=(x"80",x"73",x"74",x"61",x"72",x"74",x"80",x"80",x"80",x"80")
78、; --start</p><p> constant textram6:ram6:=(x"80",x"73",x"74",x"6F",x"70",x"80",x"80",x"80",x"80",x"80"); -
79、-stop</p><p> signal CLK1 : std_logic; --????</p><p> signal cnt1: std_logic_vector(3 downto 0); </p><p> signal a:std_logic_vector(5 downto 0);--檢測(cè)信號(hào)和開始及停止信號(hào)共六位信號(hào)</p>
80、<p> -------------------------------------------------------------------------</p><p><b> begin</b></p><p> a<=text1&flag_start&flag_stop;</p><p>
81、text1_out<=text1;--將四路尋跡板的信號(hào)不作處理直接輸出給單片機(jī)</p><p> LCD_EN <= CLK ; --LCD_RW <= '0' ; --</p><p> process(CLK)</p><p> variable n2:integer range 0 to 499; --常整常量用
82、于從0到500計(jì)數(shù)分頻,可以不要這個(gè)進(jìn)程因?yàn)椴灰h(huán)顯示</p><p><b> begin </b></p><p> if rising_edge(CLK) then --當(dāng)時(shí)鐘上升沿到來時(shí)</p><p> if n2<499 then </p><p><b> n2:=n2+1;&l
83、t;/b></p><p><b> else</b></p><p> n2:=0;Clk1<=not Clk1;--</p><p><b> end if;</b></p><p><b> end if;</b></p><p
84、> end process;</p><p> ------------------------------------------------------------------------------</p><p> PROCESS (CLK,RST)</p><p> variable cnt1: std_logic_vector(3 down
85、to 0);--32</p><p><b> BEGIN</b></p><p> if RST='0' then C_ST<=set_cls;LCD_RS<='0';LCD_RW<='0';--rw=0是寫操作</p><p> LCD_Data<=&quo
86、t;00000001";cnt1:="0000";--清屏指令0x01</p><p> elsif (CLK'event AND CLK ='1') THEN</p><p> CASE C_ST IS --判斷狀態(tài)</p><p> WHEN set_cls =>
87、 --清屏狀態(tài)</p><p> LCD_RS<='0';LCD_RW<='0';LCD_Data<="00000001";--清屏指令0X01</p><p> C_ST <= set_func; --將功能設(shè)置狀態(tài)給c_st信號(hào)</p>
88、<p> WHEN set_func => --功能設(shè)置001DLNF** DL:高電平時(shí)為8位總線,低電平時(shí)為4位總線 </p><p> --N:低電平時(shí)為單行顯示,高電平時(shí)雙行顯示 F: 低電平時(shí)顯示5x7的點(diǎn)陣字符,高電平時(shí)顯示5x10的點(diǎn)陣字符</p><p> LCD_RS<='0';LCD_RW<=
89、9;0';LCD_Data<="00111000"; --cnt1<="00000"; --0x38,表示8位寬度,2行 </p><p> C_ST <=set_DisCon;</p><p> when set_discon=> --顯示開關(guān)控制 </p><p>
90、; LCD_RS<='0';LCD_RW<='0';LCD_Data<="00001100"; --0x0C,表示開顯示,關(guān)光標(biāo),關(guān)閃爍</p><p> C_ST<=set_InMode;</p><p> when set_InMode=> --設(shè)置輸入方式</p>&
91、lt;p> LCD_RS<='0';LCD_RW<='0';LCD_Data<="00000110"; --0x06,AC+1(左移),不移位</p><p> C_ST<=set_ddram;</p><p> when set_ddram=> </p><p
92、> LCD_RS<='0';LCD_RW<='0'; </p><p> if cnt1<"1001" then cnt1:=cnt1+1; --</p><p> else cnt1:="0000";end if; --</p><p> if
93、cnt1<="1001" thenLCD_Data<="10000100"+cnt1; --LCD1602第一行首地址80H+00H</p><p><b> end if;</b></p><p> C_ST<=write_ddram;</p><p> w
94、hen write_ddram=> </p><p> LCD_RS<='1';LCD_RW<='0'; --</p><p> if a="111001" then LCD_Data<=textram2(conv_integer(cnt1));led<="111000";
95、 --向右</p><p> elsif a="110001" then LCD_Data<=textram2(conv_integer(cnt1));led<="011100";--向右</p><p> elsif a="011101" then LCD_Data<=textram4(conv_int
96、eger(cnt1));led<="001100";--向左</p><p> elsif a="001101" then LCD_Data<=textram4(conv_integer(cnt1));led<="110000";--向左</p><p> elsif a="100101"
97、; then LCD_Data<=textram3(conv_integer(cnt1));led<="011000"; --前進(jìn)</p><p> elsif a="111101" then LCD_Data<=textram1(conv_integer(cnt1));led<="111100";--后退</p>
98、;<p> elsif a="100111" then LCD_Data<=textram5(conv_integer(cnt1));led<="011010";--開始</p><p> elsif a="000001" then LCD_Data<=textram6(conv_integer(cnt1));le
99、d<="111101";--結(jié)束</p><p><b> end if;</b></p><p> C_ST<=set_delay;</p><p> when set_delay=> </p><p> LCD_RS<='0';LCD_RW<
100、='0';LCD_Data<="00000000"; --</p><p> C_ST<=set_func; --回到功能設(shè)置狀態(tài),一直循環(huán)下去</p><p> when others => null; </p><p> END CASE; </p>&l
101、t;p><b> END IF;</b></p><p> END PROCESS;</p><p> process(a)</p><p><b> begin</b></p><p><b> case(a)is</b></p><p&g
102、t; when"100110" => speaker_out<=dududu;</p><p> when"000001"=> speaker_out<=speaker;</p><p> when others =>speaker_out<='1';</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 自動(dòng)循跡小車 課程設(shè)計(jì)報(bào)告
- 小車循跡課程設(shè)計(jì)
- 循跡小車課程設(shè)計(jì)
- 課程設(shè)計(jì)—自動(dòng)循跡小車
- 智能小車課程設(shè)計(jì)--智能循跡小車
- 單片機(jī)循跡小車課程設(shè)計(jì)
- 實(shí)時(shí)測(cè)量課程設(shè)計(jì)_自動(dòng)循跡小車
- 嵌入式課程設(shè)計(jì)--智能循跡小車設(shè)計(jì)
- 課程設(shè)計(jì)-- 智能小車循跡控制系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)-自動(dòng)循跡小車
- 綜合電子課程設(shè)計(jì)----智能循跡避障小車
- 智能循跡小車設(shè)計(jì)報(bào)告
- 循跡小車畢業(yè)設(shè)計(jì)--循跡小車設(shè)計(jì)
- 小車課程設(shè)計(jì)報(bào)告
- 智能循跡小車設(shè)計(jì)【開題報(bào)告】
- 尋跡小車課程設(shè)計(jì)報(bào)告
- 智能循跡小車開題報(bào)告
- 無線監(jiān)控小車課程設(shè)計(jì)報(bào)告
- 智能循跡小車實(shí)驗(yàn)報(bào)告
- 紅外避障小車課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論