版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 單片機(jī)課程設(shè)計(jì)</b></p><p> 題目名稱: 電子萬年歷 </p><p> 姓 名: </p><p> 學(xué) 號(hào): </p><p> 系
2、 別: 電子信息工程系 </p><p> 班 級(jí): 電子信息工程(1)班 </p><p> 指導(dǎo)老師: </p><p> 完成時(shí)間: 2013年1月2日 </p><p><b> 目錄
3、</b></p><p> 一、摘要****************************************************************3 </p><p> 二、設(shè)計(jì)要求和目的**************************************************3 </p><p> 三、課程設(shè)計(jì)任
4、務(wù)*****************************************************3</p><p> 四、DS1302模塊******************************************************3-7</p><p> 五、51單片機(jī)最小系統(tǒng)模塊***************************************
5、**7-9</p><p> 六、顯示器12864模塊************************************9-14</p><p> 七、電子萬年歷的電路圖和PCB圖********************************15</p><p> 八、電子萬年歷的功能介紹********************************
6、*********15-16</p><p> 九、系統(tǒng)軟件設(shè)計(jì)****************************************************16-21</p><p> 十、個(gè)人感想**********************************************************21</p><p><b>
7、; 一、摘要</b></p><p> 隨著社會(huì)、科技的發(fā)展,人類得知時(shí)間,從觀太陽、擺鐘到現(xiàn)在電子鐘,不斷研究、創(chuàng)新。為了在觀測(cè)時(shí)間的同時(shí),能夠了解其它與人類密切相關(guān)的信息,比如溫度、星期、日期等,電子萬年歷誕生了,它集時(shí)間、日期、星期和溫度功能于一身,具有讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢(shì),具有廣闊的市場(chǎng)前景。 該電子萬年歷主要采用AT89C
8、51單片機(jī)作為主控核心,由DS1302時(shí)鐘芯片提供時(shí)鐘、LED動(dòng)態(tài)掃描顯示屏顯示。AT89C51單片機(jī)是由Atmel公司推出的,功耗小,電壓可選用4~6V電壓供電;DS1302時(shí)鐘芯片是美國(guó)DALLAS公司推出的具有涓細(xì)電流充電功能的低功耗實(shí)時(shí)時(shí)鐘芯片,它可以對(duì)年、月、日、星期、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能,而且DS1302的使用壽命長(zhǎng),誤差?。粩?shù)字顯示是采用的LED液晶顯示屏來顯示,可以同時(shí)顯示年、月、日、星期、時(shí)、分
9、、秒和溫度等信息。此外,該電子萬年歷還具有時(shí)間校準(zhǔn)等功能。 關(guān)鍵詞:時(shí)鐘電路; 時(shí)鐘芯片DS1302;LED動(dòng)態(tài)掃描; 單片機(jī)AT89C51;MAX7219;</p><p><b> 二、設(shè)計(jì)要求和目的</b></p><p> 要求:利用51單片機(jī)芯片和DS1302芯片設(shè)計(jì)電子萬年歷</p><p> 目的:1. 注重培養(yǎng)綜
10、合運(yùn)用所學(xué)知識(shí)、獨(dú)立分析和解決實(shí)際問題的能力,培養(yǎng)創(chuàng)新意識(shí)和創(chuàng)新能力,并獲得科學(xué)研究的基礎(chǔ)訓(xùn)練。</p><p> 2. 了解所選擇的51單片機(jī)芯片各個(gè)引腳功能,按鍵識(shí)別的相關(guān)原理,并鞏固學(xué)習(xí)單片機(jī)的相關(guān)內(nèi)容知識(shí)。</p><p> 3. 通過軟硬件設(shè)計(jì)實(shí)現(xiàn)利用51單片機(jī)芯片完成電子萬年歷的顯示</p><p><b> 三、課程設(shè)計(jì)任務(wù)</b
11、></p><p> 1. 查閱相關(guān)文獻(xiàn)資料,熟悉所選51單片機(jī)芯片;</p><p> 2. 總體設(shè)計(jì)方案規(guī)劃,通過按鍵輸入調(diào)整,在LCD液晶模塊上能顯示期、時(shí)、分、秒和陰歷月、日,在顯示農(nóng)歷時(shí)間時(shí),能標(biāo)明是否為閏年。</p><p> 3. 系統(tǒng)硬件設(shè)計(jì),熟悉單片機(jī)最小系統(tǒng)構(gòu)建,DS1302時(shí)鐘芯片工作原理。</p><p>
12、 4. 系統(tǒng)軟件設(shè)計(jì),用C語言編程實(shí)現(xiàn)年、月、日、星期、時(shí)、分、秒顯示功能。</p><p> 5. 設(shè)計(jì)心得體會(huì)及總結(jié)。</p><p> 四、DS1302模塊</p><p> DS1302是DALLAS公司推出的涓流充電時(shí)鐘芯片,內(nèi)含一個(gè)實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)靜態(tài)RAM,可以通過串行接口與單片機(jī)進(jìn)行通信。實(shí)時(shí)時(shí)鐘/日歷電路提供秒、分、時(shí)、日、星期、月
13、、年的信息,每個(gè)月的天數(shù)和閏年的天數(shù)可以自動(dòng)調(diào)制,時(shí)鐘操作可通過AM/PM標(biāo)志位決定采用24或12小時(shí)時(shí)間格式。DS1302與單片機(jī)之間能簡(jiǎn)單地采用同步串行的方式進(jìn)行通信,僅需三根I/O線:復(fù)位(RST)、I/O數(shù)據(jù)線、串行時(shí)鐘(SCLK)。時(shí)鐘/RAM的讀/寫數(shù)據(jù)以一字節(jié)或多達(dá)31字節(jié)的字符組方式通信。DS1302工作時(shí)功耗很低,保持?jǐn)?shù)據(jù)和時(shí)鐘信息時(shí),功耗小于1mW。</p><p> 2、DS1302引腳分
14、布及含義</p><p> 圖10-1 DS1302引腳圖</p><p> X1,X2:32.768KHz晶振引腳。GND:共地端。RST:復(fù)位。I/O:數(shù)據(jù)輸入/輸出。SCLK:串行時(shí)鐘。VCC1:電池引腳。VCC2:主電源引腳。</p><p> DS1302的內(nèi)部結(jié)構(gòu)如圖所示,主要組成部分為:移位寄存器、控制邏輯、振蕩器、實(shí)時(shí)時(shí)鐘以及RAM。雖然數(shù)據(jù)分
15、為兩種,但是對(duì)單片機(jī)的程序而言,其實(shí)是一樣的,就是對(duì)特定的地址進(jìn)行讀寫操作。</p><p> 圖10-2 DS1302內(nèi)部結(jié)構(gòu)圖</p><p> DS1302含充電電路,可以對(duì)作為后備電源的可充電電池充電,并可選擇充電使能和串入的二極管數(shù)目,以調(diào)節(jié)電池充電電壓。不過對(duì)我們目前而言,最需要熟悉的是和時(shí)鐘相關(guān)的部分功能,對(duì)于其他參數(shù)請(qǐng)參閱數(shù)據(jù)手冊(cè)。</p><p&g
16、t; 3、DS1302工作原理</p><p> DS1302工作時(shí)為了對(duì)任何數(shù)據(jù)傳送進(jìn)行初始化,需要將復(fù)位腳(RST)置為高電平且將8位地址和命令信息裝入移位寄存器。數(shù)據(jù)在時(shí)鐘(SCLK)的上升沿串行輸入,前8位指定訪問地址,命令字裝入移位寄存器后,在之后的時(shí)鐘周期,讀操作時(shí)輸出數(shù)據(jù),寫操作時(shí)輸入數(shù)據(jù)。時(shí)鐘脈沖的個(gè)數(shù)在單字節(jié)方式下為8+8 (8位地址+8位數(shù)據(jù)),在多字節(jié)方式下為8加最多可達(dá)248的數(shù)據(jù)。&
17、lt;/p><p> 4、DS1302的寄存器和控制命令</p><p> 對(duì)DS1302的操作就是對(duì)其內(nèi)部寄存器的操作,DS1302內(nèi)部共有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式。此外,DS1302還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器以外的寄存器。日歷、時(shí)間寄存器及控
18、制字如表所示。</p><p> 表10-1 日歷、時(shí)鐘寄存器與控制字對(duì)照表</p><p> 表10-2 內(nèi)部主要寄存器分布表</p><p> 最后一位RD/WR*為“0”時(shí)表示進(jìn)行寫操作,為“1”時(shí)表示讀操作。</p><p> DS1302內(nèi)部寄存器列表如下表所示。</p><p> DS1302內(nèi)部
19、的RAM分為兩類:一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元為一個(gè)8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;再一類為突發(fā)方式下的RAM,此方式下可一次性讀寫所有的RAM的31個(gè)字節(jié),命令控制字為FEH(寫)和FFH(讀)。</p><p> 接下來討論如何通過外部接口來訪問控制寄存器和RAM。單片機(jī)是通過簡(jiǎn)單的同步串行通訊與DS1302通訊的,每次通訊都必須由單片機(jī)發(fā)起,無論是讀還
20、是寫操作,單片機(jī)都必須先向DS1302寫入一個(gè)命令幀,這個(gè)幀的格式如表10-1所示,最高位Bit7固定為1,Bit6決定操作是針對(duì)RAM還是時(shí)鐘寄存器,接著的5個(gè)Bit是RAM或時(shí)鐘寄存器在DS1302的內(nèi)部地址,最后一個(gè)Bit表示這次操作是讀操作或是寫操作。</p><p> 物理上,DS1302的通訊接口由3個(gè)口線組成,即RST,SCLK,I/O。其中RST從低電平變成高電平啟動(dòng)一次數(shù)據(jù)傳輸過程,SCLK是
21、時(shí)鐘線,I/O口是數(shù)據(jù)線。具體的讀寫時(shí)序參考圖10-3,注意的是,無論是哪種同步通訊類型的串行接口,都是對(duì)時(shí)鐘信號(hào)敏感的,而且一般輸入寫入有效是在上升沿,讀出有效是在下降沿(DS1302也是如此),如果不是特別確定,則把程序設(shè)計(jì)成如下:平時(shí)SCLK保持低電平,在時(shí)鐘變動(dòng)前設(shè)置數(shù)據(jù),在時(shí)鐘變動(dòng)后讀取數(shù)據(jù),即數(shù)據(jù)操作總是在SCLK保持為低電平的時(shí)候,相鄰的操作之間間隔有一個(gè)上升沿和一個(gè)下降沿。</p><p> 圖
22、10-3 單個(gè)字節(jié)的讀寫時(shí)序圖</p><p> DS1302的連接電路圖如下圖</p><p> 五、51單片機(jī)最小系統(tǒng)模塊</p><p><b> 電路圖如下圖</b></p><p> 下面著重介紹時(shí)鐘電路和復(fù)位電路。</p><p> 1)時(shí)鐘電路單片機(jī)工作時(shí),從取指令到譯碼
23、再進(jìn)行微操作,必須在時(shí)鐘信號(hào)控制下才能有序地</p><p> 進(jìn)行,時(shí)鐘電路就是為單片機(jī)工作提供基本時(shí)鐘的。單片機(jī)的時(shí)鐘信號(hào)通常有兩種產(chǎn)生方式:</p><p> 內(nèi)部時(shí)鐘方式和外部時(shí)鐘方式。在單片機(jī)XTAL1和XTAL2引腳上跨接上一個(gè)晶振和兩個(gè)</p><p> 穩(wěn)頻電容,可以與單片機(jī)片內(nèi)的電路構(gòu)成一個(gè)穩(wěn)定的自激振蕩器。晶振的取值范圍一般為</p&
24、gt;<p> 0~24MHz,常用的晶振頻率有6MHz、12 MHz、11.0592 MHz、24 MHz等。一些新型的</p><p> 單片機(jī)還可以選擇更高的頻率。外接電容的作用是對(duì)振蕩器進(jìn)行頻率微調(diào),使振蕩信號(hào)頻率</p><p> 與晶振頻率一致,同時(shí)起到穩(wěn)定頻率的作用,一般選用20~30pF的瓷片電容。</p><p> 外部時(shí)鐘方
25、式則是在單片機(jī)XTAL1引腳上外接一個(gè)穩(wěn)定的時(shí)鐘信號(hào)源,它一般適</p><p> 用于多片單片機(jī)同時(shí)工作的情況,使用同一時(shí)鐘信號(hào)可以保證單片機(jī)的工作同步。時(shí)序是單片機(jī)在執(zhí)行指令時(shí)CPU發(fā)出的控制信號(hào)在時(shí)間上的先后順序。AT89C51單片機(jī)的時(shí)序概念有4個(gè),可用定時(shí)單位來說明,包括振蕩周期、時(shí)鐘周期、機(jī)器周期和指令周期。 振蕩周期:是片內(nèi)振蕩電路或片外為單片機(jī)提供的脈沖信號(hào)的周期。時(shí)序中1個(gè)振蕩周期
26、定義為1個(gè)節(jié)拍,用P表示。 時(shí)鐘周期:振蕩脈沖送入內(nèi)部時(shí)鐘電路,由時(shí)鐘電路對(duì)其二分頻后輸出的時(shí)鐘脈沖周期稱為時(shí)鐘周期。時(shí)鐘周期為振蕩周期的2倍。時(shí)序中1個(gè)時(shí)鐘周期定義為1個(gè)狀態(tài),用S表示。每個(gè)狀態(tài)包括2個(gè)節(jié)拍,用P1、P2表示。 機(jī)器周期:機(jī)器周期是單片機(jī)完成一個(gè)基本操作所需要的時(shí)間。一條指令的執(zhí)行需要一個(gè)或幾個(gè)機(jī)器周期。一個(gè)機(jī)器周期固定的由6個(gè)狀態(tài)S1~S6組成。</p><p> 指
27、令周期:執(zhí)行一條指令所需要的時(shí)間稱為指令周期。一般用指令執(zhí)行所需機(jī)器周期數(shù)表示。AT89C51單片機(jī)多數(shù)指令的執(zhí)行需要1個(gè)或2個(gè)機(jī)器周期,只有乘除兩條指令的執(zhí)行需要4個(gè)機(jī)器周期。 了解了以上幾個(gè)時(shí)序的概念后,我們就可以很快的計(jì)算出執(zhí)行一條指令所需要的時(shí)間。例如:若單片機(jī)使用12MHz的晶振頻率,則振蕩周期=1/(12MHz)=1/12us,時(shí)鐘周期=1/6us,機(jī)器周期=1us,執(zhí)行一條單周期指令只需要1us,執(zhí)行一條雙周期
28、指令則需要2us。</p><p> 2)復(fù)位電路無論是在單片機(jī)剛開始接上電源時(shí),還是運(yùn)行過程中發(fā)生故障都需要復(fù)位。復(fù)位電</p><p> 路用于將單片機(jī)內(nèi)部各電路的狀態(tài)恢復(fù)到一個(gè)確定的初始值,并從這個(gè)狀態(tài)開始工作。</p><p> 單片機(jī)的復(fù)位條件:必須使其RST引腳上持續(xù)出現(xiàn)兩個(gè)(或以上)機(jī)器周期的高電平。上</p><p>
29、 電復(fù)位電路中,利用電容充電來實(shí)現(xiàn)復(fù)位。在電源接通瞬間,RST引腳上的電位是高電平</p><p> (Vcc),電源接通后對(duì)電容進(jìn)行快速充電,隨著充電的進(jìn)行,RST引腳上的電位也會(huì)逐漸</p><p> 下降為低電平。只要保證RST引腳上高電平出現(xiàn)的時(shí)間大于兩個(gè)機(jī)器周期,便可以實(shí)現(xiàn)正</p><p><b> 常復(fù)位。</b><
30、/p><p> 按鍵復(fù)位電路中,當(dāng)按鍵沒有按下時(shí),電路同上電復(fù)位電路。如在單片機(jī)運(yùn)行過程中,按下</p><p> RESET鍵,已經(jīng)充好電的電容會(huì)快速通過1KΩ電阻的回路放電,從而使得RST引腳上的</p><p> 電位快速變?yōu)楦唠娖剑烁唠娖綍?huì)維持到按鍵釋放,從而滿足單片機(jī)復(fù)位的條件實(shí)現(xiàn)按鍵復(fù)</p><p><b> 位
31、。</b></p><p> 單片機(jī)復(fù)位后各特殊功能寄存器的復(fù)位值見下表 </p><p> 單片機(jī)特殊功能寄存器復(fù)位值寄存器復(fù)位值寄存器復(fù)位值寄存器復(fù)位值PC0000HSBUF不確定TMOD00HB00HSCON00HTCON00HACC00HTH100HPCON0***0
32、000BPSW00HTH000HDPTR0000HIP***00000BTL100HSP07HIE0**00000BTL000HP0~P3FFH注:*表示無關(guān)位。</p><p> 六、顯示器12864模塊</p><p> *注釋1:如在實(shí)際應(yīng)用中僅使用并口通訊模式,可將PSB接固定高電平,也可以將模塊上的J8和“VCC”用焊錫短接。</p
33、><p> *注釋2:模塊內(nèi)部接有上電復(fù)位電路,因此在不需要經(jīng)常復(fù)位的場(chǎng)合可將該端懸空。 </p><p> *注釋3:如背光和模塊共用一個(gè)電源,可以將模塊上的JA、JK用焊錫短接。</p><p><b> 指令說明:</b></p><p> 模塊控制芯片提供兩套控制命令,基本指令和擴(kuò)充指令如下:</
34、p><p> 指令表1:(RE=0:基本指令)</p><p> 指令表2:(RE=1:擴(kuò)充指令)</p><p> 備注;當(dāng)IC1在接受指令前,微處理器必須先確認(rèn)其內(nèi)部處于非忙碌狀態(tài),即讀取BF標(biāo)志時(shí),BF需為零,方可接受新的指令;如果在送出一個(gè)指令前并不檢查BF標(biāo)志,那么在前一個(gè)指令和這個(gè)指令中間必須延長(zhǎng)一段較長(zhǎng)的時(shí)間,即是等待前一個(gè)指令確實(shí)執(zhí)行完成。<
35、/p><p><b> 讀寫時(shí)序圖</b></p><p><b> 數(shù)據(jù)傳輸過程</b></p><p> 8位和4位數(shù)據(jù)線的傳輸過程</p><p> 串口數(shù)據(jù)線模式數(shù)據(jù)傳輸過程</p><p><b> 時(shí)序圖</b></p>
36、<p> MPU寫資料到ST7920(8位數(shù)據(jù)線模式)</p><p> MPU 從ST7920讀資料(8位數(shù)據(jù)線模式)</p><p> 串口讀寫時(shí)序: </p><p> 七、電子萬年歷的電路圖和PCB圖</p><p><b> 電路圖如下圖:</b></p><p>
37、;<b> PCB圖如下圖</b></p><p> 八、電子萬年歷的功能介紹</p><p> 電子萬年歷的功能主要是由51單片機(jī)和DS1302芯片實(shí)現(xiàn)的,并且在顯示屏12864上顯示。同時(shí),萬年歷的年、月、日、星期、時(shí)、分、秒還有農(nóng)歷,而且,還具有鬧鐘提醒、整點(diǎn)報(bào)時(shí)的功能,同時(shí),它還能通過按鍵調(diào)整年、月、日、星期、時(shí)、分、秒,起到調(diào)整的作用,給我們帶來了極大
38、地方便。</p><p><b> 如上圖</b></p><p> K1鍵:是設(shè)置按鍵,主要是用來選擇需要調(diào)節(jié)的年、月、日、星期、時(shí)、分、秒</p><p> K2鍵:是確認(rèn)和返回鍵。</p><p> K3鍵:是加鍵,用來調(diào)節(jié)年、月、日、星期、時(shí)、分、秒</p><p> K4鍵:是
39、減鍵,用來調(diào)整年、月、日、星期、時(shí)、分、秒</p><p> K5鍵:是鬧鐘的開啟和關(guān)閉鍵。</p><p><b> 九、系統(tǒng)軟件設(shè)計(jì)</b></p><p><b> 時(shí)間控制流程圖</b></p><p> 主要的部分代碼介紹:</p><p> #inclu
40、de <reg52.h></p><p> #include <intrins.h></p><p> #include "LCD12864.h"</p><p> #include "DS1302.h"</p><p> #include "nongli.h&
41、quot;</p><p> #include "displaytime.h"</p><p> #include "bell.h"</p><p> #include "delay.h"</p><p> #define uint unsigned int</p&g
42、t;<p> #define uchar unsigned char</p><p> /*--------------------定義按鍵-----------------------------------------------*/</p><p> sbit K1 = P1^0; //K1-設(shè)置</p><p> sbit K2 =
43、 P1^1; //K2-確認(rèn)、返回</p><p> sbit K3 = P1^2; //K3-加</p><p> sbit K4 = P1^3; //K4-減</p><p> sbit K5 = P1^5; //按鍵K5-鬧鐘的打開與關(guān)閉</p><p> sbit led = P2^0;//led燈</p>
44、<p> //K5=P1^4,K5-控制鬧鐘的打開與關(guān)閉,在"hw.h"中定義</p><p> /*---------------------函數(shù)聲明------------------------------*/ </p><p> void ds_w0(void);</p><p> void ds_w(v
45、oid);</p><p> void Conver_week(bit c,uchar year,uchar month,uchar day);</p><p> /*-----------------------------定義全局變量------------------------------*/</p><p> bit w=0; //調(diào)時(shí)標(biāo)志位
46、</p><p> unsigned char yy,mo,dd,xq,hh,mm,ss,month_moon,day_moon,week,tiangan,dizhi,moontemp1,moontemp2;//定義時(shí)間映射全局變量(專用寄存器)</p><p> signed char address,item,item0,max,mini;</p><p>
47、 unsigned char clk_ala[2]={0x00,0x00};//鬧鐘數(shù)據(jù)存放初,始值為00:00</p><p> unsigned char hour,minute,time;//用于鬧鈴的設(shè)置</p><p> /*-----------------------------日期、時(shí)間設(shè)置函數(shù)-----------------------------*/</p
48、><p> void tiaozheng(void){</p><p> yy = read_clock(0x8d);//調(diào)用1302時(shí)鐘數(shù)據(jù)中的年數(shù)據(jù),從地址0x8d中</p><p> mo = read_clock(0x89);//調(diào)用1302時(shí)鐘數(shù)據(jù)中的月數(shù)據(jù),從地址0x89中</p><p> dd = read_clock(0
49、x87);//從1302芯片中讀取日數(shù)據(jù),從地址0x87中</p><p> week = read_clock(0x8b);//從1302芯片中讀取星期數(shù)據(jù),從地址0x8b中</p><p> //----------------------------------</p><p> lcm_w_test(0,0x80);</p><p&
50、gt; lcm_w_word("20");//顯示內(nèi)容字符20</p><p> lcm_w_test(1,(yy/16)+0x30);//函數(shù)參數(shù)1,代表本行寫數(shù)據(jù),YY/16+0X30得出年十位數(shù)字的顯示碼地址,送顯示</p><p> lcm_w_test(1,yy%16+0x30);//函數(shù)</p><p> lcm_w_wor
51、d("年");</p><p> //----------------------------------</p><p> lcm_w_test(1,(mo/16)+0x30);</p><p> lcm_w_test(1,mo%16+0x30);//與16取余數(shù),得到月份的個(gè)位數(shù),加0x30得到該數(shù)字的液晶內(nèi)定顯示碼送顯示</p&
52、gt;<p> lcm_w_word("月");//調(diào)用字符顯示函數(shù),顯示文字 月</p><p> //----------------------------------</p><p><b> /*</b></p><p> lcm_w_test(0,0x88);//第一個(gè)參數(shù)0,表示本行寫入L
53、CM的是指令,指定顯示位置88H(第三行左端)</p><p> lcm_w_word("星期");//調(diào)用字符顯示函數(shù),顯示文字 星期</p><p> lcm_w_test(1,mo%16+0x30);//與16取余數(shù),得到月份的個(gè)位數(shù),加0x30得到該數(shù)字的液晶內(nèi)定顯示碼送顯示</p><p><b> */</b&g
54、t;</p><p> //----------------------------------</p><p> lcm_w_test(1,(dd/16)+0x30);</p><p> lcm_w_test(1,dd%16+0x30);//第一個(gè)1參數(shù),表示本行寫數(shù)據(jù),日數(shù)據(jù)與16取余得個(gè)位數(shù),加0x30得到顯示碼</p><p>
55、 lcm_w_word("日");//顯示字符 日</p><p> //----------------------------------</p><p> if(read_clock(0x85) != hh){//如果程序中的小時(shí)與1302芯片中的不同,</p><p> hh = read_clock(0x85);//刷新程序中的
56、小時(shí)數(shù)據(jù)</p><p><b> }</b></p><p> lcm_w_test(0,0x91);//第一個(gè)參數(shù)0,表示本行寫入LCM的是指令,指定顯示位置88H(第三行左端)</p><p> lcm_w_test(1,(hh/16)+0x30);//顯示十位</p><p> lcm_w_test(1,
57、hh%16+0x30);//顯示個(gè)位</p><p> lcm_w_word("時(shí)");</p><p> //----------------------------------</p><p> if(read_clock(0x83) != mm){//如果1302芯片中的分鐘數(shù)據(jù)與程序中的分鐘變量不相等</p><
58、p> mm = read_clock(0x83);//刷新程序中的分鐘數(shù)據(jù)</p><p><b> }</b></p><p> lcm_w_test(1,(mm/16)+0x30);//向液晶寫數(shù)據(jù),顯示分鐘的十位數(shù)</p><p> lcm_w_test(1,mm%16+0x30);//向液晶寫數(shù)據(jù),顯示分鐘的個(gè)位數(shù)<
59、/p><p> lcm_w_word("分");</p><p> //----------------------------------</p><p> if(read_clock(0x81) != ss){//如果1302芯片中的分鐘數(shù)據(jù)與程序中的秒鐘變量不相等(0x81為讀秒數(shù)據(jù)0x80為寫秒數(shù)據(jù))</p><
60、p> ss = read_clock(0x81);//刷新程序中的秒鐘數(shù)據(jù)</p><p><b> }</b></p><p> lcm_w_test(1,(ss/16)+0x30);//向液晶寫數(shù)據(jù),顯示分鐘的十位數(shù)</p><p> lcm_w_test(1,ss%16+0x30);//向液晶寫數(shù)據(jù),顯示分鐘的個(gè)位數(shù)<
61、/p><p> lcm_w_word("秒");</p><p> *********************DS1302子程序部分代碼*******************************</p><p> #ifndef __DS1302_H__ </p><p> #define __DS1302_H__
62、 </p><p> //定義DS1302時(shí)鐘接口</p><p> sbit clock_clk = P3 ^4;//ds1302_clk(時(shí)鐘線)</p><p> sbit clock_dat = P3 ^5;//ds1302_dat(數(shù)據(jù)線)</p><p> sbit clock_Rst = P3 ^6;//ds1302_R
63、st(復(fù)位線)</p><p> //定義累加器A中的各位</p><p> sbit a0 = ACC ^ 0;</p><p> sbit a1 = ACC ^ 1;</p><p> sbit a2 = ACC ^ 2;</p><p> sbit a3 = ACC ^ 3;</p
64、><p> sbit a4 = ACC ^ 4;</p><p> sbit a5 = ACC ^ 5;</p><p> sbit a6 = ACC ^ 6;</p><p> sbit a7 = ACC ^ 7;</p><p><b> //函數(shù)聲明</b></p
65、><p> void write_clock(unsigned char ord, unsigned char dd);</p><p> void clock_out(unsigned char dd);</p><p> unsigned char clock_in(void);//DS1302逐位寫入字節(jié)(底層協(xié)議)</p><p>
66、 void clock_out(unsigned char dd);//1302驅(qū)動(dòng)程序逐位讀出字節(jié)(底層協(xié)議?</p><p> void Init_1302(void);//-設(shè)置1302的初始時(shí)間(2010年10月08日20時(shí)51分00秒星期五)</p><p> unsigned char read_clock(unsigned char ord);//DS1302讀數(shù)據(jù)(底
67、層協(xié)議)</p><p> void read_clockS(void);</p><p> //設(shè)置1302的初始時(shí)間(自動(dòng)初始化)</p><p> void Init_1302(void){//-設(shè)置1302的初始時(shí)間(2010年10月08日20時(shí)51分00秒星期五) unsigned char f;</p><p> i
68、f(read_clock(0xc1) != 0xaa){</p><p> write_clock(0x8e,0x00);//允許寫操作</p><p> write_clock(0x8c,0x11);//年</p><p> write_clock(0x8a,0x06);//星期</p><p> write_clock(0x88,
69、0x01);//月</p><p> write_clock(0x86,0x01);//日</p><p> write_clock(0x84,0x00);//小時(shí)</p><p> write_clock(0x82,0x00);//分鐘</p><p> write_clock(0x80,0x00);//秒</p>&
70、lt;p> //write_clock(0x90,0xa5);//充電</p><p> write_clock(0xc0,0xaa);//寫入初始化標(biāo)志RAM(第00個(gè)RAM位置)</p><p> for(f=0;f<60;f=f+2){//清除鬧鐘RAM位為0</p><p> write_clock(0xc2+f,0x00);<
71、;/p><p><b> }</b></p><p> write_clock(0x8e,0x80);//禁止寫操作</p><p><b> }</b></p><p><b> }</b></p><p> ******************
72、********蜂鳴器代碼***************************************</p><p> #ifndef _BELL_H</p><p> #define _BELL_H</p><p> #include "delay.h"</p><p> sbit BEEP=P3^7;<
73、;/p><p><b> {</b></p><p><b> BEEP=0;</b></p><p> DelayM(120);</p><p><b> BEEP=1;</b></p><p><b> }</b><
74、/p><p> void alarmbeep()</p><p><b> {</b></p><p> /**************報(bào)警聲************************/</p><p> unsigned char a;//定義變量用于發(fā)聲的長(zhǎng)度設(shè)置</p><p>
75、 for(a=10;a>0;a--){//第一個(gè)聲音的長(zhǎng)度</p><p> BEEP = ~BEEP;//取反揚(yáng)聲器驅(qū)動(dòng)口,以產(chǎn)生音頻</p><p> delay500();//延時(shí)500us</p><p> DelayM(100);//音調(diào)設(shè)置延時(shí)</p><p><b> }</b></p
76、><p> BEEP = 1;//音樂結(jié)束后揚(yáng)聲器拉高關(guān)閉</p><p><b> } </b></p><p><b> #endif</b></p><p><b> 十、個(gè)人感想</b></p><p> 通過這次課程設(shè)計(jì),我充分地認(rèn)
77、識(shí)到實(shí)踐和理論完全是兩碼事,理論的知識(shí)是我們實(shí)踐的基礎(chǔ),實(shí)踐是展示個(gè)人才能的最終舞臺(tái)。我能夠在短時(shí)間內(nèi)完成這課程設(shè)計(jì),我感到些少的滿足感。</p><p> 在整個(gè)設(shè)計(jì)過程中,發(fā)揮團(tuán)隊(duì)精神,分工合作,充分發(fā)揮人的主觀能動(dòng)性,自主學(xué)習(xí),學(xué)到了許多沒學(xué)到的知識(shí)。較好的完成了作品。達(dá)到了預(yù)期的目的,在最初的設(shè)計(jì)中,發(fā)揮“三個(gè)臭皮匠,頂個(gè)諸葛亮”的作用。相互學(xué)習(xí)、相互討論、研究。完了最初的設(shè)想。在電路焊接時(shí)雖然沒什么大
78、問題,但從中也知道了焊接在整個(gè)作品中的重要性,電路工程量大,不能心急,一個(gè)個(gè)慢慢來不能急于求成。反而達(dá)到事半功倍的效果。對(duì)電路的設(shè)計(jì)、布局要先有一個(gè)好的構(gòu)思,才顯得電路板美觀、大方。程序編寫中,由于思路不清晰,開始時(shí)遇到了很多的問題,經(jīng)過靜下心來思考,和同組員的討論,理清了思路,反而得心應(yīng)手。在此次設(shè)計(jì)中,知道了做凡事要有一顆平常的心,不要想著走捷徑,一步一腳印。也練就了我們的耐心,做什么事都在有耐心。</p><p
79、> 在整個(gè)制作的過程中遇到的問題:</p><p> 1、畫PCB板的時(shí)候,電容C3的標(biāo)識(shí)出現(xiàn)了兩個(gè)</p><p> 2、畫封裝的時(shí)候,焊盤的標(biāo)識(shí)弄錯(cuò)</p><p> 3、在焊接的時(shí)候?qū)SB接口的正負(fù)極接反,導(dǎo)致在調(diào)試的時(shí)候顯示屏12864沒顯示</p><p> 4、焊接九腳排阻的時(shí)候弄反了方向</p>
80、<p> 5、調(diào)試程序的時(shí)候,端口定義錯(cuò)誤</p><p> 最后這些問題在同學(xué)的幫助下,方能得到解決,所以團(tuán)隊(duì)精神很重要。在設(shè)計(jì)的時(shí)候我們不可能一個(gè)人完成所有的任務(wù),總會(huì)有一些是我們力所不能及的事情,這就需要你的搭檔來一起解決,相互研究,找出問題的所在。俗話說得好:“人非圣賢。”說的是,我們每個(gè)人都有自己的缺點(diǎn),那么需要什么來擬補(bǔ)這些缺點(diǎn)呢?這就需要?jiǎng)e人來找出你的不足。所以這使我明白了,我們搞電子
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 萬年歷課程設(shè)計(jì)--萬年歷電子時(shí)鐘
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- java萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)報(bào)告
- 數(shù)字萬年歷課程設(shè)計(jì)
- java課程設(shè)計(jì)--萬年歷
- 課程設(shè)計(jì)-萬年歷系統(tǒng)
- 萬年歷課程設(shè)計(jì)報(bào)告
- 數(shù)碼萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì).doc
- java課程設(shè)計(jì)--萬年歷設(shè)計(jì)
- dsp課程設(shè)計(jì)-萬年歷設(shè)計(jì)
- 編寫萬年歷系統(tǒng)課程設(shè)計(jì)
- c++萬年歷課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論