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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  《單片機課程設計》報告</p><p>  學 院: 電子與信息學院 </p><p>  專業(yè)班級: </p><p>  組 員: </p><p>  申請等級: 良好 </p>&l

2、t;p>  提交日期: 2013-06-26 </p><p><b>  1設計思路 </b></p><p><b>  1.1功能要求</b></p><p>  1.1.1分離模塊要求</p><p>  1)設計一個可以顯示1234的顯示電路,并利用單片機實現(xiàn)。</

3、p><p>  2)利用按鍵切換,然后顯示I0Y</p><p>  3)按鍵切換的動作,全部用串口進行通信。</p><p>  設計一個開關,當進行切換后,程序再進入主要要求。</p><p>  1.1.2主模塊要求</p><p>  1) 顯示準確的北京時間(時、分),可用24小時制式;</p>&

4、lt;p>  2) 隨時可以調(diào)校時間。</p><p>  3) 增加公歷日期顯示功能(月、日);</p><p>  4) 隨時可以調(diào)校月、日;</p><p>  5) 允許通過轉(zhuǎn)換功能鍵轉(zhuǎn)換顯示時間或日期。</p><p>  6) 所有按鍵需要通過串口自發(fā)自收來調(diào)校各種功能。</p><p><b&

5、gt;  1.2 設計思路</b></p><p>  首先,要求有一個主模塊和一個分離模塊,可以各自寫程序,然后用一個按鍵來實現(xiàn)它們之間的跳轉(zhuǎn),那就首先應做按鍵檢測,以判斷選擇的是什么模塊</p><p>  其次是顯示的問題,由于要顯示的內(nèi)容比較多,為了簡化代碼,擬寫一個顯示的子程序,只要更改寄存器里的值,顯示出來的東西也隨之改變</p><p> 

6、 接下來是北京時間的顯示以及調(diào)校。要先要有一個準確的計時,然后先實現(xiàn)秒,60秒進1實現(xiàn)分,60分進1實現(xiàn)時···以此類推來實現(xiàn)一個準確的北京時間;調(diào)校的話就是通過按鍵實現(xiàn)對時間進行各自的加減</p><p>  再接下來是串口通信的問題,在本次課程設計,其實就是自發(fā)自收。首先是要有數(shù)據(jù)可以發(fā)送,明顯就是每按下一個鍵,就發(fā)送一個數(shù)據(jù),然后再接收這個數(shù)據(jù),其次就是每次進行串口通信都會引發(fā)

7、一次中斷,所以應該做好數(shù)據(jù)的入棧保護。</p><p>  最后,綜上分析,應該給每個按鍵設定一個編碼,這個編碼也就是串口通信要發(fā)送和接收的數(shù)據(jù);此外,由于要實現(xiàn)的功能比較多,跳轉(zhuǎn)容易出錯,而且為了簡化代碼,擬把每個功能與按鍵也用按鍵編碼聯(lián)系起來。即按鍵-串口通信-功能一一對應。</p><p><b>  2 設計流程 </b></p><p&g

8、t;<b>  2.1按鍵檢測</b></p><p>  按鍵檢測的思路是先檢測是否有鍵按下,有鍵按下再判斷是哪個鍵按下。為了判斷準確,第一次判斷有按鍵按下后,要延時去抖,再判斷是否仍是有按鍵按下,有則才是真的有按鍵按下。延時時間應大于5Ms,本程序采用10Ms。</p><p>  程序是參照課本第七章160頁的例子寫出來的。大致流程如下圖所示:</p>

9、;<p><b>  2.2主模塊</b></p><p>  2.2.1 北京時間的顯示</p><p>  使用T0定時器進行計時,設定為每20毫秒中斷一次。用1區(qū)寄存器的R0來對中斷次數(shù)進行計數(shù),R2-R7依次存放著年、月、日、時、分、秒。</p><p>  關鍵點——數(shù)碼管的顯示是獨立的,是被調(diào)用而已。定時器的每次中斷都

