2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論