at89c51單片機課程設計說明書_第1頁
已閱讀1頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  存檔資料 成績:  </p><p>  華東交通大學理工學院</p><p>  課 程 設 計 報 告 書</p><p>  所屬課程名稱 單片機原理與應用 </p><p>  題 目 萬年電子歷

2、 </p><p>  分 院  電信分院  </p><p>  專業(yè)班級 2007級計算機科學與技術(2)班 </p><p>  學  號      </p><p>  學生姓名         </p>&l

3、t;p>  指導教師      </p><p>  2010 年 7 月 16 日 </p><p>  華東交通大學理工學院</p><p>  課 程 設 計( 論 文 )任 務 書</p><p>  專 業(yè) 07計算機科學與技術 班 級(2)班 姓名 </p>&l

4、t;p>  一、課程設計(論文)題目 </p><p>  二、課程設計(論文)工作:自 2010 年 7 月 5 日起至 2010 年 7 月 16 日止。</p><p>  三、課程設計(論文)的目的要求和任務內容:</p><p><b>  一.實驗目的</b></p&g

5、t;<p>  通過本次課程設計達到如下目的:</p><p>  1、熟悉AT89C51單片機與時鐘芯片DS1302的應用。</p><p>  2、熟悉時鐘時、分、秒計時方法,掌握編程技巧。</p><p>  3、掌握鍵盤的基本工作原理,鍵的識別,鍵抖動和重鍵問題的解決,鍵盤工作方式和鍵盤程序的編程。</p><p>  

6、4、掌握七段碼LED顯示器的結構,七段碼LED顯示器的工作方式和顯示程序的編程。</p><p>  5、掌握串行通信程序的編寫。</p><p><b>  二.設計要求</b></p><p>  利用AT89C51單片機,時鐘芯片DS1302、七段碼LED顯示器、按鍵、MAX7219及常用外圍器件,設計一個具有動態(tài)顯示功能的電子萬年歷,具

7、體要求如下:</p><p>  1、設計實現(xiàn)電子萬年歷的電路系統(tǒng)構成框圖。</p><p>  2、能動態(tài)顯示年、月、日、星期、小時、分鐘、秒。</p><p>  3、可用鍵盤進行校對時間,以及日期時間的修改。</p><p>  學生簽名:_____________</p><p>  2010 年7 月16日&

8、lt;/p><p>  課程設計(論文)評閱意見</p><p>  評閱人  職稱 </p><p>  2010 年7 月16 日 </p><p><b>  目 錄</b></p><p>  課程設計任務書..........................

9、.2</p><p>  設計方案....... .........................6</p><p>  硬件設計.................................7</p><p>  軟件設計................................15</p><p>  程序清單........

10、........................17</p><p>  課程設計心得............................24</p><p>  參考文獻................................25</p><p><b>  第二章 設計方案</b></p><p>  按

11、照系統(tǒng)設計功能的要求,初步確定系統(tǒng)由主控模塊、時控模塊、顯示驅動及顯示模塊和鍵盤接口模塊共4個模塊組成,電路系統(tǒng)構成框圖如圖所示。</p><p>  圖2.1電子萬年歷電路系統(tǒng)構成框圖</p><p>  主控芯片使用51系列AT89C51單片機,時鐘芯片使用美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘DS1302。采用DS1302作為計時芯片,可以做到計時準確。更重

12、要的是,DS1302可以在很小電流的后備電源(2.5~5.5V電源,再2.5V時耗電小于300nA),而且DS1302</p><p>  可以編程選擇多種充電電流來隊后備電源進行慢速充電,可以保證后備電源基本不耗電。顯示驅動采用MAX7219,MAX7219 是微處理器和共陰極八段八位LED 數(shù)碼管顯示、圖條/柱圖顯示或64 點陣顯示接口的小型串行輸入/輸出芯片。片內包括BCD 譯碼器、多路掃描控制器、字和位驅

13、動器和8×8 靜態(tài)RAM。外部只需要一個電阻設置所有LED 顯示器字段電流。MAX7219 和微處理器只需三根導線連接,每位顯示數(shù)字有一個地址由微處理器寫入。允許使用者選擇每位是BCD 譯碼或不譯碼。使用者還可選擇停機模式、數(shù)字亮度控制、從1~8 選擇掃描位數(shù)和對所有LED 顯示器的測試模式。顯示模塊采用普通的共陰極四位一體八段LED數(shù)碼管。</p><p><b>  第三章 硬件設計<