10、會調(diào)用數(shù)碼管的顯示以達到數(shù)據(jù)刷新的目的。</p><p>  時間顯示的大致框圖如下所示:</p><p>  2.2.2 時間的調(diào)校</p><p>  對于年、月、日、時、分、秒,各自設定兩個鍵來進行加1以及減1。</p><p>  關鍵點——每次調(diào)校完時間后都要調(diào)到時間的顯示模塊,以更新數(shù)據(jù)。</p><p>

11、  2.2.3 跳出主模塊</p><p>  設置一個按鍵用于跳出主模塊,之后可以 重新選擇分離模塊或者主模塊</p><p><b>  2.3分離模塊</b></p><p>  2.3.1 1234的顯示</p><p>  作為一個獨立的模塊,用一個按鍵進行調(diào)用。</p><p> 

12、 為了實現(xiàn)能夠達到依次顯示1111-2222-3333-4444的效果,用了一個最簡單的方法,就是利用主模塊里的秒的個位數(shù)來實現(xiàn)。秒的個位數(shù)為0~9,加個判斷,只有在個位數(shù)為1~4的時候數(shù)碼管才會顯示,否則不予以顯示,則可以達到1111-2222-3333-4444的效果。</p><p>  2.3.2 IOY的顯示</p><p>  也是作為一個獨立的模塊,用一個按鍵進行調(diào)用。&

13、lt;/p><p>  直接在寄存器放入要顯示的數(shù)據(jù)104,則數(shù)碼管會直接顯示出來。</p><p>  2.3.3 進入主模塊</p><p>  設置一個按鍵用于跳進主模塊</p><p>  2.4 串口通信以及鍵盤、顯示功能模式編碼</p><p>  2.4.1 串口通信</p><p>

14、<b>  部分參數(shù)設置如下:</b></p><p>  定時器T1選擇工作模式2,用于產(chǎn)生波特率。采用8位自動重裝模式產(chǎn)生波特率。波特率設為2400bit/s,預置值為0F3H。</p><p>  設置波特率加倍。串口通信選擇方式1,REN=1,允許接收。</p><p>  允許串行口中斷,串行口中斷優(yōu)先級設為高優(yōu)先級。</p&g

15、t;<p>  參照課本第七章183頁的例子寫出來的。主要是在查鍵程序的基礎上進行一些修改以及添加。</p><p>  融入查鍵的串口通信發(fā)送端流程圖如下:</p><p>  接收端中斷服務流程圖如下所示:</p><p>  2.4.2鍵盤、顯示功能模式編碼</p><p>  單片機按鍵本身的編碼如下:</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對應MOD1:顯示分、秒</p><p>  #02H對應MOD2:顯示日、時</p><p>  #03H對應MOD3:顯示年、月<

18、;/p><p>  #04H對應MOD4:跳到分離模塊</p><p>  #05H對應MOD5:年加1</p><p>  #06H對應MOD6:年減1</p><p>  #07H對應MOD7:月加1</p><p>  #08H對應MOD8:月減1</p><p>

19、;  #09H對應MOD9:日加1</p><p>  #0AH對應MOD10:日減1</p><p>  #0BH對應MOD11:時加1</p><p>  #0CH對應MOD12:時減1</p><p>  #0DH對應MOD13:分加1</p><p>  #0EH對應MOD14:分減1

20、</p><p>  #0FH對應MOD15:秒加1</p><p>  #010H對應MOD16:秒減1</p><p>  #0AAH對應MOD17:分離模塊的顯示1~4</p><p>  #0BBH對應MOD18:分離模塊的顯示IOY</p><p>  對鍵盤按鍵進行編碼并與顯示功能模式進行一

21、一對應如下:</p><p>  S1——MOD1、MOD17(進入主模塊之前為MOD17,進入之后為MOD1)</p><p>  S2——MOD2、MOD18(進入主模塊之前為MOD18,進入之后為MOD2) </p><p>  S3——MOD1、MOD3(進入主模塊之前為MOD1,進入之后為MOD3) </p><p>  

