版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 《單片機(jī)課程設(shè)計(jì)》報(bào)告</p><p> 學(xué) 院: 電子與信息學(xué)院 </p><p> 專業(yè)班級(jí): </p><p> 組 員: </p><p> 申請(qǐng)等級(jí): 良好 </p>&l
2、t;p> 提交日期: 2013-06-26 </p><p><b> 1設(shè)計(jì)思路 </b></p><p><b> 1.1功能要求</b></p><p> 1.1.1分離模塊要求</p><p> 1)設(shè)計(jì)一個(gè)可以顯示1234的顯示電路,并利用單片機(jī)實(shí)現(xiàn)。</
3、p><p> 2)利用按鍵切換,然后顯示I0Y</p><p> 3)按鍵切換的動(dòng)作,全部用串口進(jìn)行通信。</p><p> 設(shè)計(jì)一個(gè)開關(guān),當(dāng)進(jìn)行切換后,程序再進(jìn)入主要要求。</p><p> 1.1.2主模塊要求</p><p> 1) 顯示準(zhǔn)確的北京時(shí)間(時(shí)、分),可用24小時(shí)制式;</p>&
4、lt;p> 2) 隨時(shí)可以調(diào)校時(shí)間。</p><p> 3) 增加公歷日期顯示功能(月、日);</p><p> 4) 隨時(shí)可以調(diào)校月、日;</p><p> 5) 允許通過轉(zhuǎn)換功能鍵轉(zhuǎn)換顯示時(shí)間或日期。</p><p> 6) 所有按鍵需要通過串口自發(fā)自收來調(diào)校各種功能。</p><p><b&
5、gt; 1.2 設(shè)計(jì)思路</b></p><p> 首先,要求有一個(gè)主模塊和一個(gè)分離模塊,可以各自寫程序,然后用一個(gè)按鍵來實(shí)現(xiàn)它們之間的跳轉(zhuǎn),那就首先應(yīng)做按鍵檢測(cè),以判斷選擇的是什么模塊</p><p> 其次是顯示的問題,由于要顯示的內(nèi)容比較多,為了簡(jiǎn)化代碼,擬寫一個(gè)顯示的子程序,只要更改寄存器里的值,顯示出來的東西也隨之改變</p><p>
6、 接下來是北京時(shí)間的顯示以及調(diào)校。要先要有一個(gè)準(zhǔn)確的計(jì)時(shí),然后先實(shí)現(xiàn)秒,60秒進(jìn)1實(shí)現(xiàn)分,60分進(jìn)1實(shí)現(xiàn)時(shí)···以此類推來實(shí)現(xiàn)一個(gè)準(zhǔn)確的北京時(shí)間;調(diào)校的話就是通過按鍵實(shí)現(xiàn)對(duì)時(shí)間進(jìn)行各自的加減</p><p> 再接下來是串口通信的問題,在本次課程設(shè)計(jì),其實(shí)就是自發(fā)自收。首先是要有數(shù)據(jù)可以發(fā)送,明顯就是每按下一個(gè)鍵,就發(fā)送一個(gè)數(shù)據(jù),然后再接收這個(gè)數(shù)據(jù),其次就是每次進(jìn)行串口通信都會(huì)引發(fā)
7、一次中斷,所以應(yīng)該做好數(shù)據(jù)的入棧保護(hù)。</p><p> 最后,綜上分析,應(yīng)該給每個(gè)按鍵設(shè)定一個(gè)編碼,這個(gè)編碼也就是串口通信要發(fā)送和接收的數(shù)據(jù);此外,由于要實(shí)現(xiàn)的功能比較多,跳轉(zhuǎn)容易出錯(cuò),而且為了簡(jiǎn)化代碼,擬把每個(gè)功能與按鍵也用按鍵編碼聯(lián)系起來。即按鍵-串口通信-功能一一對(duì)應(yīng)。</p><p><b> 2 設(shè)計(jì)流程 </b></p><p&g
8、t;<b> 2.1按鍵檢測(cè)</b></p><p> 按鍵檢測(cè)的思路是先檢測(cè)是否有鍵按下,有鍵按下再判斷是哪個(gè)鍵按下。為了判斷準(zhǔn)確,第一次判斷有按鍵按下后,要延時(shí)去抖,再判斷是否仍是有按鍵按下,有則才是真的有按鍵按下。延時(shí)時(shí)間應(yīng)大于5Ms,本程序采用10Ms。</p><p> 程序是參照課本第七章160頁(yè)的例子寫出來的。大致流程如下圖所示:</p>
9、;<p><b> 2.2主模塊</b></p><p> 2.2.1 北京時(shí)間的顯示</p><p> 使用T0定時(shí)器進(jìn)行計(jì)時(shí),設(shè)定為每20毫秒中斷一次。用1區(qū)寄存器的R0來對(duì)中斷次數(shù)進(jìn)行計(jì)數(shù),R2-R7依次存放著年、月、日、時(shí)、分、秒。</p><p> 關(guān)鍵點(diǎn)——數(shù)碼管的顯示是獨(dú)立的,是被調(diào)用而已。定時(shí)器的每次中斷都
10、會(huì)調(diào)用數(shù)碼管的顯示以達(dá)到數(shù)據(jù)刷新的目的。</p><p> 時(shí)間顯示的大致框圖如下所示:</p><p> 2.2.2 時(shí)間的調(diào)校</p><p> 對(duì)于年、月、日、時(shí)、分、秒,各自設(shè)定兩個(gè)鍵來進(jìn)行加1以及減1。</p><p> 關(guān)鍵點(diǎn)——每次調(diào)校完時(shí)間后都要調(diào)到時(shí)間的顯示模塊,以更新數(shù)據(jù)。</p><p>
11、 2.2.3 跳出主模塊</p><p> 設(shè)置一個(gè)按鍵用于跳出主模塊,之后可以 重新選擇分離模塊或者主模塊</p><p><b> 2.3分離模塊</b></p><p> 2.3.1 1234的顯示</p><p> 作為一個(gè)獨(dú)立的模塊,用一個(gè)按鍵進(jìn)行調(diào)用。</p><p>
12、 為了實(shí)現(xiàn)能夠達(dá)到依次顯示1111-2222-3333-4444的效果,用了一個(gè)最簡(jiǎn)單的方法,就是利用主模塊里的秒的個(gè)位數(shù)來實(shí)現(xiàn)。秒的個(gè)位數(shù)為0~9,加個(gè)判斷,只有在個(gè)位數(shù)為1~4的時(shí)候數(shù)碼管才會(huì)顯示,否則不予以顯示,則可以達(dá)到1111-2222-3333-4444的效果。</p><p> 2.3.2 IOY的顯示</p><p> 也是作為一個(gè)獨(dú)立的模塊,用一個(gè)按鍵進(jìn)行調(diào)用。&
13、lt;/p><p> 直接在寄存器放入要顯示的數(shù)據(jù)104,則數(shù)碼管會(huì)直接顯示出來。</p><p> 2.3.3 進(jìn)入主模塊</p><p> 設(shè)置一個(gè)按鍵用于跳進(jìn)主模塊</p><p> 2.4 串口通信以及鍵盤、顯示功能模式編碼</p><p> 2.4.1 串口通信</p><p>
14、<b> 部分參數(shù)設(shè)置如下:</b></p><p> 定時(shí)器T1選擇工作模式2,用于產(chǎn)生波特率。采用8位自動(dòng)重裝模式產(chǎn)生波特率。波特率設(shè)為2400bit/s,預(yù)置值為0F3H。</p><p> 設(shè)置波特率加倍。串口通信選擇方式1,REN=1,允許接收。</p><p> 允許串行口中斷,串行口中斷優(yōu)先級(jí)設(shè)為高優(yōu)先級(jí)。</p&g
15、t;<p> 參照課本第七章183頁(yè)的例子寫出來的。主要是在查鍵程序的基礎(chǔ)上進(jìn)行一些修改以及添加。</p><p> 融入查鍵的串口通信發(fā)送端流程圖如下:</p><p> 接收端中斷服務(wù)流程圖如下所示:</p><p> 2.4.2鍵盤、顯示功能模式編碼</p><p> 單片機(jī)按鍵本身的編碼如下:</p>
16、;<p> S1 0E7H S2 0D7H S3 0B7H S4 77H </p><p> S5 0EBH S6 0DBHS7 0BBH S8 7BH</p><p> S9 0EDH S10 0DDHS11 0BDH S12 7DH</p><p> S
17、13 0EEH S14 0DEHS15 0BEH S16 7EH</p><p><b> 模式編碼如下:</b></p><p> #01H對(duì)應(yīng)MOD1:顯示分、秒</p><p> #02H對(duì)應(yīng)MOD2:顯示日、時(shí)</p><p> #03H對(duì)應(yīng)MOD3:顯示年、月<
18、;/p><p> #04H對(duì)應(yīng)MOD4:跳到分離模塊</p><p> #05H對(duì)應(yīng)MOD5:年加1</p><p> #06H對(duì)應(yīng)MOD6:年減1</p><p> #07H對(duì)應(yīng)MOD7:月加1</p><p> #08H對(duì)應(yīng)MOD8:月減1</p><p>
19、; #09H對(duì)應(yīng)MOD9:日加1</p><p> #0AH對(duì)應(yīng)MOD10:日減1</p><p> #0BH對(duì)應(yīng)MOD11:時(shí)加1</p><p> #0CH對(duì)應(yīng)MOD12:時(shí)減1</p><p> #0DH對(duì)應(yīng)MOD13:分加1</p><p> #0EH對(duì)應(yīng)MOD14:分減1
20、</p><p> #0FH對(duì)應(yīng)MOD15:秒加1</p><p> #010H對(duì)應(yīng)MOD16:秒減1</p><p> #0AAH對(duì)應(yīng)MOD17:分離模塊的顯示1~4</p><p> #0BBH對(duì)應(yīng)MOD18:分離模塊的顯示IOY</p><p> 對(duì)鍵盤按鍵進(jìn)行編碼并與顯示功能模式進(jìn)行一
21、一對(duì)應(yīng)如下:</p><p> S1——MOD1、MOD17(進(jìn)入主模塊之前為MOD17,進(jìn)入之后為MOD1)</p><p> S2——MOD2、MOD18(進(jìn)入主模塊之前為MOD18,進(jìn)入之后為MOD2) </p><p> S3——MOD1、MOD3(進(jìn)入主模塊之前為MOD1,進(jìn)入之后為MOD3) </p><p>
22、S4——MOD4、MOD 18(進(jìn)入主模塊之前為MOD18,進(jìn)入之后為MOD4)</p><p> 以下的均為在主模塊中才有效的按鍵:</p><p> S5——MOD5 S6——MOD6</p><p> S7——MOD7 S8——MOD8</p><p> S9——MOD9 S10——MO
23、D10</p><p> S11——MOD11 S12——MOD12</p><p> S13——MOD13 S14——MOD14</p><p> S15——MOD15 S16——MOD16</p><p><b> 2.5顯示模塊</b></p><
24、;p> 用0區(qū)寄存器存儲(chǔ)要顯示的數(shù)據(jù)以及數(shù)碼管的片選信號(hào):</p><p> R0—R3用于片選數(shù)碼管,1則選中,0則不選中</p><p> R4用于顯示年或者日或者分的十位數(shù)</p><p> R5用于顯示年或者日或者分的個(gè)位</p><p> R6用于顯示月或者時(shí)或者秒的十位數(shù)</p><p>
25、 R7用于顯示月或者時(shí)或者秒的個(gè)位數(shù)</p><p> 根據(jù)單片機(jī)上的595芯片的存儲(chǔ)特點(diǎn),再參考書上關(guān)于數(shù)碼管顯示的代碼寫出顯示的子程序,可直接調(diào)用。</p><p><b> 大致流程圖如下:</b></p><p> 2.6 整個(gè)程序的簡(jiǎn)單流程圖</p><p> 整個(gè)程序的簡(jiǎn)單流程圖如下所示:</p
26、><p><b> 3心得體會(huì)</b></p><p> 3.1以及調(diào)試過程中遇到的問題</p><p> 1)程序比較長(zhǎng),跳轉(zhuǎn)、循環(huán)比較多,出現(xiàn)過很多次的邏輯混亂</p><p> 2)參數(shù)設(shè)置不當(dāng)導(dǎo)致效果出不來或者結(jié)果出錯(cuò)</p><p> 3)也遇到過程序進(jìn)入死循環(huán),死胡同的情況<
27、;/p><p> 4)由于程序塊位置擺放不對(duì),導(dǎo)致跳轉(zhuǎn)出錯(cuò)</p><p> 5)對(duì)匯編語(yǔ)言、單片機(jī)原理以及開發(fā)板結(jié)構(gòu)都不是特別了解,所以部分程序(查鍵、串口通信)是參考課本例子才寫得出來</p><p> 6)對(duì)匯編語(yǔ)言的掌握還不夠好,部分語(yǔ)句使用失當(dāng)</p><p> 7) 對(duì)相關(guān)芯片功能理解不清晰,導(dǎo)致編程中出現(xiàn)邏輯上的錯(cuò)
28、誤而難以察覺8 )在子程序的調(diào)用中,常常會(huì)不自覺地改變了相關(guān)參數(shù),沒有注意好相關(guān)數(shù)據(jù)的保護(hù)</p><p> 9)因?yàn)橐婚_始寫的延時(shí)子程序延時(shí)過長(zhǎng),導(dǎo)致查鍵不靈敏,甚至無法檢測(cè)出按鍵</p><p> 10)程序用到的按鍵比較多,又是進(jìn)行串口通信,有時(shí)導(dǎo)致設(shè)置的時(shí)候匹配混亂</p><p> 11)由于對(duì)Keil uVision3軟件不是很熟悉,導(dǎo)
29、致在調(diào)試程序的時(shí)候費(fèi)了好多時(shí)間,調(diào)試起來也很有難度</p><p><b> 3.2 心得體會(huì)</b></p><p> 1)單片機(jī)課程設(shè)計(jì)過程中遇到了很多的問題,也在不斷的解決問題中提高了自己對(duì)單片機(jī)程序設(shè)計(jì)的認(rèn)識(shí),所有的設(shè)計(jì)都應(yīng)該基于良好的合理的分類分工,在各自負(fù)責(zé)的模塊中搞清楚程序設(shè)計(jì)的原理,邏輯關(guān)系,相關(guān)芯片的工作過程,相關(guān)參數(shù)的設(shè)定要求是開始編程的前提。
30、在編程過程中,如何應(yīng)用一些匯編語(yǔ)言中的小技巧,如‘$’的使用等,可以大大地簡(jiǎn)化程序,如何在遇到問題時(shí)按照一定的邏輯順序進(jìn)行檢驗(yàn)調(diào)試也需要我們?cè)诓粩嗟木幊叹毩?xí)中體會(huì)熟悉。</p><p> 2)這次課程設(shè)計(jì)遇到很多問題,原因大多都是對(duì)單片機(jī)對(duì)匯編理解得不夠透徹,經(jīng)過多次的查閱資料,調(diào)試程序,修改程序,感覺自己對(duì)單片機(jī)、匯編的掌握更進(jìn)一步,所以這次課程設(shè)計(jì)真的收獲很大。也證明了學(xué)編程或者硬件,只學(xué)理論是學(xué)不好的。必
31、須得實(shí)際操作下,才能真正地明白理論,才能真正地掌握一門技術(shù)。</p><p> 3)通過這次單片機(jī)課程設(shè)計(jì),我加深了對(duì)單片機(jī)理論的理解,將理論很好地應(yīng)用到實(shí)際當(dāng)中去。剛開始接觸單片機(jī)的時(shí)候,會(huì)發(fā)現(xiàn)很多不懂,寫程序也會(huì)很煩躁。可是單片機(jī)真的是一個(gè)很有魅力的東西,接觸久了也就喜歡上了寫代碼,調(diào)試,下載,測(cè)試。經(jīng)過這次課程設(shè)計(jì),除了提高了自己的匯編編程能力外,還很大地提高了自己的邏輯分析能力。</p>
32、<p> 在與組員合作、交流想法的時(shí)候,也擴(kuò)展了自己的思路。而在將各自的代碼融合成一個(gè)完整的代碼時(shí),遇到了許多問題,也是在組員的討論下解決的。這讓我意識(shí)到了,團(tuán)隊(duì)合作很重要。</p><p><b> 4代碼</b></p><p><b> ORG 0000H</b></p><p><b>
33、 AJMP FUN1</b></p><p> ORG 000BH;定時(shí)器0中斷入口地址</p><p> AJMP DISPLAY</p><p> ORG 0023H;串行中斷入口地址</p><p><b> JMP SERL</b></p><p&g
34、t;<b> ORG 0030H</b></p><p><b> FUN1:NOP</b></p><p> MOV SP,#60H;SP是堆棧指針</p><p> MOV TMOD,#21H ;TMOD為100001--T0工作模式1,每20毫秒調(diào)</p><p> ;
35、用一次,T1工作模式2</p><p> MOV TH0,#0B1H</p><p> MOV TL0,#0DFH;預(yù)置值設(shè)置,T0定時(shí)器每20Ms溢出一次</p><p> SETB ET0 ;定時(shí)器T0中斷允許,SEB語(yǔ)句是置1</p><p> MOV TH1,#0F3H ;8位自動(dòng)重裝模式,用于產(chǎn)生波
36、特率2400bit/s</p><p> MOV TL1,#0F3H</p><p> MOV PCON,#80H;波特率加倍</p><p> MOV SCON,#50H;設(shè)方式1,REN=1,允許接收</p><p> SETB ES;串行口中斷允許</p><p> SETB E
37、A ;允許全局中斷</p><p> SETB PT0 ;T0中斷級(jí)別最高</p><p> SETB PS;串行口中斷優(yōu)先級(jí)設(shè)為高優(yōu)先級(jí)</p><p> SETB TR0;開啟定時(shí)器T0</p><p> SETB TR1;開啟定時(shí)器T1</p><
38、p> SETB EX0 ;允許外部中斷,INT0</p><p> CLR IT0 ;CLR為置0,INT0 為低電平觸發(fā)</p><p> SETB P3.2 ;P3.2設(shè)置為讀</p><p> FLAG BIT 0;定義位偽指令</p><p> T01:MOV
39、P2,#0F0H;查是否有鍵按下</p><p> MOV A,#0F0H</p><p> CJNE A,P2,T02;有鍵按下就跳轉(zhuǎn)</p><p> AJMP T01;沒有鍵按下就繼續(xù)查</p><p> T02:CALL DELAY_10MS;10ms延時(shí)去抖</p><p
40、> MOV P2,#0F0H;重查有鍵按下</p><p> MOV A,#0F0H</p><p> CJNE A,P2,T03;確定有鍵按下則跳轉(zhuǎn)到T03</p><p> AJMP T01;否則調(diào)回T01繼續(xù)查</p><p> T03:MOV P2,#0FEH;行線1變低</p>
41、;<p> MOV A,#0FEH</p><p> ANL A,P2;邏輯與</p><p> CJNE A,#0FEH,YES;查哪個(gè)鍵按下,有鍵按下則跳轉(zhuǎn)到Y(jié)ES</p><p> MOV P2,#0FDH</p><p> MOV A,#0FDH</p><p> ANL
42、A,P2;行線2變低</p><p> CJNE A,#0FDH,YES</p><p> MOV P2,#0FBH</p><p> MOV A,#0FBH</p><p> ANL A,P2;行線3變低</p><p> CJNE A,#0FBH,YES</p><p&
43、gt; MOV P2,#0F7H</p><p> MOV A,#0F7H</p><p> ANL A,P2;行線4變低</p><p> CJNE A,#0F7H,YES</p><p> AJMP T01;執(zhí)行到這代表都沒有鍵按下,就跳回T01</p><p> YES:CALL V
44、ALUE</p><p> T04:MOVA,#0F0H;查鍵釋放</p><p><b> ANL A,P2</b></p><p> CJNE A,#0F0H,T04;仍有按鍵仍有效則跳到T04繼續(xù)查鍵釋放</p><p> CALL DELAY_10MS;10ms延時(shí)去抖</p&g
45、t;<p> MOV A,#0F0H</p><p><b> ANL A,P2</b></p><p> CJNE A,#0F0H,T04;重新查鍵釋放</p><p> CLR P1.3;按鍵會(huì)有聲音</p><p> CALL DELAY_10MS</p><
46、p> SETB P1.3</p><p> AJMP T01;按鍵已經(jīng)釋放,則跳回T01</p><p><b> VALUE:</b></p><p> ;----------------------------------------------------------------------</p&
47、gt;<p> ;按鍵對(duì)應(yīng)編碼:后面VALUE也適用這個(gè)編碼</p><p> ;S10E7H S20D7HS30B7HS477H </p><p> ;S50EBHS60DBHS70BBHS87BH</p><p> ;S90EDHS100DDHS110BDHS127DH</p&g
48、t;<p> ;S130EEHS140DEHS150BEHS167EH</p><p> ;----------------------------------------------------------------------</p><p><b> NOP</b></p><p> CJNE A,#
49、0E7H,K2;按鍵1按下</p><p> MOV A,#0AAH</p><p> MOV 55H,#01H</p><p> MOV 56H,#00H</p><p> MOV SBUF,A</p><p><b> JMP S01</b></p><p&
50、gt; K2:CJNE A,#0D7H,K3;按鍵3按下</p><p> MOV A,#0BBH</p><p> MOV SBUF,A</p><p><b> JMP S01</b></p><p> K3:CJNE A,#0B7H,K4;按鍵2按下</p><p&
51、gt;<b> MOV A,#01</b></p><p> MOV SBUF,A</p><p> JMP FUN2</p><p> K4:CJNE A,#77H,OUT;按鍵4按下;K4和K2選擇的模式一樣,設(shè)置K4只</p><p> ;是為了能正常顯示,避免程序走進(jìn)死胡同</p&
52、gt;<p> MOV A,#0BBH</p><p> MOV SBUF,A</p><p> JMP S01</p><p><b> OUT:RET</b></p><p> FUN2:SETB PSW.3</p><p> CLR PSW.4;選
53、擇工作寄存器1區(qū),1區(qū)的R2-R7用于存數(shù),R0</p><p> ;用于計(jì)數(shù),R1用于選模式(來自串行數(shù)據(jù))</p><p><b> MOV R0,#0</b></p><p> MOV R1,#01</p><p> MOV R2,#13 ;代表2013年</p>&l
54、t;p> MOV R3,#06;代表6月</p><p> MOV R4,#22;代表22日</p><p> MOV R5,#14;代表14點(diǎn)</p><p> MOV R6,#05;代表05分</p><p> MOV R7,#00;代表00秒</p><p>
55、; TT01:MOV P2,#0F0H</p><p> MOV A,#0F0H</p><p> CJNE A,P2,TT02</p><p><b> AJMP TT01</b></p><p> TT02:CALL DELAY_10MS</p><p> MOV P2
56、,#0F0H</p><p> MOV A,#0F0H</p><p> CJNE A,P2,TT03</p><p><b> AJMP TT01</b></p><p> TT03:MOV P2,#0FEH</p><p> MOV A,#0FEH</p><p
57、><b> ANL A,P2</b></p><p> CJNE A,#0FEH,YES1</p><p> MOV P2,#0FDH</p><p> MOV A,#0FDH</p><p><b> ANL A,P2</b></p><p> CJNE
58、A,#0FDH,YES1</p><p> MOV P2,#0FBH</p><p> MOV A,#0FBH</p><p><b> ANL A,P2</b></p><p> CJNE A,#0FBH,YES1</p><p> MOV P2,#0F7H</p>&l
59、t;p> MOV A,#0F7H</p><p><b> ANL A,P2</b></p><p> CJNE A,#0F7H,YES1</p><p><b> AJMP TT01</b></p><p> YES1:CALL VALUE1</p><p&
60、gt; TT04:MOVA,#0F0H</p><p><b> ANL A,P2</b></p><p> CJNE A,#0F0H,TT04</p><p> CALL DELAY_10MS</p><p> MOV A,#0F0H</p><p><b> ANL
61、A,P2</b></p><p> CJNE A,#0F0H,TT04</p><p><b> CLR P1.3</b></p><p> CALL DELAY_10MS</p><p> SETB P1.3</p><p><b> AJMP TT01<
62、;/b></p><p> ;**************************************************************************</p><p> VALUE1:;查鍵值子程序</p><p><b> NOP</b></p><p> C
63、JNE A,#0E7H,KK2;按鍵1按下</p><p><b> MOV A,#01</b></p><p> MOV SBUF,A;SBUF是串行數(shù)據(jù)緩沖器,這個(gè)指令是訪問發(fā)送數(shù)</p><p> ;據(jù)寄存器(寫方式)。A是要發(fā)送的數(shù)據(jù)。</p><p> JMP S01;S01是判斷
64、數(shù)據(jù)是否發(fā)送完畢</p><p> KK2:CJNE A,#0D7H,KK3;按鍵2按下</p><p><b> MOV A,#02</b></p><p> MOV SBUF,A</p><p><b> JMP S01</b></p><p> KK3:
65、CJNE A,#0B7H,KK4;按鍵3按下</p><p><b> MOV A,#03</b></p><p> MOV SBUF,A</p><p><b> JMP S01</b></p><p> KK4:CJNE A,#77H,KK5;按鍵4按下</p>
66、<p> MOV A,#0BBH</p><p> MOV SBUF,A</p><p> JMP FUN1;按下鍵4則跳轉(zhuǎn)到FUN1(分離模塊)</p><p> KK5:CJNE A,#0EBH,KK6;按鍵5按下</p><p><b> MOV A,#05</b></p
67、><p> MOV SBUF,A</p><p><b> JMP S01</b></p><p> KK6:CJNE A,#0DBH,KK7;按鍵6按下</p><p><b> MOV A,#06</b></p><p> MOV SBUF,A</p&g
68、t;<p><b> JMP S01</b></p><p> KK7:CJNE A,#0BBH,KK8;按鍵7按下</p><p><b> MOV A,#07</b></p><p> MOV SBUF,A</p><p><b> JMP S01<
69、/b></p><p> KK8:CJNE A,#7BH,KK9;按鍵8按下</p><p><b> MOV A,#08</b></p><p> MOV SBUF,A</p><p><b> JMP S01</b></p><p> KK9:CJ
70、NE A,#0EDH,KK10;按鍵9按下</p><p><b> MOV A,#09</b></p><p> MOV SBUF,A</p><p><b> JMP S01</b></p><p> KK10:CJNE A,#0DDH,KK11;按鍵10按下</p>
71、;<p><b> MOV A,#10</b></p><p> MOV SBUF,A</p><p><b> JMP S01</b></p><p> KK11:CJNE A,#0BDH,KK12;按鍵11按下</p><p><b> MOV A,#11
72、</b></p><p> MOV SBUF,A</p><p><b> JMP S01</b></p><p> KK12:CJNE A,#7DH,KK13;按鍵12按下</p><p><b> MOV A,#12</b></p><p>
73、MOV SBUF,A</p><p><b> JMP S01</b></p><p> KK13:CJNE A,#0EEH,KK14;按鍵13按下</p><p><b> MOV A,#13</b></p><p> MOV SBUF,A</p><p>&
74、lt;b> JMP S01</b></p><p> KK14:CJNE A,#0DEH,KK15;按鍵14按下</p><p><b> MOV A,#14</b></p><p> MOV SBUF,A</p><p><b> JMP S01</b></
75、p><p> KK15:CJNE A,#0BEH,KK16;按鍵15按下</p><p><b> MOV A,#15</b></p><p> MOV SBUF,A</p><p><b> JMP S01</b></p><p> KK16:CJNE A,#
76、7EH,OUT1;按鍵16按下</p><p><b> MOV A,#16</b></p><p> MOV SBUF,A</p><p><b> JMP S01</b></p><p> OUT1:RET;結(jié)束子程序</p><p> S01
77、:JNB TI,S01;等待發(fā)送完標(biāo)志。如果(TI)=0,轉(zhuǎn)至S01,否則</p><p> ;往下執(zhí)行。若有數(shù)據(jù)發(fā)送,則特殊功能寄存器中</p><p> ;的標(biāo)志TI被硬件置位,向CPU申請(qǐng)中斷</p><p> CLR TI;執(zhí)行到這里證明發(fā)送完成,之后得對(duì)TI進(jìn)行軟件</p><p><b> ;清零
78、</b></p><p><b> AJMP OUT</b></p><p> ;**************************************************************************</p><p> ;數(shù)碼管顯示模塊0~R3為第1~4個(gè)數(shù)碼管的片選,R4~R7為第1~4個(gè)數(shù)碼
79、管顯示的數(shù)值</p><p> ;對(duì)應(yīng)為TABLE中的值。程序狀態(tài)字PSW中RS1 = 0,RS0 = 0由T0每20ms調(diào)用一次</p><p> DISPLAY:PUSH ACC</p><p> PUSH PSW;對(duì)PSW,ACC進(jìn)行入棧保護(hù)</p><p> MOV TH0,#0B1H</p><p
80、> MOV TL0,#0DFH</p><p> SETB PSW.3</p><p><b> CLR PSW.4</b></p><p> MOD1:CJNE R1,#01H,MOD2 ;顯示模式1,顯示分,秒</p><p> MOV A,R7;1區(qū)的R7存著初始秒數(shù),把秒數(shù)賦給
81、A</p><p><b> CLR PSW.3</b></p><p><b> CLR PSW.4</b></p><p><b> MOV B,#10</b></p><p> DIV AB;將初始秒數(shù)的十位數(shù)存于A,個(gè)位數(shù)存于B</p>
82、<p> MOV R7,B;B的值賦給0區(qū)的R7,R4、5、6、7分別對(duì)應(yīng)著4</p><p><b> ;個(gè)數(shù)碼管</b></p><p> MOV R6,A;A是值賦給0區(qū)的R6</p><p> SETB PSW.3</p><p> MOV A,R6;1區(qū)的R6存著初始
83、分鐘數(shù),把分鐘數(shù)賦給A</p><p><b> CLR PSW.3</b></p><p><b> MOV B,#10</b></p><p><b> DIV AB</b></p><p> MOV R5,B;將初始分鐘數(shù)的個(gè)位數(shù)存于B</p>
84、<p> MOV R4,A;將初始分鐘數(shù)的十位數(shù)存于A</p><p> MOV R3,#01H</p><p> MOV R2,#01H</p><p> MOV R1,#01H</p><p> MOV R0,#01H;選中四個(gè)數(shù)碼管,都用于顯示</p><p>
85、 JMP CALCULATE;數(shù)值存儲(chǔ)完畢后,進(jìn)行計(jì)數(shù)(多久要加1秒,多</p><p><b> ;久要進(jìn)位)</b></p><p> MOD2:CJNE R1,#02H,MOD3 ;顯示模式1,顯示日,時(shí)</p><p> MOV A,R5;1區(qū)的R5存著初始小時(shí)數(shù),把小時(shí)數(shù)賦給A</p>
86、<p><b> CLR PSW.3</b></p><p><b> CLR PSW.4</b></p><p><b> MOV B,#10</b></p><p><b> DIV AB</b></p><p><b>
87、 MOV R7,B</b></p><p><b> MOV R6,A</b></p><p> SETB PSW.3</p><p> MOV A,R4;1區(qū)的R4存著初始日數(shù),把日數(shù)賦給A</p><p> CLR PSW.3</p><p><b
88、> MOV B,#10</b></p><p><b> DIV AB</b></p><p><b> MOV R5,B</b></p><p><b> MOV R4,A</b></p><p> MOV R3,#01H</p>&
89、lt;p> MOV R2,#01H</p><p> MOV R1,#01H</p><p> MOV R0,#01H</p><p> JMP CALCULATE</p><p> MOD3:CJNE R1,#03H,MOD4 ;顯示模式1,顯示年,月</p><p> MOV A
90、,R3;1區(qū)的R3存著初始月數(shù),把月數(shù)賦給A</p><p><b> CLR PSW.3</b></p><p><b> CLR PSW.4</b></p><p><b> MOV B,#10</b></p><p><b> DIV AB<
91、;/b></p><p><b> MOV R7,B</b></p><p><b> MOV R6,A</b></p><p> SETB PSW.3</p><p> MOV A,R2;1區(qū)的R2存著初始年數(shù),把年數(shù)賦給A</p><p><b
92、> CLR PSW.3</b></p><p><b> MOV B,#10</b></p><p><b> DIV AB</b></p><p><b> MOV R5,B</b></p><p><b> MOV R4,A</b
93、></p><p> MOV R3,#01H</p><p> MOV R2,#01H</p><p> MOV R1,#01H</p><p> MOV R0,#01H</p><p> JMP CALCULATE</p><p> MOD4:CJNE R1,#04H,MO
94、D5</p><p> JMP FUN1;跳回FUN1(分離模塊)</p><p> MOD5:CJNE R1,#05H,MOD6</p><p> SETB PSW.3</p><p><b> CLR PSW.4</b></p><p> INC R2;年數(shù)
95、加1</p><p> MOV R1,#03H;年數(shù)變化之后,選擇MOD3將年數(shù)存入寄存器并</p><p><b> ;顯示</b></p><p> CJNE R2,#100,MOD6;年數(shù)的顯示上限為99</p><p> MOV R2,#0;100的時(shí)候清零</p><
96、;p> JMP CALCULATE</p><p> MOD6:CJNE R1,#06H,MOD7</p><p> SETB PSW.3</p><p><b> CLR PSW.4</b></p><p> DEC R2;年數(shù)減1</p><p> MOV R1,
97、#03H</p><p> CJNE R2,#0FFH,MOD7;0-1=0FFH</p><p> MOV R2,#99</p><p> JMP CALCULATE</p><p> MOD7:CJNE R1,#07H,MOD8</p><p> SETB PSW.3</p><
98、;p><b> CLR PSW.4</b></p><p> INC R3;月數(shù)加1</p><p> MOV R1,#03H</p><p> CJNE R3,#13,MOD8</p><p><b> MOV R3,#1</b></p><p>
99、 JMP CALCULATE</p><p> MOD8:CJNE R1,#08H,MOD9</p><p> SETB PSW.3</p><p><b> CLR PSW.4</b></p><p> DEC R3;月數(shù)減1</p><p> MOV R1,#03H&l
100、t;/p><p> CJNE R3,#0FFH,MOD9</p><p> MOV R3,#12</p><p> JMP CALCULATE</p><p> MOD9:CJNE R1,#09H,MOD10</p><p> SETB PSW.3</p><p><b>
101、CLR PSW.4</b></p><p> INC R4;日數(shù)加1</p><p> MOV R1,#02H</p><p> Q1:CJNE R3,#1,Q2;Q1~Q12是判斷當(dāng)前是哪個(gè)月</p><p><b> JMP M3</b></p><p>
102、; Q2:CJNE R3,#2,Q3</p><p><b> MOV A,R2</b></p><p><b> MOV B,#4</b></p><p><b> DIV AB</b></p><p><b> MOV A,B</b>&l
103、t;/p><p> CJNE A,#0,M4</p><p><b> JMP M1</b></p><p> Q3:CJNE R3,#3,Q4</p><p><b> JMP M3</b></p><p> Q4:CJNE R3,#4,Q5</p>
104、;<p><b> JMP M2</b></p><p> Q5:CJNE R3,#5,Q6</p><p><b> JMP M3</b></p><p> Q6:CJNE R3,#6,Q7</p><p><b> JMP M2</b><
105、;/p><p> Q7:CJNE R3,#7,Q8</p><p><b> JMP M3</b></p><p> Q8:CJNE R3,#8,Q9</p><p><b> JMP M3</b></p><p> Q9:CJNE R3,#9,Q10<
106、;/p><p><b> JMP M2</b></p><p> Q10:CJNE R3,#10,Q11</p><p><b> JMP M3</b></p><p> Q11:CJNE R3,#11,Q12</p><p><b> JMP M
107、2</b></p><p> Q12:CJNE R3,#12,Q1</p><p><b> JMP M3</b></p><p> M1:CJNE R4,#29,MOD10;M1~M4是對(duì)有不同天數(shù)的月份獨(dú)自操作</p><p><b> MOV R4,#1</b>&
108、lt;/p><p> M2:CJNE R4,#31,MOD10</p><p><b> MOV R4,#1</b></p><p> M3:CJNE R4,#32,MOD10</p><p><b> MOV R4,#1</b></p><p> M4:C
109、JNE R4,#30,MOD10</p><p><b> MOV R4,#1</b></p><p> JMP CALCULATE</p><p> MOD10:CJNE R1,#0AH,MOD11</p><p> SETB PSW.3</p><p><b> CLR
110、PSW.4</b></p><p> DEC R4;日數(shù)減1</p><p> MOV R1,#02H</p><p> CJNE R4,#0FFH,MOD11</p><p> QQ1:CJNE R3,#1,QQ2;Q1~Q12是判斷當(dāng)前是哪個(gè)月</p><p> MOV R4
111、,#31</p><p> QQ2:CJNE R3,#2,QQ3</p><p><b> MOV A,R2</b></p><p><b> MOV B,#4</b></p><p><b> DIV AB</b></p><p><b
112、> MOV A,B</b></p><p> CJNE A,#0,QQ29</p><p><b> JMP QQ28</b></p><p> QQ28:MOV R4,#28</p><p> JMP CALCULATE</p><p> QQ29:MOV R4
113、,#29</p><p> JMP CALCULATE</p><p> QQ3:CJNE R3,#3,QQ4</p><p> MOV R4,#31</p><p> QQ4:CJNE R3,#4,QQ5</p><p> MOV R4,#30</p><p> QQ5:CJ
114、NE R3,#5,QQ6</p><p> MOV R4,#31</p><p> QQ6:CJNE R3,#6,QQ7</p><p> MOV R4,#30</p><p> QQ7:CJNE R3,#7,QQ8</p><p> MOV R4,#31</p><p> QQ
115、8:CJNE R3,#8,QQ9</p><p> MOV R4,#31</p><p> QQ9:CJNE R3,#9,QQ10</p><p> MOV R4,#30</p><p> QQ10:CJNE R3,#10,QQ11</p><p> MOV R4,#31</p><
116、p> QQ11:CJNE R3,#11,QQ12</p><p> MOV R4,#30</p><p> QQ12:CJNE R3,#12,Q</p><p> MOV R4,#31</p><p> Q:JMP CALCULATE</p><p> MOD11:CJNE R1,#0BH,
117、MOD12</p><p> SETB PSW.3</p><p><b> CLR PSW.4</b></p><p> INC R5;小時(shí)數(shù)加1</p><p> MOV R1,#02H</p><p> CJNE R5,#24,MOD12</p><p
118、><b> MOV R5,#0</b></p><p> JMP CALCULATE</p><p> MOD12:CJNE R1,#0CH,MOD13</p><p> SETB PSW.3</p><p><b> CLR PSW.4</b></p><p&
119、gt; DEC R5;小時(shí)數(shù)減1</p><p> MOV R1,#02H</p><p> CJNE R5,#0FFH,MOD13</p><p> MOV R5,#24</p><p> JMP CALCULATE</p><p> MOD13:CJNE R1,#0DH,MOD14</p
120、><p> SETB PSW.3</p><p><b> CLR PSW.4</b></p><p> INC R6;分?jǐn)?shù)加1</p><p> MOV R1,#01H</p><p> CJNE R6,#60,MOD14</p><p><b>
121、 MOV R6,#0</b></p><p> JMP CALCULATE</p><p> MOD14:CJNE R1,#0EH,MOD15</p><p> SETB PSW.3</p><p><b> CLR PSW.4</b></p><p> DEC R6
122、;分?jǐn)?shù)減1</p><p> MOV R1,#01H</p><p> CJNE R6,#0FFH,MOD15</p><p> MOV R6,#60</p><p> JMP CALCULATE</p><p> MOD15:CJNE R1,#0FH,MOD16</p><p>
123、; SETB PSW.3</p><p><b> CLR PSW.4</b></p><p> INC R7;秒數(shù)加1</p><p> MOV R1,#01H</p><p> CJNE R7,#60,MOD16</p><p><b> MOV R7,#0
124、</b></p><p> JMP CALCULATE</p><p> MOD16:CJNE R1,#10H,MOD17</p><p> SETB PSW.3</p><p><b> CLR PSW.4</b></p><p> DEC R7;秒數(shù)減1&l
125、t;/p><p> MOV R1,#01H</p><p> CJNE R7,#0FFH,CALCULATE</p><p> MOV R7,#60</p><p> JMP CALCULATE</p><p> MOD17:CJNE R1,#0AAH,MOD18;分離模塊的顯示1~4</p>
126、<p> LOOP1:MOV A,R7;用主模塊的秒來控制1~4的循環(huán)顯示</p><p> CJNE A,55H,LOOP2</p><p><b> JMP LOOP3</b></p><p> LOOP2:INC 56H</p><p><b> MOV 55H,A&l
127、t;/b></p><p><b> CLR PSW.3</b></p><p><b> CLR PSW.4</b></p><p> MOV R7,56H</p><p> MOV R6,56H</p><p> MOV R5,56H</p>
128、<p> MOV R4,56H</p><p><b> MOV A,56H</b></p><p> CJNE A,#04,LOOP3;只循環(huán)顯示1、2、3、4</p><p> MOV 56H,#00</p><p> LOOP3:CLR PSW.3</p><p&g
129、t;<b> CLR PSW.4</b></p><p> MOV R3,#01H</p><p> MOV R2,#01H</p><p> MOV R1,#01H</p><p> MOV R0,#01H;選中4個(gè)數(shù)碼管</p><p> JMP CALCULATE<
130、/p><p> MOD18:CJNE R1,#0BBH,CALCULATE;分離模塊的顯示IOY</p><p><b> CLR PSW.3</b></p><p><b> CLR PSW.4</b></p><p> MOV R0,#00</p><p> M
131、OV R1,#01</p><p> MOV R2,#01</p><p> MOV R3,#01;選中后三個(gè)數(shù)碼管</p><p> MOV R5,#01</p><p> MOV R6,#00</p><p> MOV R7,#04;要顯示的數(shù)據(jù)</p><p>
132、 JMP CALCULATE</p><p> CALCULATE:SETB PSW.3</p><p> CLR PSW.4;1區(qū)的R0用于計(jì)數(shù)</p><p> INC R0;計(jì)數(shù)器的周期為20ms</p><p> CJNE R0,#50,START;R0不等于50代表秒數(shù)不用加1,則跳到START<
133、/p><p> MOV R0,#0;50個(gè)20ms為1s,之后進(jìn)行清零,重新計(jì)數(shù)</p><p> INC R7;秒數(shù)+1</p><p> //SETB P1.3</p><p> CJNE R7,#60,START;R7不等于60代表分?jǐn)?shù)不用加1</p><p><b> MO
134、V R7,#0</b></p><p> INC R6;分?jǐn)?shù)加1</p><p> //CLR P1.3</p><p> CJNE R6,#60,START</p><p><b> MOV R6,#0</b></p><p> INC R5;小時(shí)數(shù)加1
135、</p><p> CJNE R5,#24,START</p><p><b> MOV R5,#0</b></p><p> INC R4;日數(shù)加1</p><p> CJNE R4,#30,START</p><p><b> MOV R4,#0</b>
136、;</p><p> INC R3;月數(shù)加1</p><p> CJNE R3,#12,START</p><p> INC R2;年數(shù)加1</p><p> START:CLR PSW.3</p><p><b> CLR PSW.4</b></p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- lcd顯示設(shè)計(jì)單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--- 單片機(jī)動(dòng)態(tài)掃描顯示
- 單片機(jī)課程設(shè)計(jì)(led顯示管)
- 單片機(jī)lcd系統(tǒng)顯示課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---單片機(jī)數(shù)字顯示溫度計(jì)
- 壓力顯示課程設(shè)計(jì)--基于51單片機(jī)的壓力測(cè)量電路
- 單片機(jī)課程設(shè)計(jì)--矩陣鍵盤 led顯示
- led顯示屏單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)----led點(diǎn)陣漢字顯示
- 單片機(jī)課程設(shè)計(jì)-智能溫度控制顯示
- 單片機(jī)課程設(shè)計(jì)--動(dòng)態(tài)數(shù)碼顯示技術(shù)
- 旋轉(zhuǎn)led顯示旋轉(zhuǎn)單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)lcd顯示屏設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于51單片機(jī)的電子顯示屏設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)(實(shí)驗(yàn))--led顯示游戲機(jī)
- 單片機(jī)課程設(shè)計(jì)--漢字液晶顯示器顯示
- 單片機(jī)顯示系統(tǒng)課程設(shè)計(jì)報(bào)告-基于51內(nèi)核的單片機(jī)為主控芯片的單片機(jī)顯示系統(tǒng)
- 單片機(jī)最小時(shí)鐘日期顯示課程設(shè)計(jì)
- 單片機(jī)實(shí)訓(xùn)課程設(shè)計(jì)--液晶時(shí)鐘顯示
- 單片機(jī)課程設(shè)計(jì)--點(diǎn)陣顯示器報(bào)告
評(píng)論
0/150
提交評(píng)論