14、;/b></p><p><b>  3.1系統(tǒng)硬件概述</b></p><p>  3.1.1主控制器AT89C51</p><p>  ATMEL公司生產的AT89C51單片機采用高性能的靜態(tài)80C51設計,并</p><p>  采用先進工藝制造,還帶有非易失性Flash程序存儲器。它是一種高性能、低功耗的8

15、位CMOS微處理芯片,市場應用最多。其主要特點如下:</p><p>  8KB Flash ROM,可以擦除1000次以上,數(shù)據(jù)保存10年。</p><p>  256字節(jié)內部RAM;</p><p><b>  電源控制模式;</b></p><p><b>  時鐘可停止和恢復;</b><

16、;/p><p><b>  空閑模式;</b></p><p><b>  掉電模式;</b></p><p><b>  6個中斷源;</b></p><p><b>  4個中斷優(yōu)先級;</b></p><p><b> 

17、 4個8位I/O口;</b></p><p>  全雙工增強型TUAR;</p><p>  3個16位定時/計數(shù)器:T0、T1(標準80C51)和增加的T2(捕獲和比較)</p><p>  全靜態(tài)工作方式:0~24MHZ</p><p>  3.1.2時鐘電路DS1302</p><p>  DS130

18、2的性能特性:</p><p>  實時時鐘,可對秒、分、時、日、周、月以及帶閏年補償?shù)哪赀M行比較;</p><p>  用于高速數(shù)據(jù)暫存的31*8位RAM;</p><p>  最少引腳的串行I/O;</p><p>  2.5~5.5V電壓工作范圍;</p><p>  2.5V時耗小于300nA;</p&g

19、t;<p>  用于時鐘或RAM數(shù)據(jù)讀/寫的單字節(jié)或多字節(jié)(脈沖方式)數(shù)據(jù)傳送方式;</p><p><b>  簡單的三線接口;</b></p><p>  可選的慢速充電(至Vcc1)的能力。</p><p>  DS1302在任何數(shù)據(jù)傳送時必須先初始化,把RST腳置為高電平,然后把8位地址和命令字裝入移位寄存器,數(shù)據(jù)在SCL

20、K的上升沿被訪問到。在開始8個時鐘周期,把命令字節(jié)裝入移位寄存器后,另外的時鐘周期在讀操作時輸出數(shù)據(jù),在寫操作時寫入數(shù)據(jù)。時鐘脈沖的個數(shù)在單字節(jié)方式下為8+8,在多字節(jié)方式下為8+字節(jié)數(shù),最大可達248字節(jié)數(shù)。如果在傳送過程中置RST腳為低電平,則會終止本次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在Vcc≥2.5V之前,RST腳必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。</p><p&

21、gt;  DS1302的控制字如表所示??刂谱止?jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。位6如果為0,則表示存取日歷時鐘數(shù)據(jù);為1則表示存取RAM數(shù)據(jù)。位5~1(A4~A0)指示操作單元的地址。最低有效位(位0)如果為0,則表示藥進行寫操作;為1表示進行讀操作??刂谱止?jié)總是從最低位開始輸入/輸出。</p><p>  為了提高對32個地址尋址能力(地址/命令位1~5=邏輯1

22、),可以把時鐘/日歷或RAM寄存器規(guī)定為多字節(jié)(burst)方式。位6規(guī)定時鐘或RAM,而位0規(guī)定讀或寫。在時鐘/日歷寄存器中的地址9~31或RAM寄存器中的地址31不能存儲數(shù)據(jù)。在多字節(jié)方式下,讀或寫從地址0的位0開始。必須按數(shù)據(jù)傳送的次序寫最先的8個寄存器。但是,當以多字節(jié)方式寫RAM時,為了傳送數(shù)據(jù)不必寫所有的31字節(jié),不管是否謝了全部31字節(jié),所寫的每一字節(jié)都將傳送至RAM。</p><p>  表3.1

