單片機(jī)課程設(shè)計(jì)--顯示電路_第1頁(yè)
已閱讀1頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

最新文檔

評(píng)論

0/150

提交評(píng)論