版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 課程設計</b></p><p> 題 目 光電式速度計 </p><p> 二級學院 </p><p> 專 業(yè) </p>&
2、lt;p> 班 級 </p><p> 學生姓名 </p><p> 學 號 </p><p> 指導教師
3、 </p><p><b> 摘要</b></p><p> 光電式傳感器,是基于光電效應的傳感器,在受到可見光照射后即產(chǎn)生光電效應,將光信號轉(zhuǎn)換成電信號輸出。它除能測量光強之外,還能利用光線的透射、遮擋、反射、干涉等測量多種物理量,如尺寸、位移、速度、溫度等,因而是一種應用極廣泛的重要敏感器件。光電測量時不與被測對象直接接觸,光束
4、的質(zhì)量又近似為零,在測量中不存在摩擦和對被測對象幾乎不施加壓力。因此在許多應用場合,光電式傳感器比其他傳感器有明顯的優(yōu)越性。其缺點是在某些應用方面,光學器件和電子器件價格較貴,并且對測量的環(huán)境條件要求較高。而光電式速度計就是基于光電傳感器將速度的變化轉(zhuǎn)變成光通量的變化,在通過光電轉(zhuǎn)換元件將光通量的變化轉(zhuǎn)換成電量變化,即利用光電脈沖變成電脈沖,通過對電脈沖的一系列計數(shù),換算,即可實現(xiàn)光電式計算速度。</p><p>
5、;<b> 目錄</b></p><p><b> 概述</b></p><p><b> 硬件電路設計及描述</b></p><p> 闡述方案選擇及設計思想</p><p><b> 繪制原理框圖</b></p><p&g
6、t;<b> 簡述工作原理</b></p><p><b> 繪制原理電路圖</b></p><p><b> 軟件設計流程及描述</b></p><p> 繪制系統(tǒng)模塊層次結(jié)構(gòu)圖</p><p><b> 程序流程圖</b></p>
7、<p><b> 源程序代碼</b></p><p><b> 測試</b></p><p><b> 總結(jié)</b></p><p><b> 參考文獻</b></p><p><b> 元器件清單一覽表</b>
8、;</p><p><b> 個人總結(jié)</b></p><p><b> 概述</b></p><p> 本次課程設計我們所做的是光電式速度計,它主要是利用光電式傳感器收到光照射后產(chǎn)生的光電效應,將光信號轉(zhuǎn)換成電信號輸出。通過對輸出的電信號計時,就可計算出在這期間的平均速度。</p><p>
9、 系統(tǒng)利用光電式傳感器設計速度計量系統(tǒng),具有計數(shù)功能,且系統(tǒng)工作滿足速度計的一般要求。</p><p><b> 硬件電路設計及描述</b></p><p> 闡述方案選擇及設計思想</p><p> 我們在選擇方案的時候選擇了用外部中斷0和51的T0定時/計數(shù)器。因為這樣會讓電路更加簡潔,直接用外部中斷0的H/L來判定是否進入中斷。由
10、于外部中斷0的是L觸發(fā),所以當外部中斷0開始輸入L時,T0定時/計數(shù)器開始計時。當外部中斷0重新輸入H時,T0定時/計數(shù)器結(jié)束計時,就得到在INT0期間的時間,因為已知轉(zhuǎn)盤的弧長或者木條的長度l,由v=l/t,就可以得到在INT0期間的平均速度。再通過LCD1602將所得的時間t和速度v輸出到液晶屏上。</p><p><b> 繪制原理框圖</b></p><p>
11、;<b> 簡述工作原理</b></p><p> 如上圖所示,上圖是硬件原理框圖。可以看到硬件是由幾大模塊主成的。晶振電路主要是為51內(nèi)部產(chǎn)生時鐘信號。復位電路是為51回到初始化的狀態(tài)的一種操作,它可以在1602顯示亂碼,或者電路其它部分的上電狀態(tài)與預期不一樣時,按下復位按鈕就可以使51回到初始化的狀態(tài)。1602液晶顯示器是一塊16*2的液晶顯示,它會顯示兩行16個字符或數(shù)字。1602
12、有3個控制位。RS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器,低電平0時選擇指令寄存器。RW為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。E(或EN)端為使能(enable)端,寫操作時,下降沿使能;讀操作時,E高電平有效。VSS一般接地,VDD接電源(+5V),V0液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度)。紅外光電傳感器是將利用光電
13、式傳感器收到光照射后產(chǎn)生的光電效應,將光信號轉(zhuǎn)換成電信號輸出。當轉(zhuǎn)盤或者木條經(jīng)過時,擋住了紅外光電傳感器一直輸給INT0的高電平,觸發(fā)了INT0,T0就開始計時了,當INT0再次接受到H時,T0計時結(jié)束。由v=l/t,就得</p><p><b> 繪制原理電路圖</b></p><p><b> 繪制器件清單列表</b></p>
14、<p> 元器件清單列表見附頁。</p><p><b> 軟件設計流程及描述</b></p><p> 繪制系統(tǒng)模塊層次結(jié)構(gòu)圖</p><p><b> 程序流程圖</b></p><p> 如上圖所示,上圖是主函數(shù)程序流程圖??梢钥吹匠绦蜷_始后,先進行LCD的初始化,再對
15、T0進行初始化。然后是對LCD的清屏,在沒有INT0的時候,LCD顯示no interrupt 0,讓EA=1開外部總中斷。判斷int0_flag==2,計算在INT0期間的時間t,由已知轉(zhuǎn)盤的弧長或者小木條的長度l,故v=l/t。當然在程序中要注意單位的轉(zhuǎn)換,讓最后時間t的單位為s,最后v的單位為m/s。再把v和t的浮點數(shù)轉(zhuǎn)成字符串,保留小數(shù)點后4位。令LCD清屏,1602的第一行顯示t=xxx.xxxx s,第二行顯示v=xxx.x
16、xxx m/s。對t0_num置0,int0_flag置0,EA置1(開總中斷),等待下一次INT0。</p><p><b> 源程序代碼</b></p><p> #include<reg52.h></p><p> #define uchar unsigned char</p><p> #d
17、efine uint unsigned int</p><p> uchar code table0[]="no interrupt 0";</p><p> uchar code table1[]="counting"; </p><p> sbit lcden=P2^6;</p><p>
18、; sbit lcdrs=P2^5;</p><p> sbit lcdrw=P2^7;</p><p> uchar num;</p><p> unsigned int t0_num=0;</p><p> unsigned int tt;</p><p><b> float aa;<
19、;/b></p><p><b> float v;</b></p><p> unsigned int l=10; //10cm</p><p> unsigned char int0_flag=0; //INT0的中斷標志位</p><p> unsigned char t0_max=6500
20、0; //T0的最大中斷次數(shù)</p><p> void delay(uint z)</p><p><b> {</b></p><p><b> uint x,y;</b></p><p> for(x=z;x>0;x--)</p><p> f
21、or(y=110;y>0;y--);</p><p><b> }</b></p><p> void write_com(uchar com) //1602寫命令函數(shù) </p><p><b> {</b></p><p><b> lcdrs=0;</b>
22、;</p><p><b> lcden=0;</b></p><p><b> P0=com;</b></p><p><b> delay(5);</b></p><p><b> lcden=1;</b></p><p&g
23、t;<b> delay(5);</b></p><p><b> lcden=0;</b></p><p><b> }</b></p><p> void write_data(uchar date) //1602寫數(shù)據(jù)函數(shù) </p><p>&l
24、t;b> {</b></p><p><b> lcdrs=1;</b></p><p><b> lcden=0;</b></p><p><b> P0=date;</b></p><p><b> delay(5);</b>
25、;</p><p><b> lcden=1;</b></p><p><b> delay(5);</b></p><p><b> lcden=0;</b></p><p><b> }</b></p><p> v
26、oid ftostr1(double fNum, unsigned char str[],unsigned int dotsize)//將浮點數(shù)轉(zhuǎn)字符串</p><p><b> {</b></p><p> int iSize=0; //記錄字符串長度的數(shù)</p><p> int n=0;
27、 //用作循環(huán)的臨時變量</p><p> unsigned long int i_predot;//小數(shù)點前的數(shù)</p><p> unsigned long int i_afterdot;//小數(shù)點后的數(shù)</p><p> float f_afterdot;//實數(shù)型的小數(shù)部分</p><p> unsigned c
28、har *p=str;//做換向時用的指針</p><p> unsigned char *s=str;//做換向時用的指針</p><p> i_predot=(unsigned long int)fNum;//將小數(shù)點之前的數(shù)變?yōu)檎麛?shù)</p><p> f_afterdot=fNum-i_predot;//單獨取出小數(shù)點之后的數(shù)</p>&l
29、t;p> //根據(jù)設定的要保存的小數(shù)點后的位數(shù),將小數(shù)點后相應的位數(shù)變到小數(shù)點之前</p><p> for(n=dotsize+1;n!=0;n--)</p><p><b> {</b></p><p> f_afterdot=f_afterdot*10;</p><p><b> }<
30、;/b></p><p> i_afterdot=(unsigned long int)f_afterdot;//將小數(shù)點后相應位數(shù)的數(shù)字變?yōu)檎麛?shù)</p><p> n=i_afterdot%10;</p><p><b> n/=5;</b></p><p> i_afterdot/=10;//將i_af
31、terdot恢復到實際要求的小數(shù)位數(shù)</p><p> if(n!=0)//判斷最后一位是否大于或者等于5,并進行四舍五入處理</p><p><b> {</b></p><p> //i_afterdot/=10;//將i_afterdot恢復到實際要求的小數(shù)位數(shù)</p><p> i_afterdot++;
32、</p><p> n=i_afterdot;</p><p><b> }</b></p><p> //先將小數(shù)點后的數(shù)轉(zhuǎn)換為字符串</p><p> n=dotsize;</p><p> while(n!=0)</p><p><b> {&l
33、t;/b></p><p><b> n--;</b></p><p> str[iSize++]=i_afterdot%10+'0';//對10取余并變?yōu)锳SCII碼</p><p> i_afterdot=i_afterdot/10;//對10取商</p><p><b> }
34、</b></p><p> if(dotsize!=0)//小數(shù)點位數(shù)大于零的情況下</p><p> str[iSize++] ='.';//加上小數(shù)點</p><p> //處理小數(shù)點前為0的情況。</p><p> if(i_predot==0)</p><p> str[i
35、Size++]='0';</p><p> //再將小數(shù)點前的數(shù)轉(zhuǎn)換為字符串</p><p> while(i_predot!=0)</p><p><b> {</b></p><p> str[iSize++]=i_predot%10+'0';//對10取余并變?yōu)锳SCII碼&
36、lt;/p><p> i_predot=i_predot/10;//對10取商</p><p><b> }</b></p><p> if(fNum<0)</p><p> str[iSize++]='-';</p><p> str[iSize] ='
37、\0'; //加上字符串結(jié)束標志</p><p> p=str+iSize-1; //將P指針指向字符串結(jié)束標志之前 </p><p> for(;(p-s)>0;p--,s++) //將字符串中存儲的數(shù)調(diào)頭 </p><p><b> { </b></p>&
38、lt;p> *s^=*p; </p><p> *p^=*s; </p><p> *s^=*p; </p><p><b> } </b></p><p><b> } </b></p><p> void init()</p>
39、<p><b> {</b></p><p> lcdrw=0; //寫</p><p><b> lcden=0;</b></p><p> write_com(0x38);</p><p> write_com(0x0c);</p><p>
40、write_com(0x06);</p><p> write_com(0x01);</p><p> write_com(0x80);</p><p><b> }</b></p><p><b> uint i,j;</b></p><p> void int0
41、_fun() interrupt 0 //INT0中斷處理函數(shù)</p><p><b> {</b></p><p> //uint i,j;</p><p> if(int0_flag==0)</p><p><b> {</b></p><p><b&g
42、t; TR0=1;</b></p><p><b> }</b></p><p> int0_flag++;</p><p> if(int0_flag==1)</p><p><b> {</b></p><p> write_com(0x01);&
43、lt;/p><p> write_com(0x80);</p><p> for(j=0;j<8;j++)</p><p><b> {</b></p><p> write_data(table1[j]);</p><p><b> }</b></p>
44、;<p><b> } </b></p><p> if(int0_flag==2)</p><p><b> {</b></p><p><b> TR0=0;</b></p><p><b> EA=0;</b></p&
45、gt;<p><b> }</b></p><p><b> }</b></p><p> void t0_fun() interrupt 1</p><p><b> {</b></p><p> TH0=(65536-1000)/256;</p
46、><p> TL0=(65536-1000)%256;</p><p><b> t0_num++;</b></p><p> if(T0==t0_max)</p><p><b> {</b></p><p> int0_flag=2;</p><
47、p><b> TR0=0;</b></p><p><b> EA=0;</b></p><p><b> }</b></p><p><b> } </b></p><p><b> //主函數(shù)</b>&l
48、t;/p><p> void main ()</p><p><b> { </b></p><p> uchar str1[10];</p><p> uchar str2[10];</p><p> uint i,j; </p><p><b>
49、init(); </b></p><p> EA=0; //初始化中斷</p><p> IT0=1; //外部中斷0,邊沿觸發(fā)</p><p> EX0=1; //允許外部中斷0中斷</p><p> TMOD=0X01; //初始化T0,方式一,16位計數(shù)器</p><p
50、><b> ET0 = 1;</b></p><p> TH0=(65536-1000)/256;</p><p> TL0=(65536-1000)%256; //t0_num --1ms計一次 (即每1mst0_num++)</p><p> //EA=1; //開總中斷</p><
51、p> write_com(0x01);</p><p> write_com(0x80);</p><p> for(i=0;i<14;i++)</p><p><b> {</b></p><p> write_data(table0[i]);</p><p><b&
52、gt; } </b></p><p><b> EA=1; </b></p><p><b> while(1)</b></p><p><b> {</b></p><p> if(int0_flag==2) </p><p>
53、;<b> { </b></p><p> tt=t0_num;</p><p> aa=tt/1000.0;</p><p> v=(10.0*l)/tt;</p><p> ftostr1(aa,str1,4); //小數(shù)點后保留4位</p><p> ftostr1(
54、v,str2,4);</p><p> write_com(0x01);</p><p> write_com(0x80);</p><p> write_data('t');</p><p> write_com(0x80+1);</p><p> write_data('='
55、;);</p><p> for(i=0;i<10;i++)</p><p><b> {</b></p><p> write_data(str1[i]);</p><p><b> }</b></p><p> write_com(0x80+0x0a);&
56、lt;/p><p> write_data('s');</p><p> write_com(0x80+0x40);</p><p> write_data('v');</p><p> write_com(0x80+0x40+1);</p><p> write_data(
57、39;=');</p><p> for(j=0;j<10;j++)</p><p><b> {</b></p><p> write_data(str2[j]);</p><p><b> }</b></p><p> write_com(0x80
58、+0x40+0x0a);</p><p> write_data('m');</p><p> write_com(0x80+0x40+0x0b);</p><p> write_data('/');</p><p> write_com(0x80+0x40+0x0c);</p><
59、p> write_data('s');</p><p><b> t0_num=0;</b></p><p> int0_flag=0;</p><p><b> EA=1; </b></p><p><b> } </b></p>
60、;<p><b> }</b></p><p><b> } </b></p><p><b> 測試</b></p><p> 上電后若沒有觸發(fā)INT0時,顯示的是no interrupt 0(沒有外部中斷0),當觸發(fā)INT0時,顯示counting(正在計數(shù)、計算),
61、當INT0再次回到H(高電平)時,顯示INT0觸發(fā)期間的時間t、速度v的結(jié)果。</p><p><b> INT0沒有觸發(fā)。</b></p><p> INT0觸發(fā),計數(shù)中。</p><p> INT0觸發(fā)結(jié)束,顯示結(jié)果。</p><p><b> 總結(jié)</b></p><
62、;p> 本次課程設計從最開始的方案設定,到采購器件,自己制版,到最后的電路調(diào)試,我們對單片機又有了更深一步的認識。在本次課程設計中,我們也更深一步的了解到仿真跟實物完全是兩回事,我們對1602也有了更深的認識。</p><p> 在軟件方面,我們最開始的方向不對,一直都沒有想到給定長度,導致進度很慢。最后經(jīng)過老師的指點解決了。其次就是我們對定時器的初始化不熟悉,翻閱了以前的書,還去查了很多關(guān)于定時器初始
63、化的例子,解決了定時器的問題。還有就是我們的顯示,最開始因為沒有接觸過1602,后來通過同學和老師我們對它有了一點了解,解決了顯示上的問題。</p><p> 在硬件方面,我們在最后調(diào)試的時候1602始終都還是不顯示,跟仿真完全不一樣,電腦上仿真的時候顯示都沒有問題,可是做到實物上就不出顯示。我們嘗試寫入最簡單的程序就只顯示一個1、2,它還是會顯示,可是寫入我們自己的程序時,1602還是沒反應。還有值得注意的是
64、,在往51燒程序的時候,一定要確保燒程序的軟件跟硬件都是好的。在燒程序的時候,有天我們就是一直不知道燒程序的那個硬件是壞的,一直找不到原因。在做硬件的時候不管是做萬能板,還是PCB,我們發(fā)現(xiàn)用排針接線會減少接線短路,或是其他故障的幾率。</p><p> 這次課程設計唯一的遺憾就是我們把程序燒進51后,1602不顯示,仿真上都可以,找了兩周始終找不到問題。但是如果燒其他程序LCD又有顯示,因為課程設計的時間有限
65、,我們也只能做到這里,但是我們下來后還是會繼續(xù)研究程序的問題,最終希望它能實現(xiàn)功能。</p><p><b> 參考文獻</b></p><p> 51單片機技術(shù)與應用系統(tǒng)開發(fā)案例精選(清華大學出版社)</p><p> 例說51單片機(人民郵電出版社)</p><p> 51單片機開發(fā)與應用技術(shù)詳解(電子工業(yè)出
66、版社)</p><p> 51單片機應用系統(tǒng)典型模塊開發(fā)大全(中國鐵道出版社)</p><p> 51單片機應用開發(fā)范例大全(人民郵電出版社)</p><p> 單片機原理及應用(重慶大學出版社)</p><p> 課程設計元器件清單一覽表</p><p> 題目名稱:光電式速度計</p>&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設計---自行車用速度計
- 自行車里程及速度計課程設計
- 單片機課程設計-自行車里程計速度計
- 單片機課程設計-自行車里程計速度計
- 課程設計---基于壓電加速度計速度測量信號調(diào)理電路設計
- 光電轉(zhuǎn)速計課程設計
- 光電轉(zhuǎn)速計課程設計報告
- 加速度計設計
- 課程設計---光電轉(zhuǎn)速計的設計
- 光電轉(zhuǎn)速計的設計課程設計
- 宇宙速度計的問題
- FBAR微加速度計設計.pdf
- 非接觸式汽車速度計校準裝置研究.pdf
- 自行車里程速度計的設計
- MEMS諧振式加速度計頻率檢測電路設計.pdf
- 加速度計類型簡介
- 三軸諧振式加速度計測控電路的設計.pdf
- colibrys加速度計選型
- 反射式光電開光課程設計
- 高精度加速度計優(yōu)化設計.pdf
評論
0/150
提交評論