23、 DS1302控制字</p><p>  DS1302共有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數(shù)據(jù)位為BCD碼形式。其日歷、時間寄存器及其控制字如上表所示,其中奇數(shù)為讀操作,偶數(shù)為寫操作。</p><p>  時鐘暫停:秒寄存器的位7定義位時鐘暫停位。當它為1時,DS1302停止振蕩,進入低功耗的備份方式,通常在對DS1302進行寫操作時(如進入時鐘調整程序),停止振蕩

24、。當它為0時,時鐘將開始啟動。</p><p>  AM-PM/12-24小時方式:小時寄存器的位7定義為12或24小時方式選擇位。它為高電平時,選擇12小時方式。在此方式下,位5為第二個10小時位(20~23h)。</p><p>  DS1302的晶振選用32768Hz,電容推薦值為6pF。因為振蕩頻率較低,也可以不接電容,對計時精度影響不大。</p><p>

25、  3.1.3顯示驅動MAX7219</p><p>  ● MAX7219 和單片計算機連接有三條引線(DIN、CLK、LOAD),采用16 位數(shù)據(jù)串行移位接收方式</p><p>  ● 八位LED 顯示、圖條/柱圖顯示或64 點陣顯示</p><p>  ● 包括BCD 譯碼器、多路掃描控制器、字和位驅動器和8×8 靜態(tài)RAM</p>

26、<p>  ● 可選擇停機模式、數(shù)字亮度控制、從1~8 選擇掃描位數(shù)和對所有LED 顯示器的測試模式</p><p>  ● 最多能驅動8 位LED 顯示器</p><p>  ● 內部RAM 地址01~08H 分別對應于DIG0~DIG7。</p><p>  ● 掃描界限寄存器(地址0BH):該寄存器中D0~D3 位數(shù)據(jù)設定值為0~7H,設定值表示顯示

27、器動態(tài)掃描個數(shù)位1~8。</p><p>  ● 停機寄存器(地址0CH):當D0=0 時,MAX721 處于停機狀態(tài);當D0=1 時,處于正常工作狀態(tài)。</p><p>  ● 顯示測試寄存器(地址0FH):當D0=0時,MAX7219 按設定模式正常工作;當D0=1 時,處于測試狀態(tài)。在該狀態(tài)下,不管MAX7219 處于什么模式,全部LED 將按最大亮度顯示。</p>&

28、lt;p>  ● 亮度寄存器(地址0AH):亮度可以用硬件和軟件兩種方法調節(jié)亮度寄存器中的D0~D3位可以控制LED 顯示器的亮度。</p><p>  MAX7219 通過D11~D84 位地址位譯碼,可尋址14 個內部寄存器,分別是8 個LED 顯示位寄存器,5 個控制寄存器和1 個空操作寄存器。</p><p>  LED 顯示寄存器由內部8 × 8 靜態(tài)RAM 構成

29、,操作者可直接對位寄存器進行個別尋址, 以刷新和保持數(shù)據(jù), 只要V +超過2 V(一般為+ 5V)。 </p><p>  控制寄存器包括: 譯碼模式, 顯示亮度調節(jié), 掃描限制(選擇掃描位數(shù)),關斷和顯示測試寄存器。</p><p>  MAX7219 的驅動程序首先必須對5 個控制寄存器初始設置即初始化, 各控制寄存器設置含義如下:譯碼模式選擇寄存器(地址= F9H);MAX7219

30、有兩種譯碼方式:B 譯碼方式和不譯碼方式。當選擇不譯碼時, 8 個數(shù)據(jù)為分別一一對應7 個段和小數(shù)點位;B 譯碼方式是BCD 譯碼,直接送數(shù)據(jù)就可以顯示。實際應用中可以按位設置選擇B 譯碼或是不譯碼方式。</p><p>  掃描限制寄存器: 地址= FBH;用于設置顯示的LED 個數(shù)( 1 ~8 ) , 比如當設置為0xX4 時,LED 0~5 顯示。</p><p>  亮度調節(jié)寄存器

31、: 地址= FAH;共有16 級選擇,用于LED 顯示亮度的強弱設置。</p><p>  關斷模式寄存器:地址= FCH;有兩種模式選擇:一種是關斷狀態(tài)模式(D0 = 0);一種是正常操作狀態(tài)(D0 = 1),通常選擇正常操作狀態(tài)。</p><p>  顯示測試寄存器:地址= FFH;有兩種選擇用于設置LED 是測試狀態(tài)還是正常操作狀態(tài):當在測試狀態(tài)時(D0 = 1)各位全應亮,一般選擇