22、S4——MOD4、MOD 18(進入主模塊之前為MOD18,進入之后為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ū)寄存器存儲要顯示的數(shù)據(jù)以及數(shù)碼管的片選信號:</p><p>  R0—R3用于片選數(shù)碼管,1則選中,0則不選中</p><p>  R4用于顯示年或者日或者分的十位數(shù)</p><p>  R5用于顯示年或者日或者分的個位</p><p>  R6用于顯示月或者時或者秒的十位數(shù)</p><p> 

25、 R7用于顯示月或者時或者秒的個位數(shù)</p><p>  根據(jù)單片機上的595芯片的存儲特點,再參考書上關于數(shù)碼管顯示的代碼寫出顯示的子程序,可直接調(diào)用。</p><p><b>  大致流程圖如下:</b></p><p>  2.6 整個程序的簡單流程圖</p><p>  整個程序的簡單流程圖如下所示:</p

26、><p><b>  3心得體會</b></p><p>  3.1以及調(diào)試過程中遇到的問題</p><p>  1)程序比較長,跳轉(zhuǎn)、循環(huán)比較多,出現(xiàn)過很多次的邏輯混亂</p><p>  2)參數(shù)設置不當導致效果出不來或者結(jié)果出錯</p><p>  3)也遇到過程序進入死循環(huán),死胡同的情況<

27、;/p><p>  4)由于程序塊位置擺放不對,導致跳轉(zhuǎn)出錯</p><p>  5)對匯編語言、單片機原理以及開發(fā)板結(jié)構(gòu)都不是特別了解,所以部分程序(查鍵、串口通信)是參考課本例子才寫得出來</p><p>  6)對匯編語言的掌握還不夠好,部分語句使用失當</p><p>  7) 對相關芯片功能理解不清晰,導致編程中出現(xiàn)邏輯上的錯

28、誤而難以察覺8 )在子程序的調(diào)用中,常常會不自覺地改變了相關參數(shù),沒有注意好相關數(shù)據(jù)的保護</p><p>  9)因為一開始寫的延時子程序延時過長,導致查鍵不靈敏,甚至無法檢測出按鍵</p><p>  10)程序用到的按鍵比較多,又是進行串口通信,有時導致設置的時候匹配混亂</p><p>  11)由于對Keil uVision3軟件不是很熟悉,導

29、致在調(diào)試程序的時候費了好多時間,調(diào)試起來也很有難度</p><p><b>  3.2 心得體會</b></p><p>  1)單片機課程設計過程中遇到了很多的問題,也在不斷的解決問題中提高了自己對單片機程序設計的認識,所有的設計都應該基于良好的合理的分類分工,在各自負責的模塊中搞清楚程序設計的原理,邏輯關系,相關芯片的工作過程,相關參數(shù)的設定要求是開始編程的前提。

30、在編程過程中,如何應用一些匯編語言中的小技巧,如‘$’的使用等,可以大大地簡化程序,如何在遇到問題時按照一定的邏輯順序進行檢驗調(diào)試也需要我們在不斷的編程練習中體會熟悉。</p><p>  2)這次課程設計遇到很多問題,原因大多都是對單片機對匯編理解得不夠透徹,經(jīng)過多次的查閱資料,調(diào)試程序,修改程序,感覺自己對單片機、匯編的掌握更進一步,所以這次課程設計真的收獲很大。也證明了學編程或者硬件,只學理論是學不好的。必

31、須得實際操作下,才能真正地明白理論,才能真正地掌握一門技術。</p><p>  3)通過這次單片機課程設計,我加深了對單片機理論的理解,將理論很好地應用到實際當中去。剛開始接觸單片機的時候,會發(fā)現(xiàn)很多不懂,寫程序也會很煩躁??墒菃纹瑱C真的是一個很有魅力的東西,接觸久了也就喜歡上了寫代碼,調(diào)試,下載,測試。經(jīng)過這次課程設計,除了提高了自己的匯編編程能力外,還很大地提高了自己的邏輯分析能力。</p>

32、<p>  在與組員合作、交流想法的時候,也擴展了自己的思路。而在將各自的代碼融合成一個完整的代碼時,遇到了許多問題,也是在組員的討論下解決的。這讓我意識到了,團隊合作很重要。</p><p><b>  4代碼</b></p><p><b>  ORG 0000H</b></p><p><b> 

