版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計任務書</b></p><p> 2013—2014 學年第 一 學期</p><p> 電氣與信息工程 學院(系、部) 自動化 專業(yè) 1102 班級</p><p> 課程名稱: 單片機應用系統(tǒng)
2、 </p><p> 設計題目: 出租車計費系統(tǒng) </p><p> 完成期限:自 2013 年 11 月 11 日至 2013 年 11 月 22 日共 2 周&l
3、t;/p><p> 指導教師(簽字): 年 月 日</p><p> 系(教研室)主任(簽字): 年 月 日</p><p><b> 一、設計思路:</b></p><p> 1、
4、255計數(shù):255可用8位二進制數(shù)表示,故本設計可直接采用可以重裝載的計數(shù)器T0模式二進行計數(shù)。然后對TL1的內容進行相應的二進制---十進制轉換:首先TL1的內容除以64H,所的商就是十進制的百位,然后用余數(shù)除以0AH,所得的商就是十進制數(shù)的十位,余數(shù)即相應的十進制的個位。接著將相應的十進制數(shù)進行譯碼,并在LED數(shù)碼管上顯示出來。每來一個脈沖其顯示的結果加一,直加至255然后T1重新開始計數(shù)。</p><p>
5、 2、50000計數(shù):可用16位二進制數(shù)表示,故本設計可采用可以重裝載的計數(shù)器T0模式二進行計數(shù)。然后進行二進制---十進制轉換:將counter除以100000的商是萬位數(shù)字,然后用余數(shù)除以1000,所得的商就是千位數(shù)字,再將余數(shù)除以100,所得的商是百位數(shù)字,然后將余數(shù)除以10的商是十位數(shù)字,剩下的余數(shù)是個位數(shù)字。最后將十進制數(shù)進行譯碼,并在LED數(shù)碼管上顯示出來。每來一個脈沖其顯示的結果加一,從0加至50000然后重新計數(shù)。&l
6、t;/p><p> 3、出租車計費系統(tǒng):出租車計費系統(tǒng)可以在50000計數(shù)器的基礎上設計,我們采用6位數(shù)碼管顯示,前三位數(shù)碼管顯示里程數(shù),單位分別是十公里、公里、0.1公里;后三位數(shù)碼管顯示累計錢數(shù),單位分別為十元、元、角。設計mile=counter*5并且在公里數(shù)碼管設置顯示小數(shù)點表示0.5km刷新一次。當mile小于等于2km(即起步)時,錢數(shù)等于5元,而當mile大于2km時,里程數(shù)減去2km再乘以0.8,
7、表示每加500米,錢數(shù)乘以0.8元,所得結果加上5元即累計錢數(shù)。最后將十進制數(shù)進行譯碼,并在6個LED數(shù)碼管上顯示出來。每來一個脈沖,其公里顯示的結果加0.5,錢數(shù)顯示的結果如果在2km以內都是5元,以外加0.8元。</p><p> 255計數(shù)程序流程圖</p><p><b> 二、程序調試:</b></p><p> 1. 255計
8、數(shù)程序:</p><p> BIT_COUNT DATA 07FH</p><p> TIMER DATA 07EH</p><p> TIMER1 DATA 07DH</p><p> SHIWEI_DATA DATA 07CH</p><p> BAI DATA 07
9、BH</p><p> SHI DATA 07AH</p><p> GEWEI DATA 079H</p><p> DATA_IN DATA 020H</p><p> DATA_OUT DATA 021H</p><p> KEY BIT P1.3
10、 ;7279的KEY連接于P1.3</p><p> CLK BIT P1.6 ;7279的CLK連接于P1.6</p><p> DAT BIT P1.7 ;7279的DATA連接于P1.7</p><p> CS BIT P2.7 ;7279的CS連接于P2
11、.7</p><p> ORG 000H</p><p> JMP START</p><p> ORG 100H</p><p> START: MOV SP,#2FH ;定義堆棧</p><p> MOV P1,#11011011B
12、;I/O口初始化</p><p> MOV TIMER,#50</p><p> CALL START_DELAY ;7279上電復位后要延時25ms</p><p> MOV DATA_OUT,#10100100B ;發(fā)復位指令</p><p><b> CALL SEND</b><
13、;/p><p> SETB CS ;復位CS為高電平</p><p> MOV TMOD,#05H ;定時器 T0初始化(計數(shù))</p><p> SETB TR0 ;啟動T0</p><p> MAIN: MOV A,TL0 </p>
14、<p> CALL BCD ;數(shù)據BCD轉換</p><p> CALL DISP ;數(shù)碼管顯示</p><p><b> JMP MAIN</b></p><p> ;*******************************************</p><
15、;p> ; 發(fā)送子程序</p><p> ;*******************************************</p><p> SEND: MOV BIT_COUNT,#8</p><p><b> CLR CS</b></p><p>
16、CALL LONG_DELAY</p><p> SEND_LOOP: MOV C,DATA_OUT.7</p><p> MOV DAT,C</p><p><b> SETB CLK</b></p><p> MOV A,DATA_OUT</p><p><b&
17、gt; RL A</b></p><p> MOV DATA_OUT,A</p><p> CALL SHORT_DELAY</p><p><b> CLR CLK</b></p><p> CALL SHORT_DELAY</p><p> DJNZ
18、 BIT_COUNT,SEND_LOOP</p><p><b> CLR DAT</b></p><p><b> RET</b></p><p> ;*******************************************</p><p> ;
19、接收子程序</p><p> ;*******************************************</p><p> RECEIVE: MOV BIT_COUNT,#8</p><p> SETB DAT</p><p> CALL LONG_DELAY</p><p>
20、 RECEIVE_LOOP: SETB CLK</p><p> CALL SHORT_DELAY</p><p> MOV A,DATA_IN</p><p><b> RL A</b></p><p> MOV DATA_IN,A</p><p> MOV
21、 C,DAT</p><p> MOV DATA_IN.0,C</p><p> CLR CLK</p><p> CALL SHORT_DELAY</p><p> DJNZ BIT_COUNT,RECEIVE_LOOP</p><p> CLR DAT</p>&
22、lt;p><b> RET</b></p><p> ;*******************************************</p><p> ; BCD碼調整子程序</p><p> ;*******************************************</p>
23、;<p> BCD: ;BCD碼調整子程序</p><p> MOV B,#64H</p><p><b> DIV AB</b></p><p> MOV BAI,A ;保存百位</p><p><b> MOV A,B</b>&l
24、t;/p><p> MOV B,#0AH</p><p><b> DIV AB</b></p><p> MOV SHI,A ;保存十位</p><p> MOV GEWEI,B ;保存?zhèn)€位</p><p><b> RET</b><
25、/p><p> ;*******************************************</p><p> ; 顯示子程序</p><p> ;*******************************************</p><p> DISP: CLR CS
26、 ;顯示子程序</p><p> MOV DATA_OUT,#10000010B</p><p><b> CALL SEND</b></p><p> MOV DATA_OUT,BAI</p><p><b> CALL SEND</b></p><p&g
27、t; MOV DATA_OUT,#10000001B</p><p><b> CALL SEND</b></p><p> MOV DATA_OUT,SHI</p><p><b> CALL SEND</b></p><p> MOV DATA_OUT,#10000000B<
28、;/p><p><b> CALL SEND</b></p><p> MOV DATA_OUT,GEWEI</p><p><b> CALL SEND</b></p><p><b> SETB CS</b></p><p><b>
29、; RET</b></p><p> ;*******************************************</p><p> ; 長延時子程序</p><p> ;*******************************************</p><p> LONG_
30、DELAY: MOV TIMER,#80</p><p> DELAY_LOOP: DJNZ TIMER,DELAY_LOOP</p><p><b> RET</b></p><p> ;*******************************************</p><p> ;
31、 短延時子程序</p><p> ;*******************************************</p><p> SHORT_DELAY:MOV TIMER,#6</p><p> SHORT_LP: DJNZ TIMER,SHORT_LP</p><p><b> RET
32、</b></p><p> ;*******************************************</p><p> ; 啟動延時子程序</p><p> ;*******************************************</p><p> START_DELA
33、Y: MOV TIMER1,#255</p><p> START_DELAY1:DJNZ TIMER1,START_DELAY1</p><p> DJNZ TIMER,START_DELAY</p><p><b> RET </b></p><p><b> END</b></
34、p><p> 2. 50000計數(shù)程序:</p><p> #include <reg51.h></p><p> #include <intrins.h></p><p> #define uint unsigned int</p><p> #define uchar unsigned
35、 char</p><p> #define CMD0 0x80 </p><p> #define CMD_RESET 0xa4</p><p> sbit KEY=P1^3; //key連接于p1.3</p><p> sbit CLK=P
36、1^6; //clk連接于p1.6</p><p> sbit DAT=P1^7; //dat連接于p1.7</p><p> sbit CS=P2^7; //cs連接于p2.7</p><p> uchar dat
37、a_out,Wan,Qian,Bai,Shi,Ge;</p><p> uint Counter; //定義變量</p><p> void long_delay() //長延時函數(shù)</p><p><b> {</b></p>&l
38、t;p><b> uchar a;</b></p><p> for(a=0;a<=48;a++) </p><p><b> {</b></p><p> _nop_(); ;空指令</p><p><b> }&l
39、t;/b></p><p><b> }</b></p><p> void short_delay() //短延時函數(shù)</p><p><b> {</b></p><p><b> uchar b;</b><
40、/p><p> for(b=0;b<=8;b++)</p><p><b> {</b></p><p><b> _nop_();</b></p><p><b> }</b></p><p><b> }</b>&l
41、t;/p><p> void send_byte(uchar data_out) //發(fā)送函數(shù) </p><p><b> {</b></p><p><b> uchar i;</b></p><p> CS=0; </p>&l
42、t;p> long_delay(); //長延時子程序</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p> if(data_out&0x80)</p><p><b> DAT=1;<
43、;/b></p><p><b> else</b></p><p><b> DAT=0;</b></p><p> CLK=1; //置CLK為高電平</p><p> short_delay();</p><p&g
44、t; CLK=0; //拉低CLK</p><p> short_delay();</p><p> data_out=data_out<<1;</p><p><b> }</b></p><p><b> DAT=0;</b>&
45、lt;/p><p><b> }</b></p><p> void write7279(uchar a, uchar b) //寫入到HD7279</p><p><b> {</b></p><p> send_byte(a);
46、 //發(fā)送字節(jié)</p><p> send_byte(b); </p><p><b> }</b></p><p> void bcd() //數(shù)碼bcd轉換函數(shù) </p><p><b> {
47、</b></p><p> Wan=Counter/10000; //保存萬位</p><p> Qian=(Counter%10000)/1000; //保存千位</p><p> Bai=(Counter%1000)/100; //保存百位</p>&
48、lt;p> Shi=(Counter%100)/10; //保存十位</p><p> Ge=Counter%10; //保存?zhèn)€位</p><p><b> }</b></p><p> void display()
49、 //顯示函數(shù)</p><p><b> {</b></p><p> write7279(CMD0+4,Wan); //萬位數(shù)碼管顯示 </p><p> write7279(CMD0+3,Qian); //千位位數(shù)碼管顯示 </p&g
50、t;<p> write7279(CMD0+2,Bai); //百位位數(shù)碼管顯示 </p><p> write7279(CMD0+1,Shi); //十位位數(shù)碼管顯示 </p><p> write7279(CMD0,Ge); //個位數(shù)碼管顯示 </
51、p><p><b> }</b></p><p> void main() </p><p><b> {</b></p><p> uint t; </p><p>&
52、lt;b> P1=0xdb;</b></p><p> for (t=0;t<0x2000;t++); //上電延時</p><p> send_byte(CMD_RESET); //復位</p><p> CS=1; //復位CS為高
53、電平</p><p> TMOD=0X05; //定時器T0初始化</p><p> TR0=1; //啟動T0</p><p><b> while(1)</b></p><p><b> {</
54、b></p><p> Counter=TH0*256+TL0; //計數(shù) </p><p> if(Counter>=50001) //大于50000,復位</p><p><b> { </b></p><p><b> TH0=0;&l
55、t;/b></p><p><b> TL0=0;</b></p><p> Counter=TH0*256+TL0; </p><p><b> }</b></p><p><b> else</b></p><p> b
56、cd(); // 數(shù)碼BCD轉換 </p><p> display(); //數(shù)碼管顯示</p><p><b> }</b></p><p><b> } </b></p><p> 3、出租車計費系統(tǒng)程序:&
57、lt;/p><p> #include <reg51.h> </p><p> #include <intrins.h></p><p> #define uint unsigned int</p><p> #define uchar unsigned char&
58、lt;/p><p> sbit KEY=P1^3; //key連接于p1.3</p><p> sbit CLK=P1^6; //clk連接于p1.6</p><p> sbit DAT=P1^7;
59、 //dat連接于p1.7</p><p> sbit CS=P2^7; //cs連接于p2.7</p><p> uchar data_out,data_in,shiyuan,yuan,jiao,bai,shi,ge;</p><p> uint Counter,Money,Mile;
60、 //定義變量</p><p> void LONG_DELAY( ) //長延時子程序 </p><p><b> {</b></p><p><b> uchar a;</b></p>
61、<p> for(a=0;a<=48;a++)</p><p><b> {</b></p><p><b> _nop_( );</b></p><p><b> }</b></p><p><b> }</b></p
62、><p> void SHORT_DELAY( ) //短延時子程序</p><p><b> {</b></p><p><b> uchar b;</b></p><p> for(b=0;b<=12;b++)</p><
63、p><b> {</b></p><p><b> _nop_( );</b></p><p><b> }</b></p><p><b> }</b></p><p> void SEND( )
64、 //發(fā)送字節(jié)函數(shù)</p><p><b> {</b></p><p><b> uint i;</b></p><p> CS=0; //cs清零</p><p> CLK=0; //拉低CLK&l
65、t;/p><p> LONG_DELAY();</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p> if(data_out&0x80)</p><p><b> DAT=1;</b></p>
66、;<p><b> else</b></p><p><b> DAT=0;</b></p><p><b> CLK=1;</b></p><p> data_out=data_out<<1;</p><p> SHORT_DELAY();
67、</p><p><b> CLK=0;</b></p><p> SHORT_DELAY();</p><p><b> }</b></p><p><b> }</b></p><p> Void BCD()
68、 //bcd碼轉換</p><p><b> {</b></p><p> bai=(Mile%1000)/100;</p><p> shi=(Mile%100)/10;</p><p> ge=Mile%10;</p><p><b> }</b
69、></p><p> void JIFEI() //計費函數(shù)</p><p><b> {</b></p><p> shiyuan=Money/100; </p><p> yuan=(Money%100)/10;</p>
70、<p> jiao=Money%10;</p><p><b> }</b></p><p> Void DISPLAY( ) //6位數(shù)碼管顯示函數(shù)</p><p><b> {</b></p><p><b> CS=0
71、;</b></p><p> data_out=0x85;</p><p><b> SEND( );</b></p><p> data_out=bai; //十公里位數(shù)碼管顯示</p><p><b> SEND( );</b></p>
72、;<p> data_out=0x84;</p><p><b> SEND( );</b></p><p> data_out=shi+128; //公里位數(shù)碼管顯示,小數(shù)點顯示</p><p><b> SEND( );</b></p><p> d
73、ata_out=0x83;</p><p><b> SEND( );</b></p><p> data_out=ge; //0.1公里位數(shù)碼管顯示</p><p><b> SEND( );</b></p><p> data_out=0x82;</p
74、><p><b> SEND( );</b></p><p> data_out=shiyuan; //十元位數(shù)碼管顯示 </p><p><b> SEND( );</b></p><p> data_out=0x81;</p><p><
75、b> SEND( );</b></p><p> data_out=yuan+128; //元位數(shù)碼管顯示,小數(shù)點顯示</p><p><b> SEND( );</b></p><p> data_out=0x80;</p><p><b> SEND( );
76、</b></p><p> data_out=jiao; //角位數(shù)碼管顯示</p><p><b> SEND( );</b></p><p><b> CS=1;</b></p><p><b> }</b></p&g
77、t;<p> void main() //主函數(shù)</p><p><b> {</b></p><p><b> uint t;</b></p><p> P1=0xdb; //I/O口初始化<
78、/p><p> for(t=0;t<=0x2000;t++) ; //上電延時</p><p> data_out=0xa4; //復位 </p><p> SEND(); //發(fā)送一個字節(jié)</p><
79、p> CS=1; //置CS高電平</p><p> TMOD=0X05; //定時器T0</p><p> TR0=1; //啟動T0</p><p><b> while(1)</b&
80、gt;</p><p><b> {</b></p><p> Counter=TH0*256+TL0;</p><p> Mile=Counter*5; </p><p> if(Mile<=20) //起步價5元</p><
81、p> { Money=50;</p><p><b> }</b></p><p><b> else</b></p><p> Money=50+8*(Counter-4); //大于2公里</p><p> BCD( );
82、 //BCD碼轉換</p><p> JIFEI( ); //計費程序</p><p> DISPLAY( ); //送到數(shù)碼管顯示</p><p><b> }</b></p><p><
83、;b> }</b></p><p><b> 三、心得體會</b></p><p> 為期兩周的單片機課程設計,給我留下了很深刻的印象。而在這兩周的時間里我設計好了計數(shù)器,且能夠運行正常。在平時的理論課學習中,我們對于教材上所講的知識感覺很抽象。在做課程設計時我們從最簡單的實物開始做起,老師先帶領我們認識各個器材與芯片,然后給我們講解HD727
84、9的原理及應用,然后自行設計計數(shù)器程序,最后在老師的幫助下我們嘗試調試,我們會在調試中發(fā)現(xiàn)許多問題,但是我們互相幫助,最終完成調試。同時我們還花費了一些時間尋找課程設計的方法以及一些有關材料,并討論設計。最終,我們在共同的努力以及老師和同學的幫助下,實現(xiàn)了對各個部分的電子設計。</p><p> 自單片機出現(xiàn)至今,單片機種類越來越多,應用的范圍越來越廣,隨之而來的競爭也越來越激烈??v觀20多年來單片機發(fā)展歷程可
85、以看出,單片機技術的發(fā)展以微處理器(MPU)技術及超大規(guī)模集成電路技術的發(fā)展為先導,以廣泛的應用領域拉動,表現(xiàn)出較微處理器更具個性的發(fā)展趨勢。單片機的應用在后PC時代得到了前所未有的發(fā)展,但對技術人員的開發(fā)設計要求也越來越高,所以,不斷地提高自己以適應快速發(fā)展的社會對人才的需求是我們的首要任務。</p><p> 剛接到任務的時候,從沒想到這項看起來不復雜的工作卻是非常需要耐心和精力,更需要我們做很多的工作。在
86、兩個星期后的今天我已明白課程設計對于我們的意義,它不僅僅是讓我們把所學的理論知識與實踐相結合起來,提高自己的實際動手能力和獨立思考的能力,更重要的是同學間的團結,我相信我們得到的也會更多! 同時,在做本次課程設計的過程中,我感觸最深的當屬查閱大量的設計資料了。為了讓自己的設計更加完善,查閱這方面的設計資料是十分必要的,同時也是必不可少的。我學到了如何正確地查閱資料,并且把這些信息轉化到自己的設計程序里。 </
87、p><p> 通過此次課程設計,我得到了以下感悟:</p><p> 在設計程序之前,對所用單片機的內部結構有一個系統(tǒng)的了解,知道該單片機內有哪些資源;要有一個清晰的思路和一個完整的的軟件流程圖;在設計程序時,不能妄想一次就將整個程序設計好,反復修改、不斷改進、在調試中改正錯誤是程序設計的必經之路;</p><p> 二、要養(yǎng)成注釋程序的好習慣,一個程序的完美與否
88、不僅僅是實現(xiàn)功能,而應該讓人一看就能明白你的思路,這樣也為資料的保存和交流提供了方便;在設計課程過程中遇到問題很正常,但我們應該將每次遇到的問題記錄下來,并分析清楚,以免下次再碰到同樣的問題。</p><p> 我覺得做課程設計同時也是對課本知識的鞏固和加強,由于課本上的知識太多,平時課間的學習并不能很好的理解和運用各個元件的功能,而且考試內容有限,所以在這次課程設計過程中,我們了解了很多元件的功能,并且對于其
89、在電路中的使用有了更多的認識。</p><p> 同時一個人不可能完成一個復雜的工作,完成課程設計就是一個課題的研究與設計的過程,我們總會遇到自己不能解決的問題, 這時同學間的互相幫助是我們完成課程設計的一項非常重要的保證。</p><p> 五、通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,才能完全掌握它,才能為
90、我所用。</p><p> 作為一名自動化專業(yè)的大三學生,我覺得做單片機課程設計是十分有意義的,而且是十分必要的。發(fā)現(xiàn)、提出、分析、解決問題和實踐能力的提高都有益于以后的學習、工作和生活。同時。這些能力也不是生來就有的,需要我們在長期的實踐中慢慢培養(yǎng)。通過這次設計,我懂得了學習的重要性,了解到理論知識與實踐相結合的重要意義,學會了堅持、耐心和努力,這將為自己今后的學習和工作做出了最好的榜樣。我覺得單片機的課程設
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設計---出租車計費系統(tǒng)
- 單片機課程設計--出租車計費系統(tǒng)
- 單片機課程設計---出租車計費系統(tǒng)
- 單片機課程設計--出租車計費系統(tǒng)
- 單片機課程設計-- 出租車計費系統(tǒng)
- 單片機課程設計報告---- 出租車計費課程設計
- 單片機課程設計---出租車計費系統(tǒng) (2)
- 單片機課程設計——出租車計費器
- pic單片機的出租車計費系統(tǒng)(1)
- 基于單片機的出租車自動計費設計
- 單片機課程設計報告---對外部脈沖計數(shù)及出租車計費系統(tǒng)的設計
- 單片機課程設計--出租車計價器
- 微機原理單片機課程設計--出租車計價
- 單片機課程設計--出租車計價器
- 單片機課程設計---出租車計價器
- 單片機課程設計--出租車計價器
- pic單片機出租車計費系統(tǒng)大學設計課題論文
- 單片機課程設計--對外部脈沖計數(shù)及出租車計費系統(tǒng)的設計
- 單片機課程設計出租車計價器
- 單片機課程設計----出租車計價器
評論
0/150
提交評論