32、正常操作狀態(tài)(D0 = 0)。</p><p>  3.2主要單元電路的設計</p><p><b>  3.2.1顯示電路</b></p><p>  顯示部分采用普通的共陰數(shù)碼管顯示,采用動態(tài)掃描,以減少硬件電</p><p>  表3.2 MAX7219引腳功能</p><p>  路。年

33、月日時分秒星期共需要17位數(shù)碼顯示,考慮到一次掃描17位數(shù)碼</p><p>  管顯示時會出現(xiàn)閃爍情況,故采用動態(tài)掃描,可將數(shù)碼管數(shù)量減少至9位,</p><p>  也就是兩個四位一體八段LED顯示數(shù)碼管和一個一位LED數(shù)碼管設計時數(shù)碼管同時掃描,顯示時采用串行口輸出段碼,用MAX7219驅動數(shù)碼管。</p><p>  圖3.2 MAX7219主要引腳<

34、;/p><p><b>  3.2.2鍵盤接口</b></p><p>  鍵盤在單片機系統(tǒng)中是一個很重要的部件。為了輸入數(shù)據(jù)、查詢和控制系統(tǒng)的工作狀態(tài),都要用到鍵盤,鍵盤是人工干預計算機的主要手段。</p><p>  鍵盤可分為編碼和非編碼鍵盤兩種。編碼鍵盤采用硬件線線路來實現(xiàn)鍵盤編碼,每按下一個鍵,鍵盤能自動生成按鍵代碼,鍵數(shù)較多,而且還具有

35、去抖動功能。這種鍵盤使用方便,但硬件較復雜,PC機所用的鍵盤就屬于這種。非編碼鍵盤僅提供按鍵開關工作狀態(tài),其他工作由軟件完成,這種鍵盤鍵數(shù)較少,硬件簡單,一般在單片機應用系統(tǒng)中廣泛使用。此處主要介紹該類非編碼鍵盤及其與MCS—51型單片機的接口。</p><p><b>  3.2.3時鐘電路</b></p><p>  3.2.3.1 DS1302工作方式簡介及數(shù)據(jù)

36、操作原理</p><p>  DS1302可以對年、月、日、星期、時、分、秒進行計時, 且具有閏年補償功能, 工作電壓寬達2.5~5.5V。采用三線接口與CPU進行同步通信, 并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內部有一個33x8的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是的DS1202升級產品, 與DS1202兼容, 但增加了主電源/后背電源雙電源引腳, 同時提供了對后背電

37、源進行涓細電流充電的能力。</p><p>  DS1302時鐘芯片包括實時時鐘/日歷和31字節(jié)的靜態(tài)RAM。它經過一個簡單的串行接口與微處理器通信。實時時鐘/日歷提供秒、分、時、日、周、月和年等信息。對于小于31天的月和月末的日期自動進行調整,還包括閏年校正的功能。時鐘的運行可以采用24<小>時或帶AM/PM的12小時格式。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多字節(jié)的時鐘信號或

38、RAM數(shù)據(jù)。</p><p>  DS1302有主電源/后備電源雙電源引腳:Vcc1在單電源與電池供電的系統(tǒng)中提供低電源,并提供低功率的電磁備份;Vcc1在雙電池系統(tǒng)中提供主電源。在這種運行方式中,Vcc1里連接到后備電源,以便在沒有主電源的情況下能保存時間信息以及數(shù)據(jù)。DS1302由Vcc1或Vcc2中較打大者供電。當Vcc2>(Vcc1+0.2V)時,Vcc2給DS1302供電;當Vcc2<Vcc1時,DS1

39、302由Vcc1供電。</p><p>  圖3.5 DS1302</p><p>  DS1302在任何數(shù)據(jù)傳送時必須先初始化,把RST腳置為高電平,然后把8位地址和命令字裝入移位寄存器,數(shù)據(jù)在SCLK的上升沿被訪問到。在開始8個時鐘周期,把命令字節(jié)裝入移位寄存器后,另外的時鐘周期在讀操作時輸出數(shù)據(jù),在寫操作時寫入數(shù)據(jù)。時鐘脈沖的個數(shù)在單字節(jié)方式下為8+8,在多字節(jié)方式下為8+字節(jié)數(shù),

