版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 存檔資料 成績(jī): </p><p> 華東交通大學(xué)理工學(xué)院</p><p> 課 程 設(shè) 計(jì) 報(bào) 告 書(shū)</p><p> 所屬課程名稱(chēng) 單片機(jī)原理與應(yīng)用 </p><p> 題 目 萬(wàn)年電子歷
2、 </p><p> 分 院 電信分院 </p><p> 專(zhuān)業(yè)班級(jí) 2007級(jí)計(jì)算機(jī)科學(xué)與技術(shù)(2)班 </p><p> 學(xué) 號(hào) </p><p> 學(xué)生姓名 </p>&l
3、t;p> 指導(dǎo)教師 </p><p> 2010 年 7 月 16 日 </p><p> 華東交通大學(xué)理工學(xué)院</p><p> 課 程 設(shè) 計(jì)( 論 文 )任 務(wù) 書(shū)</p><p> 專(zhuān) 業(yè) 07計(jì)算機(jī)科學(xué)與技術(shù) 班 級(jí)(2)班 姓名 </p>&l
4、t;p> 一、課程設(shè)計(jì)(論文)題目 </p><p> 二、課程設(shè)計(jì)(論文)工作:自 2010 年 7 月 5 日起至 2010 年 7 月 16 日止。</p><p> 三、課程設(shè)計(jì)(論文)的目的要求和任務(wù)內(nèi)容:</p><p><b> 一.實(shí)驗(yàn)?zāi)康?lt;/b></p&g
5、t;<p> 通過(guò)本次課程設(shè)計(jì)達(dá)到如下目的:</p><p> 1、熟悉AT89C51單片機(jī)與時(shí)鐘芯片DS1302的應(yīng)用。</p><p> 2、熟悉時(shí)鐘時(shí)、分、秒計(jì)時(shí)方法,掌握編程技巧。</p><p> 3、掌握鍵盤(pán)的基本工作原理,鍵的識(shí)別,鍵抖動(dòng)和重鍵問(wèn)題的解決,鍵盤(pán)工作方式和鍵盤(pán)程序的編程。</p><p>
6、4、掌握七段碼LED顯示器的結(jié)構(gòu),七段碼LED顯示器的工作方式和顯示程序的編程。</p><p> 5、掌握串行通信程序的編寫(xiě)。</p><p><b> 二.設(shè)計(jì)要求</b></p><p> 利用AT89C51單片機(jī),時(shí)鐘芯片DS1302、七段碼LED顯示器、按鍵、MAX7219及常用外圍器件,設(shè)計(jì)一個(gè)具有動(dòng)態(tài)顯示功能的電子萬(wàn)年歷,具
7、體要求如下:</p><p> 1、設(shè)計(jì)實(shí)現(xiàn)電子萬(wàn)年歷的電路系統(tǒng)構(gòu)成框圖。</p><p> 2、能動(dòng)態(tài)顯示年、月、日、星期、小時(shí)、分鐘、秒。</p><p> 3、可用鍵盤(pán)進(jìn)行校對(duì)時(shí)間,以及日期時(shí)間的修改。</p><p> 學(xué)生簽名:_____________</p><p> 2010 年7 月16日&
8、lt;/p><p> 課程設(shè)計(jì)(論文)評(píng)閱意見(jiàn)</p><p> 評(píng)閱人 職稱(chēng) </p><p> 2010 年7 月16 日 </p><p><b> 目 錄</b></p><p> 課程設(shè)計(jì)任務(wù)書(shū)..........................
9、.2</p><p> 設(shè)計(jì)方案....... .........................6</p><p> 硬件設(shè)計(jì).................................7</p><p> 軟件設(shè)計(jì)................................15</p><p> 程序清單........
10、........................17</p><p> 課程設(shè)計(jì)心得............................24</p><p> 參考文獻(xiàn)................................25</p><p><b> 第二章 設(shè)計(jì)方案</b></p><p> 按
11、照系統(tǒng)設(shè)計(jì)功能的要求,初步確定系統(tǒng)由主控模塊、時(shí)控模塊、顯示驅(qū)動(dòng)及顯示模塊和鍵盤(pán)接口模塊共4個(gè)模塊組成,電路系統(tǒng)構(gòu)成框圖如圖所示。</p><p> 圖2.1電子萬(wàn)年歷電路系統(tǒng)構(gòu)成框圖</p><p> 主控芯片使用51系列AT89C51單片機(jī),時(shí)鐘芯片使用美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘DS1302。采用DS1302作為計(jì)時(shí)芯片,可以做到計(jì)時(shí)準(zhǔn)確。更重
12、要的是,DS1302可以在很小電流的后備電源(2.5~5.5V電源,再2.5V時(shí)耗電小于300nA),而且DS1302</p><p> 可以編程選擇多種充電電流來(lái)隊(duì)后備電源進(jìn)行慢速充電,可以保證后備電源基本不耗電。顯示驅(qū)動(dòng)采用MAX7219,MAX7219 是微處理器和共陰極八段八位LED 數(shù)碼管顯示、圖條/柱圖顯示或64 點(diǎn)陣顯示接口的小型串行輸入/輸出芯片。片內(nèi)包括BCD 譯碼器、多路掃描控制器、字和位驅(qū)
13、動(dòng)器和8×8 靜態(tài)RAM。外部只需要一個(gè)電阻設(shè)置所有LED 顯示器字段電流。MAX7219 和微處理器只需三根導(dǎo)線連接,每位顯示數(shù)字有一個(gè)地址由微處理器寫(xiě)入。允許使用者選擇每位是BCD 譯碼或不譯碼。使用者還可選擇停機(jī)模式、數(shù)字亮度控制、從1~8 選擇掃描位數(shù)和對(duì)所有LED 顯示器的測(cè)試模式。顯示模塊采用普通的共陰極四位一體八段LED數(shù)碼管。</p><p><b> 第三章 硬件設(shè)計(jì)<
14、;/b></p><p><b> 3.1系統(tǒng)硬件概述</b></p><p> 3.1.1主控制器AT89C51</p><p> ATMEL公司生產(chǎn)的AT89C51單片機(jī)采用高性能的靜態(tài)80C51設(shè)計(jì),并</p><p> 采用先進(jìn)工藝制造,還帶有非易失性Flash程序存儲(chǔ)器。它是一種高性能、低功耗的8
15、位CMOS微處理芯片,市場(chǎng)應(yīng)用最多。其主要特點(diǎn)如下:</p><p> 8KB Flash ROM,可以擦除1000次以上,數(shù)據(jù)保存10年。</p><p> 256字節(jié)內(nèi)部RAM;</p><p><b> 電源控制模式;</b></p><p><b> 時(shí)鐘可停止和恢復(fù);</b><
16、;/p><p><b> 空閑模式;</b></p><p><b> 掉電模式;</b></p><p><b> 6個(gè)中斷源;</b></p><p><b> 4個(gè)中斷優(yōu)先級(jí);</b></p><p><b>
17、 4個(gè)8位I/O口;</b></p><p> 全雙工增強(qiáng)型TUAR;</p><p> 3個(gè)16位定時(shí)/計(jì)數(shù)器:T0、T1(標(biāo)準(zhǔn)80C51)和增加的T2(捕獲和比較)</p><p> 全靜態(tài)工作方式:0~24MHZ</p><p> 3.1.2時(shí)鐘電路DS1302</p><p> DS130
18、2的性能特性:</p><p> 實(shí)時(shí)時(shí)鐘,可對(duì)秒、分、時(shí)、日、周、月以及帶閏年補(bǔ)償?shù)哪赀M(jìn)行比較;</p><p> 用于高速數(shù)據(jù)暫存的31*8位RAM;</p><p> 最少引腳的串行I/O;</p><p> 2.5~5.5V電壓工作范圍;</p><p> 2.5V時(shí)耗小于300nA;</p&g
19、t;<p> 用于時(shí)鐘或RAM數(shù)據(jù)讀/寫(xiě)的單字節(jié)或多字節(jié)(脈沖方式)數(shù)據(jù)傳送方式;</p><p><b> 簡(jiǎn)單的三線接口;</b></p><p> 可選的慢速充電(至Vcc1)的能力。</p><p> DS1302在任何數(shù)據(jù)傳送時(shí)必須先初始化,把RST腳置為高電平,然后把8位地址和命令字裝入移位寄存器,數(shù)據(jù)在SCL
20、K的上升沿被訪問(wèn)到。在開(kāi)始8個(gè)時(shí)鐘周期,把命令字節(jié)裝入移位寄存器后,另外的時(shí)鐘周期在讀操作時(shí)輸出數(shù)據(jù),在寫(xiě)操作時(shí)寫(xiě)入數(shù)據(jù)。時(shí)鐘脈沖的個(gè)數(shù)在單字節(jié)方式下為8+8,在多字節(jié)方式下為8+字節(jié)數(shù),最大可達(dá)248字節(jié)數(shù)。如果在傳送過(guò)程中置RST腳為低電平,則會(huì)終止本次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc≥2.5V之前,RST腳必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。</p><p&
21、gt; DS1302的控制字如表所示。控制字節(jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫(xiě)入到DS1302中。位6如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù);為1則表示存取RAM數(shù)據(jù)。位5~1(A4~A0)指示操作單元的地址。最低有效位(位0)如果為0,則表示藥進(jìn)行寫(xiě)操作;為1表示進(jìn)行讀操作??刂谱止?jié)總是從最低位開(kāi)始輸入/輸出。</p><p> 為了提高對(duì)32個(gè)地址尋址能力(地址/命令位1~5=邏輯1
22、),可以把時(shí)鐘/日歷或RAM寄存器規(guī)定為多字節(jié)(burst)方式。位6規(guī)定時(shí)鐘或RAM,而位0規(guī)定讀或?qū)?。在時(shí)鐘/日歷寄存器中的地址9~31或RAM寄存器中的地址31不能存儲(chǔ)數(shù)據(jù)。在多字節(jié)方式下,讀或?qū)憦牡刂?的位0開(kāi)始。必須按數(shù)據(jù)傳送的次序?qū)懽钕鹊?個(gè)寄存器。但是,當(dāng)以多字節(jié)方式寫(xiě)RAM時(shí),為了傳送數(shù)據(jù)不必寫(xiě)所有的31字節(jié),不管是否謝了全部31字節(jié),所寫(xiě)的每一字節(jié)都將傳送至RAM。</p><p> 表3.1
23、 DS1302控制字</p><p> DS1302共有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式。其日歷、時(shí)間寄存器及其控制字如上表所示,其中奇數(shù)為讀操作,偶數(shù)為寫(xiě)操作。</p><p> 時(shí)鐘暫停:秒寄存器的位7定義位時(shí)鐘暫停位。當(dāng)它為1時(shí),DS1302停止振蕩,進(jìn)入低功耗的備份方式,通常在對(duì)DS1302進(jìn)行寫(xiě)操作時(shí)(如進(jìn)入時(shí)鐘調(diào)整程序),停止振蕩
24、。當(dāng)它為0時(shí),時(shí)鐘將開(kāi)始啟動(dòng)。</p><p> AM-PM/12-24小時(shí)方式:小時(shí)寄存器的位7定義為12或24小時(shí)方式選擇位。它為高電平時(shí),選擇12小時(shí)方式。在此方式下,位5為第二個(gè)10小時(shí)位(20~23h)。</p><p> DS1302的晶振選用32768Hz,電容推薦值為6pF。因?yàn)檎袷庮l率較低,也可以不接電容,對(duì)計(jì)時(shí)精度影響不大。</p><p>
25、 3.1.3顯示驅(qū)動(dòng)MAX7219</p><p> ● MAX7219 和單片計(jì)算機(jī)連接有三條引線(DIN、CLK、LOAD),采用16 位數(shù)據(jù)串行移位接收方式</p><p> ● 八位LED 顯示、圖條/柱圖顯示或64 點(diǎn)陣顯示</p><p> ● 包括BCD 譯碼器、多路掃描控制器、字和位驅(qū)動(dòng)器和8×8 靜態(tài)RAM</p>
26、<p> ● 可選擇停機(jī)模式、數(shù)字亮度控制、從1~8 選擇掃描位數(shù)和對(duì)所有LED 顯示器的測(cè)試模式</p><p> ● 最多能驅(qū)動(dòng)8 位LED 顯示器</p><p> ● 內(nèi)部RAM 地址01~08H 分別對(duì)應(yīng)于DIG0~DIG7。</p><p> ● 掃描界限寄存器(地址0BH):該寄存器中D0~D3 位數(shù)據(jù)設(shè)定值為0~7H,設(shè)定值表示顯示
27、器動(dòng)態(tài)掃描個(gè)數(shù)位1~8。</p><p> ● 停機(jī)寄存器(地址0CH):當(dāng)D0=0 時(shí),MAX721 處于停機(jī)狀態(tài);當(dāng)D0=1 時(shí),處于正常工作狀態(tài)。</p><p> ● 顯示測(cè)試寄存器(地址0FH):當(dāng)D0=0時(shí),MAX7219 按設(shè)定模式正常工作;當(dāng)D0=1 時(shí),處于測(cè)試狀態(tài)。在該狀態(tài)下,不管MAX7219 處于什么模式,全部LED 將按最大亮度顯示。</p>&
28、lt;p> ● 亮度寄存器(地址0AH):亮度可以用硬件和軟件兩種方法調(diào)節(jié)亮度寄存器中的D0~D3位可以控制LED 顯示器的亮度。</p><p> MAX7219 通過(guò)D11~D84 位地址位譯碼,可尋址14 個(gè)內(nèi)部寄存器,分別是8 個(gè)LED 顯示位寄存器,5 個(gè)控制寄存器和1 個(gè)空操作寄存器。</p><p> LED 顯示寄存器由內(nèi)部8 × 8 靜態(tài)RAM 構(gòu)成
29、,操作者可直接對(duì)位寄存器進(jìn)行個(gè)別尋址, 以刷新和保持?jǐn)?shù)據(jù), 只要V +超過(guò)2 V(一般為+ 5V)。 </p><p> 控制寄存器包括: 譯碼模式, 顯示亮度調(diào)節(jié), 掃描限制(選擇掃描位數(shù)),關(guān)斷和顯示測(cè)試寄存器。</p><p> MAX7219 的驅(qū)動(dòng)程序首先必須對(duì)5 個(gè)控制寄存器初始設(shè)置即初始化, 各控制寄存器設(shè)置含義如下:譯碼模式選擇寄存器(地址= F9H);MAX7219
30、有兩種譯碼方式:B 譯碼方式和不譯碼方式。當(dāng)選擇不譯碼時(shí), 8 個(gè)數(shù)據(jù)為分別一一對(duì)應(yīng)7 個(gè)段和小數(shù)點(diǎn)位;B 譯碼方式是BCD 譯碼,直接送數(shù)據(jù)就可以顯示。實(shí)際應(yīng)用中可以按位設(shè)置選擇B 譯碼或是不譯碼方式。</p><p> 掃描限制寄存器: 地址= FBH;用于設(shè)置顯示的LED 個(gè)數(shù)( 1 ~8 ) , 比如當(dāng)設(shè)置為0xX4 時(shí),LED 0~5 顯示。</p><p> 亮度調(diào)節(jié)寄存器
31、: 地址= FAH;共有16 級(jí)選擇,用于LED 顯示亮度的強(qiáng)弱設(shè)置。</p><p> 關(guān)斷模式寄存器:地址= FCH;有兩種模式選擇:一種是關(guān)斷狀態(tài)模式(D0 = 0);一種是正常操作狀態(tài)(D0 = 1),通常選擇正常操作狀態(tài)。</p><p> 顯示測(cè)試寄存器:地址= FFH;有兩種選擇用于設(shè)置LED 是測(cè)試狀態(tài)還是正常操作狀態(tài):當(dāng)在測(cè)試狀態(tài)時(shí)(D0 = 1)各位全應(yīng)亮,一般選擇
32、正常操作狀態(tài)(D0 = 0)。</p><p> 3.2主要單元電路的設(shè)計(jì)</p><p><b> 3.2.1顯示電路</b></p><p> 顯示部分采用普通的共陰數(shù)碼管顯示,采用動(dòng)態(tài)掃描,以減少硬件電</p><p> 表3.2 MAX7219引腳功能</p><p> 路。年
33、月日時(shí)分秒星期共需要17位數(shù)碼顯示,考慮到一次掃描17位數(shù)碼</p><p> 管顯示時(shí)會(huì)出現(xiàn)閃爍情況,故采用動(dòng)態(tài)掃描,可將數(shù)碼管數(shù)量減少至9位,</p><p> 也就是兩個(gè)四位一體八段LED顯示數(shù)碼管和一個(gè)一位LED數(shù)碼管設(shè)計(jì)時(shí)數(shù)碼管同時(shí)掃描,顯示時(shí)采用串行口輸出段碼,用MAX7219驅(qū)動(dòng)數(shù)碼管。</p><p> 圖3.2 MAX7219主要引腳<
34、;/p><p><b> 3.2.2鍵盤(pán)接口</b></p><p> 鍵盤(pán)在單片機(jī)系統(tǒng)中是一個(gè)很重要的部件。為了輸入數(shù)據(jù)、查詢(xún)和控制系統(tǒng)的工作狀態(tài),都要用到鍵盤(pán),鍵盤(pán)是人工干預(yù)計(jì)算機(jī)的主要手段。</p><p> 鍵盤(pán)可分為編碼和非編碼鍵盤(pán)兩種。編碼鍵盤(pán)采用硬件線線路來(lái)實(shí)現(xiàn)鍵盤(pán)編碼,每按下一個(gè)鍵,鍵盤(pán)能自動(dòng)生成按鍵代碼,鍵數(shù)較多,而且還具有
35、去抖動(dòng)功能。這種鍵盤(pán)使用方便,但硬件較復(fù)雜,PC機(jī)所用的鍵盤(pán)就屬于這種。非編碼鍵盤(pán)僅提供按鍵開(kāi)關(guān)工作狀態(tài),其他工作由軟件完成,這種鍵盤(pán)鍵數(shù)較少,硬件簡(jiǎn)單,一般在單片機(jī)應(yīng)用系統(tǒng)中廣泛使用。此處主要介紹該類(lèi)非編碼鍵盤(pán)及其與MCS—51型單片機(jī)的接口。</p><p><b> 3.2.3時(shí)鐘電路</b></p><p> 3.2.3.1 DS1302工作方式簡(jiǎn)介及數(shù)據(jù)
36、操作原理</p><p> DS1302可以對(duì)年、月、日、星期、時(shí)、分、秒進(jìn)行計(jì)時(shí), 且具有閏年補(bǔ)償功能, 工作電壓寬達(dá)2.5~5.5V。采用三線接口與CPU進(jìn)行同步通信, 并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)33x8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。DS1302是的DS1202升級(jí)產(chǎn)品, 與DS1202兼容, 但增加了主電源/后背電源雙電源引腳, 同時(shí)提供了對(duì)后背電
37、源進(jìn)行涓細(xì)電流充電的能力。</p><p> DS1302時(shí)鐘芯片包括實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)的靜態(tài)RAM。它經(jīng)過(guò)一個(gè)簡(jiǎn)單的串行接口與微處理器通信。實(shí)時(shí)時(shí)鐘/日歷提供秒、分、時(shí)、日、周、月和年等信息。對(duì)于小于31天的月和月末的日期自動(dòng)進(jìn)行調(diào)整,還包括閏年校正的功能。時(shí)鐘的運(yùn)行可以采用24<小>時(shí)或帶AM/PM的12小時(shí)格式。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多字節(jié)的時(shí)鐘信號(hào)或
38、RAM數(shù)據(jù)。</p><p> DS1302有主電源/后備電源雙電源引腳:Vcc1在單電源與電池供電的系統(tǒng)中提供低電源,并提供低功率的電磁備份;Vcc1在雙電池系統(tǒng)中提供主電源。在這種運(yùn)行方式中,Vcc1里連接到后備電源,以便在沒(méi)有主電源的情況下能保存時(shí)間信息以及數(shù)據(jù)。DS1302由Vcc1或Vcc2中較打大者供電。當(dāng)Vcc2>(Vcc1+0.2V)時(shí),Vcc2給DS1302供電;當(dāng)Vcc2<Vcc1時(shí),DS1
39、302由Vcc1供電。</p><p> 圖3.5 DS1302</p><p> DS1302在任何數(shù)據(jù)傳送時(shí)必須先初始化,把RST腳置為高電平,然后把8位地址和命令字裝入移位寄存器,數(shù)據(jù)在SCLK的上升沿被訪問(wèn)到。在開(kāi)始8個(gè)時(shí)鐘周期,把命令字節(jié)裝入移位寄存器后,另外的時(shí)鐘周期在讀操作時(shí)輸出數(shù)據(jù),在寫(xiě)操作時(shí)寫(xiě)入數(shù)據(jù)。時(shí)鐘脈沖的個(gè)數(shù)在單字節(jié)方式下為8+8,在多字節(jié)方式下為8+字節(jié)數(shù),
40、最大可達(dá)248字節(jié)數(shù)。如果在傳送過(guò)程中置RST腳為低電平,則會(huì)終止本次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc≥2.5V之前,RST腳必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。</p><p> DS1302的控制字如圖所示??刂谱止?jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫(xiě)入到DS1302中。位6如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù);為1則表示存取RAM數(shù)
41、據(jù)。位5~1(A4~A0)指示操作單元的地址。最低有效位(位0)如果為0,則表示藥進(jìn)行寫(xiě)操作;為1表示進(jìn)行讀操作??刂谱止?jié)總是從最低位開(kāi)始輸入/輸出。</p><p> 為了提高對(duì)32個(gè)地址尋址能力(地址/命令位1~5=邏輯1),可以把時(shí)鐘/日歷或RAM寄存器規(guī)定為多字節(jié)(burst)方式。位6規(guī)定時(shí)鐘或RAM,而位0規(guī)定讀或?qū)?。在時(shí)鐘/日歷寄存器中的地址9~31或RAM寄存器中的地址31不能存儲(chǔ)數(shù)據(jù)。在多字節(jié)
42、方式下,讀或?qū)憦牡刂?的位0開(kāi)始。必須按數(shù)據(jù)傳送的次序?qū)懽钕鹊?個(gè)寄存器。但是,當(dāng)以多字節(jié)方式寫(xiě)RAM時(shí),為了傳送數(shù)據(jù)不必寫(xiě)所有的31字節(jié),不管是否謝了全部31字節(jié),所寫(xiě)的每一字節(jié)都將傳送至RAM。</p><p> DS1302共有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式。其日歷、時(shí)間寄存器及其控制字如下表所示,其中奇數(shù)為讀操作,偶數(shù)為寫(xiě)操作。</p><
43、p> 表3.3 DS1302控制字</p><p> 時(shí)鐘暫停:秒寄存器的位7定義位時(shí)鐘暫停位。當(dāng)它為1時(shí),DS1302停止振蕩,進(jìn)入低功耗的備份方式,通常在對(duì)DS1302進(jìn)行寫(xiě)操作時(shí)(如進(jìn)入時(shí)鐘調(diào)整程序),停止振蕩。當(dāng)它為0時(shí),時(shí)鐘將開(kāi)始啟動(dòng)。</p><p> AM-PM/12-24小時(shí)方式:小時(shí)寄存器的位7定義為12或24小時(shí)方式選擇位。它為高電平時(shí),選擇12小時(shí)方式。
44、在此方式下,位5為第二個(gè)10小時(shí)位(20~23h)。</p><p> DS1302的晶振選用32768Hz,電容推薦值為6pF。因?yàn)檎袷庮l率較低,也可以不接電容,對(duì)計(jì)時(shí)精度影響不大。</p><p><b> 第四章 軟件設(shè)計(jì)</b></p><p><b> 4.1程序設(shè)計(jì)</b></p><
45、p> 電子萬(wàn)年歷的程序主要包括3個(gè)方面的內(nèi)容:一是DS1302從單片機(jī)中讀取數(shù)據(jù)進(jìn)行計(jì)數(shù),二是利用按鍵進(jìn)行時(shí)間的調(diào)整,三是MAX7219從單片機(jī)中讀取數(shù)據(jù)驅(qū)動(dòng)LED數(shù)碼管顯示時(shí)間。</p><p> AT89C51單片機(jī)主要I/O口的分配,P2.0-P2.2分別接MAX7219的DIN,LOAD,CLK三個(gè)功能端,P3接查詢(xún)式按鍵,P1.0-P1.2分別接DS1302的CLK,IO,RST端。</
46、p><p><b> 4.2程序流程圖</b></p><p> 4.2.1顯示驅(qū)動(dòng)程序流程圖</p><p> 圖4. 1 MAX7219顯示驅(qū)動(dòng)程序流程圖</p><p> 4.2.2時(shí)間控制流程圖</p><p> 圖4.2 DS1302時(shí)控流程圖</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的字庫(kù)</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; //設(shè)置掃描限制</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、 //亮度調(diào)節(jié)</p><p><b> y=oxoc;</b></p><p><b> wr();</b></p><p> x=oxfc; //關(guān)斷模式</p><p><b> y=ox01;</b></p>
65、<p><b> wr();</b></p><p><b> }</b></p><p> void InputByte(uchar dd) //寫(xiě)一個(gè)字節(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個(gè)數(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); //寫(xiě)地址</p><p> InputByte(num); //寫(xiě)數(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> //初始化設(shè)置時(shí)間,2008年5月27號(hào),23時(shí)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、 //非寫(xiě)保護(hù)</p><p> WriteSec(ox00); //秒</p><p> WriteMin(ox58); //分</p><p> WriteHr(ox23); //時(shí)
76、</p><p> WriteDay(ox27); //日</p><p> WriteMn(ox05); //月</p><p> WriteYs(ox08); //年</p><
77、p> WriteWe(ox02); //星期</p><p><b> //7219設(shè)置</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í)數(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); //讀分?jǐn)?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) //小時(shí)</p><p><b> if(flag)</b></p><
94、p> {Read(ox85); //讀小時(shí)數(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); //讀分?jǐn)?shù)據(jù)</p><p><b> fen1=dd;</b></p><p><b> }</b></p><p> if(p37==0)
97、 //調(diào)整標(biāo)志</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) //調(diào)整標(biāo)志</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、章 程序設(shè)計(jì)心得</p><p> 本次實(shí)驗(yàn)主要涉及了單片機(jī)I/O的使用、七段碼LED顯示、按鍵識(shí)別以及雙機(jī)串行通信方面的知識(shí)。</p><p> 首先設(shè)計(jì)實(shí)現(xiàn)電子萬(wàn)年歷并不困難,之前有過(guò)類(lèi)似的實(shí)驗(yàn)。實(shí)現(xiàn)串行通信是這次的難點(diǎn),我們?cè)趯?shí)驗(yàn)中首先實(shí)驗(yàn)了單工通信,解決了這方面的困難后在進(jìn)一步進(jìn)行雙工的實(shí)現(xiàn),最終完成了實(shí)驗(yàn)。</p><p> 21世紀(jì)是計(jì)算機(jī)全面應(yīng)
101、用的時(shí)代,很多人不是在制造計(jì)算機(jī)而是在使用計(jì)算機(jī)。在使用計(jì)算機(jī)的人群中只有從事嵌入式系統(tǒng)應(yīng)用的人才真正地進(jìn)入到計(jì)算機(jī)系統(tǒng)內(nèi)部軟硬件體系中,才能真正領(lǐng)會(huì)計(jì)算機(jī)的智能化本質(zhì)并掌握智能化設(shè)計(jì)的知識(shí)。通過(guò)這次難得的實(shí)踐機(jī)會(huì)給了我很大收獲,不僅鞏固了原有的知識(shí),并增強(qiáng)了動(dòng)手能力,培養(yǎng)了面對(duì)問(wèn)題的分析能力以及遇到困難如何應(yīng)對(duì)。</p><p> 短暫的課程設(shè)計(jì)很快就要過(guò)去了,在本次單片機(jī)課程設(shè)計(jì)過(guò)程中我有了新的成長(zhǎng)和收獲,
102、通過(guò)單片機(jī)課程設(shè)計(jì),我不僅加深了對(duì)單片機(jī)理論的理解,將理論很好地應(yīng)用到實(shí)際當(dāng)中去,而且我還學(xué)會(huì)了如何去培養(yǎng)我們的創(chuàng)新精神,從而不斷地戰(zhàn)勝自己,超越自己。</p><p><b> 第七章 參考文獻(xiàn)</b></p><p> [1] 王新穎 單片機(jī)原理及應(yīng)用.北京大學(xué)出版社2008</p><p> [2] 陳忠平 單片機(jī)基礎(chǔ)與最小系統(tǒng)實(shí)踐
103、.北京航空航天大學(xué)出版社</p><p> [3] 竇振中 單片機(jī)外圍器件實(shí)用手冊(cè)存儲(chǔ)器分冊(cè).北京航空航天大學(xué)出版</p><p> [4] 沈慶陽(yáng),郭庭吉 8051單片機(jī)實(shí)踐與應(yīng)用.清華大學(xué)出版社</p><p> [5] 侯玉寶,李成群 基于Proteus的51系列單片機(jī)設(shè)計(jì)與仿真 電子工業(yè)出版社</p><p> [6] 陳明熒
104、. 8051單片機(jī)課程設(shè)計(jì)實(shí)訓(xùn)教程[M].北京:清華大學(xué)出版</p><p> [7] 郁慧娣.微機(jī)系統(tǒng)及其接口技術(shù)[M].南京:東南大學(xué)出版社,1999年.</p><p> [8] 何立民.單片機(jī)高級(jí)教程[M].北京:北京航空航天大學(xué)出版社,2003年.</p><p> [9] 王毓銀.?dāng)?shù)字電路邏輯設(shè)計(jì)[M].北京:高等教育出版社.</p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)at89c51
- at89c51單片機(jī)課程設(shè)計(jì)-----搶答器
- at89c51基于單片機(jī)溫度控制系統(tǒng)設(shè)計(jì)說(shuō)明書(shū)
- 基于89c51單片機(jī)的秒表課程設(shè)計(jì)說(shuō)明書(shū)
- 課程設(shè)計(jì)--基于at89c51單片機(jī)控制步進(jìn)電機(jī)
- 基于at89c51單片機(jī)音樂(lè)盒課程設(shè)計(jì)
- 基于at89c51單片機(jī)的電機(jī)控制綜合課程設(shè)計(jì)
- at89c51基于單片機(jī)智能澆花系統(tǒng)設(shè)計(jì)說(shuō)明書(shū)
- 89c51單片機(jī)課程設(shè)計(jì)
- at89c51單片機(jī)外文翻譯
- at89c51單片機(jī)控制溫度
- at89c51單片機(jī)控制溫度
- 單片機(jī)外文翻譯 ----at89c51單片機(jī)介紹
- 基于單片機(jī)at89c51的電子時(shí)鐘的課程設(shè)計(jì)
- 單片機(jī)畢業(yè)設(shè)計(jì)外文翻譯單片機(jī)at89c51
- 單片機(jī)課程設(shè)計(jì)--at89c51 單片機(jī)控制的交通燈控制電路
- 基于at89c51單片機(jī)定時(shí)鬧鐘設(shè)計(jì)
- 基于at89c51單片機(jī)數(shù)控電源
- 基于at89c51單片機(jī)的多人搶答器設(shè)計(jì)課程設(shè)計(jì)
- 基于單片機(jī)at89c51控制的鍵控流水燈課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論