版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計報告</b></p><p> 題 目 零件計數器 </p><p><b> 摘要</b></p><p> 本次單片機課程設計我組選擇的題目是零件計數器,零件計數器本身在生產實踐中具有很實際的用途,選擇這個項目可以繞過我們更好的把課堂上學到的課本
2、知識和理論內容與生產實踐結合起來,提高對實際問題的動手操作能力以及解決問題的能力,進一步加深學生對于實際的電子元件電路功能的理解與運用,對于設計實際的實用程序來解決一系列生產生活遇到的問題的能力有著顯著的家加強與提高。零件計數器的功能是通過感應器對零件數量進行中斷計數,并由數碼管動態顯示出來,并通過實用的程序將零件數目通過串口傳送給PC機,還能夠通過實時的檢測電路將之與蜂鳴器連接起來,起到整十報警以及零件打包的功能。</p>
3、<p> 基于單片機構成的零件計數器研究的主要內容包括:AT89C51單片機用何種方式對外部計數脈沖進行計數顯示控制、LED顯示驅動模塊的選擇、如何通過串口與PC機完成實時連接。在這個設計中主要需要解決的問題便是如何提高AT89C51單片機的抗干擾能力以及穩定性。</p><p> 關鍵字:單片機 零件計數器 LED顯示 串口連接</p><p><b>
4、 目錄</b></p><p><b> 第1章 系統設計</b></p><p> 1.1電路框圖·····················
5、·························3</p><p> 1.2軟件設計方框圖及流程圖·····
6、183;··························4</p><p> 1.3電路功能·····
7、;····································
8、83;····6</p><p><b> 第2章 計數器程序</b></p><p> 2.1分段程序及功能··················
9、······················8</p><p> 2.2問題及解決方案·········
10、······························11</p><p> 第3章 實驗結果及討論<
11、/p><p> 3.1實驗結果································
12、183;············11</p><p> 3.2結論···················
13、······························11</p><p> 3.3心得體會·
14、183;····································
15、·······12</p><p> 參考文獻·························
16、;························12</p><p> 附錄········
17、····································
18、3;········13</p><p><b> 系統設計</b></p><p><b> 1.1 電路框圖</b></p><p> 電路總圖與功能如圖所示,每當來一次外部中斷時,內部計數一次,并將數值通過4位共陰數碼管動態顯示出來
19、。而單片機的P2口可以選擇四根不同的數碼管來動態顯示,通過視覺暫留達到同時顯示的效果。同時內部程序檢測每當計數十次時,會形成一個繼電器閉合的零件打包動作,并通過程序使得蜂鳴器發出警報。</p><p> 1.2 軟件設計方框圖及流程圖</p><p> 由于單片機實驗箱的存在,因此硬件部分無需做過多準備,只需根據硬件部分完成軟件設計即可,在此,我們使用基于單片機的C語言編程。C語言是一
20、種高級程序設計語言,其語法簡單適用性強,在單片機編程時很方便。本次設計中使用的C語言編程軟件為Keil。</p><p><b> 軟件設計框圖如下:</b></p><p><b> 流程圖如下:</b></p><p> 編寫零件計數程序時應當注意需要事先的幾個功能,可以分段編寫,最后通過主程序連接。這段程序的重
21、點便是一段循環中斷計數程序,在數值加1的同時要給串口發出同樣的信息,每當計數十次時還需要轉到零件打包以及蜂鳴器程序中執行。</p><p><b> 1.3 電路功能</b></p><p> B部分是單片機的最小系統部分,只有這部分電路正常,整個系統才能工作。單片機為內含8K FLASH程序存儲器的STC89C52RC,EA接高電平;各并行口都加了10K的上拉電
22、阻;晶振為11.0592M。設置了上電復位和手動復位電路。S1為手動復位按鈕。</p><p> C部分電路由4位一體的數碼管LED1、單個數碼管LED2和8個獨立發光二極管L1-L7組成。這3個部分都是共陰結構,并聯在一起,連接在P0口上。LED1用于完成LED動態顯示實驗,各個位選線為P24-P27,段碼由P0口輸出;LED2的COM端接地,完成LED靜態顯示實驗;L1-L7,可以方便地讀出P0輸出的二進制
23、數據,亦可做流水燈實驗。7407在此起驅動作用。</p><p> F部分電路是由555和電容組成的單穩電路。當S_INT0按鈕按下后產生一個低電平單穩信號送單片機的INT0,同時D_PLUS1亮一次,作為外部中斷請求信號。</p><p> I部分電路為蜂鳴器和繼電器電路。</p><p> 蜂鳴器采用9012三極管驅動,其基極接到RD端,當RD端為低電平時
24、,三極管導通,蜂鳴器響。否則關斷。</p><p> 繼電器采用9013三極管驅動,其基極接到WR端,當WRD端為低電平時,三極管關斷,繼電器不吸合,常閉觸點閉合,常開觸點打開,D1熄滅;反之則反。</p><p><b> 第2章 計數器程序</b></p><p> 2.1 分段程序及功能</p><p>
25、*******************開頭及引腳對應程序******************</p><p> #include < reg51.h ></p><p> sbit BEEP=P3^7; </p><p> sbit JDQ=P3^6;</p><p> unsigned int Ledcount=0;&
26、lt;/p><p> unsigned int LedOut[8];</p><p> **********************LED數字碼表********************</p><p> unsigned char code MABIAO[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
27、</p><p> ************************延時函數***********************</p><p> void delay(unsigned int i)</p><p><b> {</b></p><p><b> char j;</b></
28、p><p> for(i;i>0;i--)</p><p> for(j=200;j>0;j--);</p><p><b> }</b></p><p> **********************串口發送函數*********************</p><p> vo
29、id sint()</p><p><b> {</b></p><p> SBUF = Ledcount%10000/1000 + 0x30;</p><p> while(!TI);</p><p><b> TI=0;</b></p><p> SBUF=Le
30、dcount%1000/100+ 0x30;</p><p> while(!TI);</p><p><b> TI=0;</b></p><p> SBUF=Ledcount%100/10+ 0x30;</p><p> while(!TI);</p><p><b> T
31、I=0;</b></p><p> SBUF=Ledcount%10+ 0x30;</p><p> while(!TI);</p><p><b> TI=0;</b></p><p> SBUF='\n';</p><p> while(!TI);<
32、/p><p><b> TI=0;</b></p><p><b> }</b></p><p> **********************LED顯示程序********************</p><p> void display()</p><p><
33、b> { </b></p><p><b> int i;</b></p><p> LedOut[0]=MABIAO[Ledcount%10000/1000];</p><p> LedOut[1]=MABIAO[Ledcount%1000/100];</p><p> LedOut[2]
34、=MABIAO[Ledcount%100/10];</p><p> LedOut[3]=MABIAO[Ledcount%10];</p><p> for(i=0;i<4;i++) </p><p><b> { </b></p><p> P0=LedOut[i];</p><
35、;p> switch(i) </p><p><b> { </b></p><p> case 0:P2=0xef;</p><p> break; </p><p> case 1:P2=0xdf;</p><p> break;
36、 </p><p> case 2:P2=0xbf;</p><p><b> break; </b></p><p> case 3:P2=0x7f;</p><p><b> break; </b></p><p><b> }<
37、/b></p><p> delay(100);</p><p><b> }</b></p><p><b> }</b></p><p> ***********************初始化函數**********************</p><p>
38、 void init()</p><p><b> {</b></p><p> EA=1; //允許中斷</p><p> EX0=1; //允許外部中斷0</p><p> IT0=1; //下降沿觸發</p><p> TR1=1; //啟
39、動T1定時器</p><p> TMOD=0x20; //定時器T1為工作方式2,初值自動重裝八位計數器 </p><p> TL1=0xfd; //預備單元</p><p> TH1=0xfd; //計數初值設定,波特率9600</p><p> SCON=0x50; //串行口為方式1,10步異位收發(1+8+1)<
40、;/p><p> PCON=0x00; //特殊功能寄存器都為0,波特率不加倍</p><p><b> }</b></p><p> *********************INT0中斷函數*********************</p><p> void int0(void) interrupt 0 &l
41、t;/p><p><b> {</b></p><p> Ledcount++; //中斷計數</p><p> if((Ledcount%10==0)&&(Ledcount!=0))</p><p><b> {</b></p><p><
42、b> BEEP=0;</b></p><p> delay(10000);</p><p><b> BEEP=1;</b></p><p><b> JDQ=~JDQ;</b></p><p><b> }</b></p><p
43、> if(Ledcount>9999) //超出計數上限后清零</p><p> Ledcount=0;</p><p><b> sint(); </b></p><p><b> }</b></p><p> *************************主程序
44、************************</p><p> void main(void)</p><p><b> { </b></p><p><b> init();</b></p><p><b> while(1)</b></p>&l
45、t;p><b> { </b></p><p> display();</p><p><b> }</b></p><p><b> }</b></p><p> 2.2問題及解決方案</p><p> 問題1:運用指數函數計數
46、以及選擇四根數碼管顯示,導致程序運行速度過慢,燈光閃爍。</p><p> 解決方案:改進后去掉指數函數,改用每一根數碼管分別使用計算出顯示數值的方法。</p><p> 問題2:計數值達到時蜂鳴器持續響,直到按下第十一次計數按鍵方才停止。</p><p> 解決方案:在蜂鳴器程序中增加BEEP清零和延時語句,可以讓蜂鳴器在計數第十次時只響一聲,并可改變響的時
47、間。</p><p> 第3章 實驗結果及討論</p><p><b> 3.1實驗結果</b></p><p> 本此課程設計,使用到Keil C51編程器、燒寫工具以及串口助手等軟件工具。先是利用Keil軟件編寫程序,編譯無錯后再利用燒寫工具將其燒寫進52單片機中,按下S_INT0按鈕,可得到LED動態顯示數據的變化,本次設計中用到4
48、個數碼管,也就是說,最高顯示零件數目可達9999個。另外,還可以利用串口助手,將零件數目實時傳送給PC機,此結果可在串口助手上觀察到。結果是完全符合所需零件計數器的要求的。至此,可以說本次設計是成功的。</p><p><b> 3.2結論</b></p><p> 本次課程設計的主要特點是利用C51編程實現基于單片機的零件計數器,而非使用匯編語言。在編程中,要學
49、會寫出各種子程序,然后合理的調用它們,還要根據實際顯示結果不斷地去修改和完善,使其最終顯示出符合要求的結果,這不僅考察了我對于單片這門課的學習掌握情況,還考察了我對C語言的基礎知識是否扎實,是否可以將所學的學科融會貫通。此外,還有其他的特點,設計中用到燒寫工具以及串口助手等軟件工具,無需考慮硬件設計,只需完成軟件設計部分。本次課程設計完成了基于單片機的零件計數器的設計,讓我對于單片機的學習有了更深一層的領悟。</p>&l
50、t;p><b> 3.3心得體會</b></p><p> 經過這段時間的學習,我對單片機原理與運用也有了更深層次的了解,同時也對過去所學的知識進行了溫習,對我組設計的課題《零件計數器》所用到的知識也進行了專門的梳理和消化。這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高
51、自己的實際動手能力和獨立思考的能力。通過這次課程設計,我也知道了自己的不足。書本上的知識是死的,只有通過實踐和具體的實例運用,才能真正掌握知識、取得進步。 這次課程設計的經歷使我終身受益,我感受到做任何事情都是要真正用心去做的,也是真正的自己學習的過程和研究的過程,沒有學習就不可能有研究的能力,沒有自己的研究,就不會有所突破。</p><p><b> 參考文獻</b></p>
52、<p> [1] 張有德 趙志英 涂時亮編著,單片微型機原理、應用與實驗.第五版.</p><p> 上海.復旦大學出版社.2006</p><p> [2] 丁海軍、何坤金、王林等編著,程序設計基礎(C語言).北京.北京航空航天大學出版社.2009</p><p><b> 附錄</b></p><
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機計數器課程設計報告
- 單片機課程設計----手動計數器
- 單片機課程設計---倒數計數器
- 倒數計數器單片機課程設計
- 單片機課程設計----語言報數計數器
- 單片機課程設計(語言報數計數器)
- 單片機課程設計--簡易頻率計數器
- 單片機課程設計外部脈沖計數器
- 基于單片機的頻率計數器課程設計
- 單片機課程設計00-99加計數器
- 單片機課程設計帶有lcd顯示的音樂倒數計數器
- 單片機課程設計---基于51單計時計數器系統設計
- 單片機課程設計---基于51單計時計數器系統設計
- 單片機課程設計--00-99加計數器程序設計
- 單片機課程設計-00-99手動計數器設計
- 基于單片機lcd顯示的音樂倒數計數器課程設計論文
- 傳感器課程設計---基于單片機的工業產品自動計數器
- 《單片機原理與應用》課程設計---可編程定時計數器
- 光電計數器課程設計報告
- 基于單片機的紅外自動計數器設計
評論
0/150
提交評論