40、最大可達248字節(jié)數(shù)。如果在傳送過程中置RST腳為低電平,則會終止本次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在Vcc≥2.5V之前,RST腳必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。</p><p>  DS1302的控制字如圖所示??刂谱止?jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。位6如果為0,則表示存取日歷時鐘數(shù)據(jù);為1則表示存取RAM數(shù)

41、據(jù)。位5~1(A4~A0)指示操作單元的地址。最低有效位(位0)如果為0,則表示藥進行寫操作;為1表示進行讀操作??刂谱止?jié)總是從最低位開始輸入/輸出。</p><p>  為了提高對32個地址尋址能力(地址/命令位1~5=邏輯1),可以把時鐘/日歷或RAM寄存器規(guī)定為多字節(jié)(burst)方式。位6規(guī)定時鐘或RAM,而位0規(guī)定讀或寫。在時鐘/日歷寄存器中的地址9~31或RAM寄存器中的地址31不能存儲數(shù)據(jù)。在多字節(jié)

42、方式下,讀或寫從地址0的位0開始。必須按數(shù)據(jù)傳送的次序寫最先的8個寄存器。但是,當以多字節(jié)方式寫RAM時,為了傳送數(shù)據(jù)不必寫所有的31字節(jié),不管是否謝了全部31字節(jié),所寫的每一字節(jié)都將傳送至RAM。</p><p>  DS1302共有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數(shù)據(jù)位為BCD碼形式。其日歷、時間寄存器及其控制字如下表所示,其中奇數(shù)為讀操作,偶數(shù)為寫操作。</p><

43、p>  表3.3 DS1302控制字</p><p>  時鐘暫停:秒寄存器的位7定義位時鐘暫停位。當它為1時,DS1302停止振蕩,進入低功耗的備份方式,通常在對DS1302進行寫操作時(如進入時鐘調整程序),停止振蕩。當它為0時,時鐘將開始啟動。</p><p>  AM-PM/12-24小時方式:小時寄存器的位7定義為12或24小時方式選擇位。它為高電平時,選擇12小時方式。

44、在此方式下,位5為第二個10小時位(20~23h)。</p><p>  DS1302的晶振選用32768Hz,電容推薦值為6pF。因為振蕩頻率較低,也可以不接電容,對計時精度影響不大。</p><p><b>  第四章 軟件設計</b></p><p><b>  4.1程序設計</b></p><

45、p>  電子萬年歷的程序主要包括3個方面的內容:一是DS1302從單片機中讀取數(shù)據(jù)進行計數(shù),二是利用按鍵進行時間的調整,三是MAX7219從單片機中讀取數(shù)據(jù)驅動LED數(shù)碼管顯示時間。</p><p>  AT89C51單片機主要I/O口的分配,P2.0-P2.2分別接MAX7219的DIN,LOAD,CLK三個功能端,P3接查詢式按鍵,P1.0-P1.2分別接DS1302的CLK,IO,RST端。</

46、p><p><b>  4.2程序流程圖</b></p><p>  4.2.1顯示驅動程序流程圖</p><p>  圖4. 1 MAX7219顯示驅動程序流程圖</p><p>  4.2.2時間控制流程圖</p><p>  圖4.2 DS1302時控流程圖</p><p

47、><b>  第五章 程序清單</b></p><p>  #include <reg5.h></p><p>  #include "intrins.h"</p><p>  #define uint unsigned char</p><p>  #define uint uns

48、igned int</p><p>  uchar xingqi,nian,yue,ri,xiaoshi,fen,miao;</p><p>  uchar nianh,nianl,yueh,yuel,rih,ril,xiaoshih,xiaoshil,fenh,fenl,miaoh,miaol;</p><p>  uchar dd=2;sbit clk=p1^0

49、;</p><p>  sbit dat=p1^1;sbit rst=p1^2;</p><p>  sbitA0=ACC^0;sbitA1=ACC^1;</p><p>  sbitA2=ACC^2;sbitA3=ACC^3; </p><p>  sbitA4=ACC^4;sbitA5=ACC^5; </p><p&g

50、t;  sbitA6=ACC^6;sbitA7=ACC^7;</p><p>  sbit p30=p3^0; </p><p>  sbit p31=p3^1; </p><p>  sbit p32=p3^2;</p><p>  sbit p33=p3^3; </p><p>  sbit p34=p3^4; &