33、 AJMP FUN1</b></p><p>  ORG 000BH;定時器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;預置值設置,T0定時器每20Ms溢出一次</p><p>  SETB ET0 ;定時器T0中斷允許,SEB語句是置1</p><p>  MOV TH1,#0F3H ;8位自動重裝模式,用于產(chǎn)生波

36、特率2400bit/s</p><p>  MOV TL1,#0F3H</p><p>  MOV PCON,#80H;波特率加倍</p><p>  MOV SCON,#50H;設方式1,REN=1,允許接收</p><p>  SETB ES;串行口中斷允許</p><p>  SETB E

37、A ;允許全局中斷</p><p>  SETB PT0 ;T0中斷級別最高</p><p>  SETB PS;串行口中斷優(yōu)先級設為高優(yōu)先級</p><p>  SETB TR0;開啟定時器T0</p><p>  SETB TR1;開啟定時器T1</p><

38、p>  SETB EX0 ;允許外部中斷,INT0</p><p>  CLR IT0 ;CLR為置0,INT0 為低電平觸發(fā)</p><p>  SETB P3.2 ;P3.2設置為讀</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延時去抖</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;查哪個鍵按下,有鍵按下則跳轉(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延時去抖</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;按鍵會有聲音</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>  ;按鍵對應編碼:后面VALUE也適用這個編碼</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選擇的模式一樣,設置K4只</p><p>  ;是為了能正常顯示,避免程序走進死胡同</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>  ;用于計數(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點</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ù)緩沖器,這個指令是訪問發(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ā)送完標志。如果(TI)=0,轉(zhuǎn)至S01,否則</p><p>  ;往下執(zhí)行。若有數(shù)據(jù)發(fā)送,則特殊功能寄存器中</p><p>  ;的標志TI被硬件置位,向CPU申請中斷</p><p>  CLR TI;執(zhí)行到這里證明發(fā)送完成,之后得對TI進行軟件</p><p><b>  ;清零

78、</b></p><p><b>  AJMP OUT</b></p><p>  ;**************************************************************************</p><p>  ;數(shù)碼管顯示模塊0~R3為第1~4個數(shù)碼管的片選,R4~R7為第1~4個數(shù)碼

79、管顯示的數(shù)值</p><p>  ;對應為TABLE中的值。程序狀態(tài)字PSW中RS1 = 0,RS0 = 0由T0每20ms調(diào)用一次</p><p>  DISPLAY:PUSH ACC</p><p>  PUSH PSW;對PSW,ACC進行入棧保護</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,個位數(shù)存于B</p>

82、<p>  MOV R7,B;B的值賦給0區(qū)的R7,R4、5、6、7分別對應著4</p><p><b>  ;個數(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ù)的個位數(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;選中四個數(shù)碼管,都用于顯示</p><p>

85、  JMP CALCULATE;數(shù)值存儲完畢后,進行計數(shù)(多久要加1秒,多</p><p><b>  ;久要進位)</b></p><p>  MOD2:CJNE R1,#02H,MOD3 ;顯示模式1,顯示日,時</p><p>  MOV A,R5;1區(qū)的R5存著初始小時數(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的時候清零</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是判斷當前是哪個月</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是對有不同天數(shù)的月份獨自操作</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是判斷當前是哪個月</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ù)加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ù)減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;分數(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、;分數(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個數(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;選中后三個數(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用于計數(shù)</p><p>  INC R0;計數(shù)器的周期為20ms</p><p>  CJNE R0,#50,START;R0不等于50代表秒數(shù)不用加1,則跳到START<

133、/p><p>  MOV R0,#0;50個20ms為1s,之后進行清零,重新計數(shù)</p><p>  INC R7;秒數(shù)+1</p><p>  //SETB P1.3</p><p>  CJNE R7,#60,START;R7不等于60代表分數(shù)不用加1</p><p><b>  MO

134、V R7,#0</b></p><p>  INC R6;分數(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ù)加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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論