2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩20頁未讀 繼續(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><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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論