51、lt;/p><p>  sbit p35=p3^5; </p><p>  sbit p36=p3^6; </p><p>  sbit p37=p3^7;</p><p>  sbit date=p2^0;</p><p>  sbit load=p2^1;sbit clkk=p2^2;</p><p

52、>  uchar bdata bitmsb;</p><p>  sbit m7=bitmsb^7;</p><p>  uchar x,y,c;</p><p>  bit flag=0;</p><p>  bit flagh=1;</p><p>  uchar code tab[]={0xff,

53、 //任意數(shù)</p><p>  0x06,/*1*/ //共陰數(shù)碼管</p><p>  0x5B,/*2*/</p><p>  0x4F,/*3*/</p><p>  0x66,/*4*/</p><p>  0x6D,/*5*/</p><p>  0x7D,/*6*/&l

54、t;/p><p>  0x07,/*7*/</p><p><b>  };</b></p><p>  uchar code tab2[]={0x7e,ox30,ox6d,ox7,ox33,</p><p>  ox5b,ox5f,ox70,ox7f,ox7b}; </p><p>  //max

55、7219,0~9的字庫</p><p>  uchar code tab1[]={ox00,ox01,ox02,ox03,ox04,ox05,ox06,ox07,</p><p>  ox08,ox09,ox010,ox11,ox12,ox13,ox14,ox15,ox16,ox17,ox18,ox19,ox20,ox21,ox22,ox23,ox24,ox25,ox26,ox27,ox2

56、8,ox29,ox30,ox31,ox32,ox33,ox34,ox35,ox36,ox37,ox38,ox39,ox40,ox41,ox42,ox43,ox44,ox45,ox46,ox47,ox48,ox49,ox50,ox51,ox52,ox53,ox54,ox55,ox56,ox57,ox58,ox59,ox60};</p><p>  void send(void)</p><p&g

57、t;  {uchar count;</p><p><b>  bitmsb=x;</b></p><p>  for(count=0;count<8;count++)</p><p><b>  { if(m7)</b></p><p><b>  {clkk=0;</b&g

58、t;</p><p><b>  date=1;</b></p><p><b>  -nop-();</b></p><p><b>  clkk=1;</b></p><p><b>  }</b></p><p>  else

59、 { clkk=0;</p><p><b>  date=0;</b></p><p><b>  nop-(); </b></p><p><b>  clkk=1;</b></p><p><b>  }</b></p><

60、p>  bitmsb<<=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void wr(void)</p><p><b>  {</b></p><p><b> 

61、 load=0;</b></p><p><b>  send();</b></p><p><b>  x=y;</b></p><p><b>  send();</b></p><p><b>  lend=1;</b></p>

62、;<p><b>  }</b></p><p>  void ready(void)</p><p><b>  {</b></p><p>  x=oxfb; //設置掃描限制</p><p><b>  y=ox07;</b></

63、p><p><b>  wr();</b></p><p>  x=oxf9; //譯碼模式</p><p><b>  y=ox00;</b></p><p><b>  wr();</b></p><p>  x=oxfa;

64、 //亮度調節(jié)</p><p><b>  y=oxoc;</b></p><p><b>  wr();</b></p><p>  x=oxfc; //關斷模式</p><p><b>  y=ox01;</b></p>

65、<p><b>  wr();</b></p><p><b>  }</b></p><p>  void InputByte(uchar dd) //寫一個字節(jié)到1302中</p><p><b>  {uchar i;</b></p><p><b&

66、gt;  ACC=dd;</b></p><p>  for(i=8;i>0;i--)</p><p><b>  { </b></p><p><b>  dat=A0;</b></p><p><b>  clk=1;</b></p><

67、;p><b>  clk=0;</b></p><p>  ACC=ACC>>=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void OutputByte(void) //從DS1302中讀

68、出i個數(shù)據(jù)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p><b>  dat=1;</b></p><p>  for(i=8;i>0;i--)</p><p>  {ACC=ACC&

69、gt;>1;</p><p><b>  A7=dat;</b></p><p><b>  clk=1;</b></p><p><b>  clk=0;</b></p><p><b>  }</b></p><p>&l

70、t;b>  dd=ACC;</b></p><p><b>  }</b></p><p>  void Write(uchar addr,uchar num)</p><p><b>  {rst=0;</b></p><p><b>  clk=0;</b>

71、;</p><p><b>  rst=1;</b></p><p>  InputByte(addr); //寫地址</p><p>  InputByte(num); //寫數(shù)據(jù)</p><p><b>  clk=1;</b></p><p>&

72、lt;b>  rst=0;</b></p><p><b>  { rst=0;</b></p><p><b>  clk=0;</b></p><p><b>  rst=1;</b></p><p>  InputByte();</p>&

73、lt;p><b>  clk=1;</b></p><p><b>  rst=0;</b></p><p><b>  }</b></p><p>  //初始化設置時間,2008年5月27號,23時58分00秒</p><p>  void main(void)<

74、;/p><p>  { uchar i;</p><p>  uint xt=0;</p><p>  uchar fen1,fen2,fen3,fen4;</p><p><b>  p3=oxff;</b></p><p>  Disable WP();

75、 //非寫保護</p><p>  WriteSec(ox00); //秒</p><p>  WriteMin(ox58); //分</p><p>  WriteHr(ox23); //時

76、</p><p>  WriteDay(ox27); //日</p><p>  WriteMn(ox05); //月</p><p>  WriteYs(ox08); //年</p><

77、p>  WriteWe(ox02); //星期</p><p><b>  //7219設置</b></p><p><b>  ready();</b></p><p>  for(i=0;i<222;i++);</p><p>

78、  for(i=0;i<222;i++);</p><p><b>  while(1)</b></p><p>  { Read(ox8b); //讀星期數(shù)據(jù)</p><p>  xingqi =dd;</p><p>  Read(ox8d); //

79、讀年數(shù)據(jù)</p><p><b>  fen 1=dd;</b></p><p>  fen 2=fen1&oxof;</p><p>  fen3=fen1&oxfo;</p><p><b>  fen3>>=4;</b></p><p>  

80、nian=fen3*10+fen2;</p><p>  nianh=nian/10;</p><p>  nianl=nian%10;</p><p>  Read(ox89); //讀月數(shù)據(jù)</p><p><b>  fen1=dd;</b></p><p>  

81、fen2=fen1&oxof;</p><p>  fen3=fen1&oxfo;</p><p><b>  fen3>>4;</b></p><p>  yue=fen3*10+fen2;</p><p>  yueh=yue/10;</p><p>  yuel=

82、yue%10;</p><p>  Read(ox87); //讀日數(shù)據(jù)</p><p><b>  fen1=dd;</b></p><p>  fen2=fen1&oxof;</p><p><b>  fen3>>=4;</b></p>

83、;<p>  ri=fen3*10+fen2;</p><p>  rih=ri/10;</p><p>  ril=ri%10;</p><p>  Read(ox85); //讀小時數(shù)據(jù)</p><p><b>  fen1=dd;</b></p><p

84、>  fen2=fen1&oxof;</p><p>  fen3=fen1&oxfo;</p><p><b>  fen3>>=4;</b></p><p>  xiaoshi=fen3*10+fen2;</p><p>  xiaoshih=xiaoshi/10;</p>

85、;<p>  xiaoshil=xiaoshi%10;</p><p>  Read(ox83); //讀分數(shù)據(jù)</p><p><b>  fen1=dd;</b></p><p>  fen2=fen1&oxof;</p><p>  fen3=fen1&

86、;oxfo;</p><p><b>  fen3>>4;</b></p><p>  fen=fen3*10+fen2;</p><p>  fenh=fen/10;</p><p>  fenl=fen%10;</p><p>  Read(ox81);

87、 //讀秒數(shù)據(jù)</p><p><b>  fen1=dd;</b></p><p>  miaoh=miao/10;</p><p>  miaol=miao%10;</p><p><b>  xingqi++;</b></p><p><b>  if(fla

88、g)</b></p><p>  { Read(ox89); //讀月數(shù)據(jù)</p><p><b>  fen1=dd;</b></p><p>  fen2=fen1&oxof;</p><p>  fen3=fen1&oxf0;</p><p>

89、<b>  fen3>>4;</b></p><p>  yue=fen3*10+fen2;</p><p><b>  yue++;</b></p><p>  if(yue>=13)</p><p><b>  yue=1;</b></p>

90、<p>  WriteMn(tab1[yue]);</p><p>  while(p32==0);</p><p><b>  }</b></p><p>  if(p33==0) //日</p><p><b>  if(flag)</b></

91、p><p>  {Read(ox87); //讀日數(shù)據(jù)</p><p><b>  fen1=dd;</b></p><p>  fen2=fen1&oxof;</p><p>  fen3=fen1&oxf0;</p><p><b>

92、  fen3>>=4;</b></p><p>  ri=fen3*10+fen2;</p><p><b>  ri++;</b></p><p>  if(ri>=32)</p><p><b>  ri=1;</b></p><p>  W

93、riteDay(tab1[ri]);//ri</p><p>  while(p33==0) ;</p><p><b>  }</b></p><p>  if(p34==0) //小時</p><p><b>  if(flag)</b></p><

94、p>  {Read(ox85); //讀小時數(shù)據(jù)</p><p><b>  fen1=dd;</b></p><p>  fen2=fen1&oxf0;</p><p>  fen3=fen1&oxf0;</p><p><b>  fen3>>=4

95、;</b></p><p>  WriteHr(tab1[xiaoshi]);</p><p>  while(p34==0);</p><p><b>  }</b></p><p>  if(p35==0) //分</p><p>

96、<b>  if(flag)</b></p><p>  {Read(ox83); //讀分數(shù)據(jù)</p><p><b>  fen1=dd;</b></p><p><b>  }</b></p><p>  if(p37==0)

97、 //調整標志</p><p>  { flag=~flag;</p><p><b>  if(flag)</b></p><p>  WriteSec(ox80);</p><p><b>  else</b></p><p

98、>  WriteSec(ox800);</p><p>  while(p37==0);</p><p><b>  }</b></p><p>  if(p36==0) //調整標志</p><p>  {flagh=~flagh;</p>&l

99、t;p>  while(p36==0);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  第六

100、章 程序設計心得</p><p>  本次實驗主要涉及了單片機I/O的使用、七段碼LED顯示、按鍵識別以及雙機串行通信方面的知識。</p><p>  首先設計實現(xiàn)電子萬年歷并不困難,之前有過類似的實驗。實現(xiàn)串行通信是這次的難點,我們在實驗中首先實驗了單工通信,解決了這方面的困難后在進一步進行雙工的實現(xiàn),最終完成了實驗。</p><p>  21世紀是計算機全面應

101、用的時代,很多人不是在制造計算機而是在使用計算機。在使用計算機的人群中只有從事嵌入式系統(tǒng)應用的人才真正地進入到計算機系統(tǒng)內部軟硬件體系中,才能真正領會計算機的智能化本質并掌握智能化設計的知識。通過這次難得的實踐機會給了我很大收獲,不僅鞏固了原有的知識,并增強了動手能力,培養(yǎng)了面對問題的分析能力以及遇到困難如何應對。</p><p>  短暫的課程設計很快就要過去了,在本次單片機課程設計過程中我有了新的成長和收獲,

102、通過單片機課程設計,我不僅加深了對單片機理論的理解,將理論很好地應用到實際當中去,而且我還學會了如何去培養(yǎng)我們的創(chuàng)新精神,從而不斷地戰(zhàn)勝自己,超越自己。</p><p><b>  第七章 參考文獻</b></p><p>  [1] 王新穎 單片機原理及應用.北京大學出版社2008</p><p>  [2] 陳忠平 單片機基礎與最小系統(tǒng)實踐

103、.北京航空航天大學出版社</p><p>  [3] 竇振中 單片機外圍器件實用手冊存儲器分冊.北京航空航天大學出版</p><p>  [4] 沈慶陽,郭庭吉 8051單片機實踐與應用.清華大學出版社</p><p>  [5] 侯玉寶,李成群 基于Proteus的51系列單片機設計與仿真 電子工業(yè)出版社</p><p>  [6] 陳明熒

104、. 8051單片機課程設計實訓教程[M].北京:清華大學出版</p><p>  [7] 郁慧娣.微機系統(tǒng)及其接口技術[M].南京:東南大學出版社,1999年.</p><p>  [8] 何立民.單片機高級教程[M].北京:北京航空航天大學出版社,2003年.</p><p>  [9] 王毓銀.數(shù)字電路邏輯設計[M].北京:高等教育出版社.</p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論