簡(jiǎn)易家電定時(shí)控制裝置單片機(jī)課設(shè)_第1頁(yè)
簡(jiǎn)易家電定時(shí)控制裝置單片機(jī)課設(shè)_第2頁(yè)
簡(jiǎn)易家電定時(shí)控制裝置單片機(jī)課設(shè)_第3頁(yè)
簡(jiǎn)易家電定時(shí)控制裝置單片機(jī)課設(shè)_第4頁(yè)
簡(jiǎn)易家電定時(shí)控制裝置單片機(jī)課設(shè)_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

課程設(shè)計(jì)(論文)任務(wù)書(shū)信息工程學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)2014-1班一、課程設(shè)計(jì)(論文)題目簡(jiǎn)易家電定時(shí)控制裝置二、課程設(shè)計(jì)(論文)工作自2017年6月19日起至一2017年6月29日止。三、課程設(shè)計(jì)(論文)地點(diǎn):5#402四、課程設(shè)計(jì)(論文)內(nèi)容要求:本課程設(shè)計(jì)的目的使學(xué)生掌握系統(tǒng)各功能模塊的基本工作原理;培養(yǎng)學(xué)生基本掌握電路設(shè)計(jì)的基本思路和方法;使學(xué)生掌握接收系統(tǒng)調(diào)試;培養(yǎng)學(xué)生分析、解決問(wèn)題的能力;提高學(xué)生的科技論文寫(xiě)作能力。課程設(shè)計(jì)的任務(wù)及要求基本要求:對(duì)家電的開(kāi)啟進(jìn)行預(yù)定時(shí)控制,能顯示并設(shè)置預(yù)定時(shí)間;一對(duì)家電的工作時(shí)間進(jìn)行定時(shí)控制,能顯示并通過(guò)鍵盤(pán)設(shè)置工作時(shí)間的長(zhǎng)短;工作時(shí)間到了后,并能聲音報(bào)警;設(shè)定時(shí)間時(shí),黃色發(fā)光二極管點(diǎn)亮,啟動(dòng)定時(shí)后,紅色發(fā)光二極管點(diǎn)亮。創(chuàng)新要求:在基本要求達(dá)到后,可進(jìn)行創(chuàng)新設(shè)計(jì),如改善電路性能;對(duì)系統(tǒng)進(jìn)行仿真分析。課程設(shè)計(jì)論文編寫(xiě)要求要按照書(shū)稿的規(guī)格打印譽(yù)寫(xiě)畢業(yè)論文論文包括目錄、緒論、正文、小結(jié)、參考文獻(xiàn)、謝辭、附錄等畢業(yè)論文裝訂按學(xué)校的統(tǒng)一要求完成答辯與評(píng)分標(biāo)準(zhǔn):完成原理分析:20分;完成設(shè)計(jì)過(guò)程(含翻譯):40分;完成調(diào)試:20分;回答問(wèn)題:20分。參考文獻(xiàn):(1)鄧胡濱.《單片機(jī)原理及應(yīng)用技術(shù)一一基于KeilC和Proteus仿真》人民郵電出版社6)課程設(shè)計(jì)進(jìn)度安排內(nèi)容天數(shù)地點(diǎn)構(gòu)思及收集資料2圖書(shū)館組裝與調(diào)試5實(shí)驗(yàn)室撰寫(xiě)論文3圖書(shū)館、實(shí)驗(yàn)室學(xué)生簽名:2017年6月19日課程設(shè)計(jì)(論文)評(píng)審意見(jiàn)(1)完成原理分析(20分):優(yōu)()、良()、中()、一般()、差();(2)設(shè)計(jì)分析和翻譯能力(40分)();:優(yōu)()、良()、.中()、一般()、差(3)完成調(diào)試(20分):優(yōu)()、良()、中()、一般()、差();(4)回答問(wèn)題(20分):優(yōu)()、良()、中()、一般()、差();(5)格式規(guī)范性及考勤是否降等級(jí):是()、否()評(píng)閱人:職稱(chēng):_副教授2017年6月29日目錄TOC\o"1-5"\h\z\o"CurrentDocument"緒論1\o"CurrentDocument"一、設(shè)計(jì)任務(wù)及要求21.1設(shè)計(jì)目的2\o"CurrentDocument"1.2基本功能要求2\o"CurrentDocument"1.3拓展功能設(shè)計(jì)2\o"CurrentDocument"1.4功能詳細(xì)設(shè)計(jì)3\o"CurrentDocument"二、硬件電路設(shè)計(jì)及描述3AT89C52單片機(jī)3DS1302數(shù)碼管顯示時(shí)鐘4\o"CurrentDocument"矩陣按鍵電路5LCD液晶顯示屏電路6LED數(shù)碼管動(dòng)態(tài)顯示774HC138譯碼器9\o"CurrentDocument"報(bào)警電路10\o"CurrentDocument"三、程序設(shè)計(jì)思想及流程11\o"CurrentDocument"四、電路的安裝及調(diào)試124.1安裝步驟124.2電路的調(diào)試12\o"CurrentDocument"五、總結(jié)12\o"CurrentDocument"六、參考文獻(xiàn)13\o"CurrentDocument"七、附錄137.1實(shí)物圖137.2仿真圖137.3部分程序清單14緒論單片微計(jì)算機(jī)自20世紀(jì)70年代問(wèn)世以來(lái),已對(duì)人類(lèi)社會(huì)產(chǎn)生了巨大的影響。尤其是美國(guó)Intel公司生產(chǎn)的MCS-51系列單片機(jī),由于其具有集成度高、處理功能強(qiáng)、可靠性高、系統(tǒng)結(jié)構(gòu)簡(jiǎn)單、價(jià)格低廉、易于使用等優(yōu)點(diǎn),在世界范圍內(nèi)已經(jīng)得到廣泛的普及和應(yīng)用。此外,世界各大公司以MCS-51單片機(jī)基本內(nèi)核為核心的各種擴(kuò)展型、增強(qiáng)型的新型的新型單片機(jī)不斷推出,所以在今后若干年內(nèi),MCS-51系列以及世界其它各大公司生產(chǎn)的與其兼容的各種增強(qiáng)型、擴(kuò)展型的單片機(jī),仍是我國(guó)單片機(jī)應(yīng)用領(lǐng)域的主流型。目前在工業(yè)控制、智能儀器儀表、辦公自動(dòng)化、家用電器登諸多領(lǐng)域,到處都可看見(jiàn)單片機(jī)的蹤影,單片機(jī)技術(shù)開(kāi)發(fā)和應(yīng)用水平已成為一個(gè)國(guó)家工業(yè)發(fā)展水平的標(biāo)志之一。此裝置硬件使用AT89C52單片機(jī)為控制核心,DS1302作為時(shí)鐘芯片并同時(shí)在掉電時(shí)儲(chǔ)存資料,LCD1602液晶顯示屏以及LED數(shù)碼管作為顯示與用戶交互,使用5V繼電器控制外接電器電源的開(kāi)啟或關(guān)閉。軟件采用模塊化設(shè)計(jì)、驅(qū)動(dòng)、控制、引腳、變量定義等采用多文件編譯,即方便自己設(shè)計(jì)修改也方便他人理解。這款家電定時(shí)器實(shí)現(xiàn)了時(shí)鐘顯示,預(yù)定時(shí)間設(shè)置、定時(shí)操作便捷設(shè)置、報(bào)警功能、系統(tǒng)狀態(tài)提示功能。關(guān)鍵詞:?jiǎn)纹瑱C(jī);定時(shí)控制;AT89S52;一、設(shè)計(jì)任務(wù)及要求1.1設(shè)計(jì)目的根據(jù)本學(xué)年所學(xué)的單片機(jī)及微機(jī)接口的理論知識(shí)設(shè)計(jì)裝置的電路結(jié)構(gòu)和相應(yīng)軟件程序設(shè)計(jì)。提高學(xué)生實(shí)踐能力,培養(yǎng)學(xué)生發(fā)現(xiàn)問(wèn)題、解決問(wèn)題的能力,鍛煉學(xué)生理論聯(lián)系實(shí)際、綜合應(yīng)用的能力。1.2基本功能要求(1)對(duì)家電的開(kāi)啟進(jìn)行預(yù)定時(shí)控制,能顯示并設(shè)置預(yù)定時(shí)間;(2)對(duì)家電的工作時(shí)間進(jìn)行定時(shí)控制,能顯示并通過(guò)鍵盤(pán)設(shè)置工作時(shí)間的長(zhǎng)短;(3)工作時(shí)間到了后,并能聲音報(bào)警;(4)設(shè)定時(shí)間時(shí),黃色發(fā)光二極管點(diǎn)亮,啟動(dòng)定時(shí)后,紅色發(fā)光二極管點(diǎn)亮。1.3拓展功能設(shè)計(jì)(1)使用LCD液晶顯示屏顯示定時(shí)時(shí)間,方便使用者的實(shí)際操作使用。(2)采用矩陣鍵盤(pán)進(jìn)行時(shí)間設(shè)置。以使得裝置的時(shí)間設(shè)置操作更加的人性化。(3)使用8個(gè)LED燈提示裝置所處于的狀態(tài)。當(dāng)LED滾動(dòng)顯示時(shí)表示家電處于閑置狀態(tài),當(dāng)流水燈全部顯示時(shí)表示家電處于工作狀態(tài)。1.4功能詳細(xì)設(shè)計(jì)裝置的當(dāng)前時(shí)間顯示是用6個(gè)數(shù)碼管實(shí)現(xiàn)的,顯示格式為“時(shí)時(shí):分分:秒秒”。當(dāng)前日期以及定時(shí)時(shí)間是在LCD液晶顯示屏上顯示。家電工作前程序控制LED燈流動(dòng)點(diǎn)亮,家電工作后程序控制LED燈全部點(diǎn)亮。矩陣鍵盤(pán)的控制功能為:K1、K2、K3、K5、K6、K7、K9、K10、K11、K13分別對(duì)應(yīng)數(shù)字1—9以及數(shù)字0。用于設(shè)置日期時(shí)間以及定時(shí)時(shí)間的數(shù)值輸入。K4、K8、K12、K16對(duì)應(yīng)光標(biāo)移動(dòng)上、左、下、右方向。K14、K15分別對(duì)應(yīng)ESC鍵和回車(chē)鍵。二、硬件電路設(shè)計(jì)及描述2.1AT89C52單片機(jī)AT89C52是一個(gè)低電壓,高性能CMOS8位單片機(jī),片內(nèi)含8kbytes的可反復(fù)擦寫(xiě)的Flash只讀程序存儲(chǔ)器和256bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲(chǔ)單元,AT89C52單片機(jī)在電子行業(yè)中有著廣泛的應(yīng)用。AT89C52有40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中斷口,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,2個(gè)讀寫(xiě)口線,AT89C52可以按照常規(guī)方法進(jìn)行編程,也可以在線編程。其將通用的微處理器和Flash存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫(xiě)的Flash存儲(chǔ)器可有效地降低開(kāi)發(fā)成本。(T2)P1.DC:hvcc140(T2EX}P1.1CZ239□POO(ADO)P1,2匚333nPO.1(AD11)P1.3匚437□PD.2(AD2)P1.4匚53G□PO.3(AD3)(MOSI)P1.5匚635PP0.4(AD4)(MISO}P1.6C734二1PO.5(AD5)(SCK)P1.7匚833bPG.6(ADS)RST「■9疊—321PO.7(AD7)(RXDJP3.O匚1Q"事卷慮咧hEA-A/PPCFX口1P3JC1130口ALE/PROG(INTO)P3.2匚1229□PSENJNT1}P3.3匚132&pP2.7(A15)(TO)P3.4L1427□PS6(T1)P3.5「1526二IP2.5(A13)(WR>PS.6?—IB25口P2.4(A12)(RD)P3-71724P23(A11)XTAL2~ia23P2.2(AW)XTAL1匚1922□P2.1(A9)2021P2.0(AS)圖2-12.2DS1302數(shù)碼管顯示時(shí)鐘DS1302簡(jiǎn)介DS1302是美國(guó)DALLAS公司推出的一款涓流充電時(shí)鐘芯片。DS1302時(shí)鐘芯片被廣泛應(yīng)用于電話、傳真、便攜式儀器等產(chǎn)品領(lǐng)域,它的主要性能指標(biāo)如下。DS1302是一個(gè)實(shí)時(shí)時(shí)鐘芯片,可以提供秒、分、小時(shí)、日期、月、年等信息,并且還有軟件自動(dòng)調(diào)整的能力,可以配置AM/PM來(lái)決定采用24小時(shí)格式還是12小時(shí)格式。擁有31字節(jié)數(shù)據(jù)存儲(chǔ)RAM。串行I/O通信方式,相對(duì)并行來(lái)說(shuō)比較節(jié)省IO口的使用。DS1302的工作電壓比較寬,在2.0—5.5V的范圍內(nèi)部都可以正常工作。DS1302這種時(shí)鐘芯片功耗一般都很低,它在工作電壓2.0V的時(shí)候工作電流小于300nA。DS1302共有8個(gè)引腳,有兩種封裝形式。當(dāng)工作電壓是5V的時(shí)候,兼容標(biāo)準(zhǔn)的TTL電平標(biāo)準(zhǔn)。DS1302有兩個(gè)電源輸入,一個(gè)是主電源,另一個(gè)是備用電源??梢允褂秒姵鼗蛘叽笮碗娙?。以使在系統(tǒng)掉電的情況下,時(shí)鐘還會(huì)繼續(xù)走。DS1302結(jié)構(gòu)DS1302的引腳排列,其中Vcc2為主電源,VCC1為后備電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時(shí),Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時(shí),DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復(fù)位/片選線,通過(guò)把RST輸入驅(qū)動(dòng)置高電平來(lái)啟動(dòng)所有的數(shù)據(jù)傳送°RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)傳送的方法。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)DS1302進(jìn)行操作。如果在傳送過(guò)程中RST置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc>2.0V之前,RST必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細(xì)說(shuō)明。SCLK為時(shí)鐘輸入端。下圖為DS1302的引腳功能圖:VcciSCLKI/ORST圖2-2DS1302引腳圖2.3矩陣按鍵電路VcciSCLKI/ORST圖2-2DS1302引腳圖矩陣按鍵電路如圖2-3所示。圖2-3按鍵電路矩陣鍵盤(pán)又稱(chēng)為行列式鍵盤(pán),它是用4條I/O線作為行線,4條I/O線作為列線組成的鍵盤(pán)。在行線和列線的每一個(gè)交叉點(diǎn)上,設(shè)置一個(gè)按鍵。這樣鍵盤(pán)中按鍵的個(gè)數(shù)是4X4個(gè)。這種行列式鍵盤(pán)結(jié)構(gòu)能夠有效地提高單片機(jī)系統(tǒng)中I/O口的利用率。工作時(shí)先從P1口的高四位輸出低電平,低四位輸出高電平,從P1口的低四位讀取鍵盤(pán)狀態(tài)。再?gòu)腜1口的低四位輸出低電平,高四位輸出高電平,從P1口的高四位讀取鍵盤(pán)狀態(tài)。將兩次讀取結(jié)果組合起來(lái)就可以得到當(dāng)前按鍵的特征編碼。使用上述方法我們得到16個(gè)鍵的特征編碼。2.4LCD液晶顯示屏電路(1)、LCD1602簡(jiǎn)介1602液晶顯示屏可以顯示2行,每行16個(gè)字符的液晶。它的工作電壓是4.5—5.5V,對(duì)于這點(diǎn)在設(shè)計(jì)電路的時(shí)候,直接按照5V系統(tǒng)設(shè)計(jì),但是保證5V系統(tǒng)最低不能低于4.5V。在5V工作電壓下測(cè)量它的工作電流是2mA。這個(gè)2mA僅僅是指液晶,而它的黃綠背光都是LED做的,所以功耗不會(huì)太小。(2)、LCD1602管腳功能1602采用標(biāo)準(zhǔn)的16腳接口,其中:第1腳:VSS為電源地

第2腳:VCC接5V電源正極第3腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度)。第4腳:RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。第5腳:RW為讀寫(xiě)信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫(xiě)操作。第6腳:E(或EN)端為使能(enable)端。第7?14腳:D0?D7為8位雙向數(shù)據(jù)端。第15?16腳:空腳或背燈電源。15腳背光正極,16腳背光負(fù)極。LQO-J寸〔?【;<?-DBti圖2-5中斷觸發(fā)電路LQO-J寸〔?【;<?-DBti2.5LED數(shù)碼管動(dòng)態(tài)顯示(1)LED結(jié)構(gòu)原理LED數(shù)碼管(LEDSegmentDisplays)是由多個(gè)發(fā)光二極管封裝在一起組成“8”字型的器件,引線已在接完成,只需引出它們的各個(gè)筆劃,公共電極。隨著信息時(shí)代的突飛猛進(jìn),越來(lái)越多的照明及工程應(yīng)用需要要求更高的顯示方案,同樣,作為單片機(jī)的驅(qū)動(dòng)顯示也離不開(kāi)LED數(shù)碼管驅(qū)動(dòng)顯示方案。LED數(shù)碼管顯示主要分為靜態(tài)顯示和動(dòng)態(tài)顯示。對(duì)于人機(jī)交互式單片機(jī)系統(tǒng)來(lái)說(shuō),不僅需要響應(yīng)用戶輸入,同時(shí)也需要將一些測(cè)控信息輸出顯示。這些顯示信息可以提供實(shí)時(shí)的數(shù)據(jù)或圖形結(jié)果,以便于掌握系統(tǒng)的狀態(tài)并進(jìn)行分析處理。目前,在單片機(jī)中最常用的是LED數(shù)碼管顯示。其成本低廉、使用簡(jiǎn)便,可以顯示數(shù)字或幾個(gè)特定的字符。(2)動(dòng)態(tài)顯示原理動(dòng)態(tài)顯示是指每隔一段時(shí)間循環(huán)點(diǎn)亮每個(gè)LED數(shù)碼管,每次只有一個(gè)LED被點(diǎn)亮。根據(jù)人眼的視覺(jué)暫留效應(yīng),當(dāng)循環(huán)點(diǎn)亮的速度很快的時(shí)候,可以認(rèn)為各個(gè)LED是穩(wěn)定顯示的。動(dòng)態(tài)顯示的硬件連接比較簡(jiǎn)單,這里使用了8個(gè)LED數(shù)碼管,將所有LED的8段引腳并聯(lián)在一起,連接到8位的I/O數(shù)據(jù)總線上。而各個(gè)LED的共陽(yáng)極引腳或共陰極引腳分別由另一組I/O線控制,從圖中可以看出,使用兩個(gè)8位的I/O端口便可以動(dòng)態(tài)顯示8位LED數(shù)碼管。其中一個(gè)并口作為L(zhǎng)ED數(shù)碼管的控制引腳,另一個(gè)并口作為公共的數(shù)據(jù)總線。程序中采用掃描顯示的方式,即在同一時(shí)刻,只使用一個(gè)LED顯示數(shù)據(jù)。通過(guò)為共陰極LED(或共陽(yáng)極LED)的公共引腳賦低電平(或高電平),從而選擇某個(gè)LED顯示。如此循環(huán),使每個(gè)LED顯示該LED應(yīng)顯示的數(shù)據(jù),并進(jìn)行適當(dāng)?shù)难訒r(shí),形成視覺(jué)暫留效果。這樣便可以達(dá)到動(dòng)態(tài)顯示的目的。圖2-6LED電路圖2.674HC138譯碼器74HC138譯碼器作用是把3種輸入狀態(tài)翻譯為8種輸出狀態(tài)。74HC138一共是6個(gè)輸入引腳,但是其中4,5,6這三個(gè)引腳是使能引腳。這三個(gè)引腳如果不符合規(guī)定的輸入要求Y0到Y(jié)7不管輸入的1,2,3引腳是什么電平狀態(tài),總是高電平。CD74HC13S.CDMHCT13&CG74HC23A,CDHHCTZ18(PD1P,SOIC)TCPVIEW圖2-574HC138圖2-574HC138譯碼器C㈣(TTJS:阿商網(wǎng)函吃冊(cè)Y1Y2Y3viY5VE其真值表為:74HC138集成譯碼器功能表輸入輸出E3E2ElAwAiAoVOYiY2Y3Y4Y5Y6Y7XHXXXXBiHHHHHHHXXHXXXffHMHHHHHLXXXXXHHHHHHHHHLLLLLLHHHHHHHHLLLLHHLHHHHHHLLLEfLHHLHHHHHHL1LHHHHHLHHHHHLLHLLHHHHLHHHLLHLHHHHHHLHHHLLHHLHHHHHHLHHLLHHHHHHHHHHL承口一高由平L一低電平*一任意電平E3,F2>El為輸入使能端AlAi'Ac為二進(jìn)制教據(jù)輸入端為8個(gè)輸出信號(hào)字母上面的J號(hào)說(shuō)明該輸入或輸出是低電平有效2.7報(bào)警電路報(bào)警電路如圖2-6所示。利用了三極管作為開(kāi)關(guān)管驅(qū)動(dòng)蜂鳴器發(fā)聲。圖2-6報(bào)警電路三、程序設(shè)計(jì)思想及流程圖3-1流程圖四、電路的安裝及調(diào)試4.1安裝步驟檢查元件的好壞按電路圖買(mǎi)好元件后首先檢查買(mǎi)回元件的好壞,按各元件的檢測(cè)方法分別進(jìn)行檢測(cè),一定要仔細(xì)認(rèn)真。而且要認(rèn)真核對(duì)原理圖是否一致,在檢查好后才可上件、焊件,防止出現(xiàn)錯(cuò)誤焊件后不便改正。放置、焊接各元件按原理圖的位置放置各元件,在放置過(guò)程中要先放置、焊接較低的元件,后焊較高的和要求較高的元件。特別是容易損壞的元件要后焊,在焊集成芯片時(shí)連續(xù)焊接時(shí)間不要超過(guò)10s,注意芯片的安裝方向。4.2電路的調(diào)試首先燒入顯示程序,看顯示正不正常。在調(diào)試程序時(shí),發(fā)現(xiàn)有的指令用的不正確,導(dǎo)致電路功能不能完全實(shí)現(xiàn),另外軟件程序中的延時(shí)有的過(guò)長(zhǎng)、有的過(guò)短等等。五、總結(jié)這一學(xué)年所學(xué)的單片機(jī)及微機(jī)接口知識(shí)在這次的課程設(shè)計(jì)中得到了充分的體驗(yàn),在完成這個(gè)畢業(yè)設(shè)計(jì)的過(guò)程中,也遇到了不少問(wèn)題,但在老師和同學(xué)的幫助下,問(wèn)題很快就得到了解決。在此過(guò)程中,我也學(xué)到了不少的新知識(shí),自己的動(dòng)手能力里得到了大大的提高,分析問(wèn)題和總結(jié)問(wèn)題也積累了不少的經(jīng)驗(yàn),在此我衷心的感謝老師。感謝

老師對(duì)我完成這個(gè)課題的支持與幫助,在設(shè)計(jì)過(guò)程中給了我寶貴的建議和意見(jiàn),同時(shí)也感謝我的同組同學(xué),為我提供了很多的資料和幫助。六、參考文獻(xiàn)(1)鄧胡濱.《單片機(jī)原理及應(yīng)用技術(shù)一一基于KeilC和Proteus仿真》人民郵電出版社七、附錄7.1實(shí)物圖mH1*4—01一01廣菖at07"307.2仿真圖7.3部分程序清單#ifndef_CONFIG_H#define_CONFIG_H/*通用頭文件*/#include<reg52.h>#include<intrins.h>/*數(shù)據(jù)類(lèi)型定義*/typedefsignedcharint8;//8位有符號(hào)整型數(shù)typedefsignedintint16;//16位有符號(hào)整型數(shù)typedefsignedlongint32;//32位有符號(hào)整型數(shù)typedefunsignedcharuint8;//8位無(wú)符號(hào)整型數(shù)typedefunsignedintuint16;//16位無(wú)符號(hào)整型數(shù)typedefunsignedlonguint32;//32位無(wú)符號(hào)整型數(shù)/*全局運(yùn)行參數(shù)定義*/#defineSYS_MCLK(11059200/12)〃系統(tǒng)主時(shí)鐘頻率,即振蕩器頻率4-12/*IO引腳分配定義*/sbitKEY_IN_1=P2A4;//矩陣按鍵的掃描輸入引腳1sbitKEY_IN_2=P2A5;//矩陣按鍵的掃描輸入引腳2sbitKEY_IN_3=P2A6;//矩陣按鍵的掃描輸入引腳3sbitKEY_IN_4=P2A7;//矩陣按鍵的掃描輸入引腳4sbitKEY_OUT_1=P2A3;〃矩陣按鍵的掃描輸出引腳1sbitKEY_OUT_2=P2A2;〃矩陣按鍵的掃描輸出引腳2sbitKEY_OUT_3=P2A1;//矩陣按鍵的掃描輸出引腳3sbitKEY_OUT_4=P2A0;〃矩陣按鍵的掃描輸出引腳4sbitADDR0=P1A0;//LED位選譯碼地址引腳0sbitADDR1=P1A1;//LED位選譯碼地址引腳1sbitADDR2=P1A2;//LED位選譯碼地址引腳2sbitADDR3=P1A3;//LED位選譯碼地址引腳3sbitENLED=P1A4;//LED顯示部件的總使能引腳#defineLCD1602_DBP0//1602液晶數(shù)據(jù)端口sbitLCD1602_RS=P1A0;//1602液晶指令/數(shù)據(jù)選擇引腳sbitLCD1602_RW=P1A1;//1602液晶讀寫(xiě)引腳sbitLCD1602_E=P1A5;//1602液晶使能引腳sbitDS1302_CE=P1A7;//DS1302片選引腳sbitDS1302_CK=P3A5;//DS1302通信時(shí)鐘引腳sbitDS1302_IO=P3A4;//DS1302通信數(shù)據(jù)引腳sbitI2C_SCL=P3A7;//I2C總線時(shí)鐘引腳sbitI2C_SDA=P3A6;//I2C總線數(shù)據(jù)引腳sbitBUZZER=P1A6;//蜂鳴器控制引腳#endif#ifndef_DS1302_H#define_DS1302_HstructsTime(〃日期時(shí)間結(jié)構(gòu)uint16year;//年uint8mon;//月uint8day;//日uint8hour;〃時(shí)uint8min;//分uint8sec;//秒uint8week;〃星期};#ifndef_DS1302_C#endifvoidInitDS1302();voidGetRealTime(structsTime*time);voidSetRealTime(structsTime*time);#endif#ifndef_KEY_BOARD_H#define_KEY_BOARD_H#ifndef_KEY_BOARD_C#endifvoidKeyScan();voidKeyDriver();#endif#ifndef_LCD1602_H#define_LCD1602_H#ifndef_LCD1602_C#endifvoidInitLcd1602();voidLcdClearScreen();voidLcdOpenCursor();voidLcdCloseCursor();voidLcdSetCursor(uint8x,uint8y);voidLcdShowStr(uint8x,uint8y,uint8*str);voidLcdShowChar(uint8x,uint8y,uint8chr);#endif#define_MAIN_C#include"config.h"#include"Lcd1602.h"#include"LedBuzzer.h"#include"keyboard.h"#include"DS1302.h"#include"Time.h"#include"main.h"bitflag2s=0;//2s定時(shí)標(biāo)志位bitflag200ms=0;//200ms定時(shí)標(biāo)志uint8T0RH=0;//T0重載值的高字節(jié)uint8T0RL=0;//T0重載值的低字節(jié)staticint*alarm=0;〃鬧鐘標(biāo)志位enumeStaSystemstaSystem=E_NORMAL;〃系統(tǒng)運(yùn)行狀態(tài)voidmain(){EA=1;〃開(kāi)總中斷ConfigTimer0(1);//配置T0定時(shí)1msInitLed();//初始化LED模塊InitDS1302();//初始化實(shí)時(shí)時(shí)鐘模塊InitLcd1602();//初始化液晶模while(!flag2s);〃上電后延時(shí)2秒flag2s=0;RefreshTime();//刷新當(dāng)前時(shí)間RefreshAlarm();〃鬧鐘設(shè)定值顯示while(1)〃進(jìn)入主循環(huán){KeyDriver();〃執(zhí)行按鍵驅(qū)動(dòng)if(flag200ms)〃每隔200ms執(zhí)行以下分支{flag200ms=0;FlowingLight(alarm);//流水燈效果實(shí)現(xiàn)RefreshTime();//刷新當(dāng)前時(shí)間AlarmMonitor(alarm);〃監(jiān)控鬧鐘if(staSystem==E_NORMAL)〃正常運(yùn)行時(shí)刷新日期顯示{RefreshDate(0);}}}}/*配置并啟動(dòng)T0,ms-T0定時(shí)時(shí)間*/voidConfigTimer0(uint16ms)//定時(shí)1ms{uint32tmp;tmp=(SYS_MCLK*ms)/1000;〃計(jì)算所需的計(jì)數(shù)值tmp=65536-tmp;〃計(jì)算定時(shí)器重載值tmp=tmp+33;〃補(bǔ)償中斷響應(yīng)延時(shí)造成的誤差T0RH=(uint8)(tmp>>8);〃定時(shí)器重載值拆分為高低字節(jié)T0RL=(uint8)tmp;TMOD&=0xF0;〃清零T0的控制位11110000TMOD|=0x01;//配置T0為模式1xxxxxxx1TH0=T0RH;//加載T0重載值TL0=T0RL;ET0=1;//使能T0中斷TR0=1;〃啟動(dòng)T0}/*T0中斷服務(wù)函數(shù),實(shí)現(xiàn)系統(tǒng)定時(shí)和按鍵掃描*/voidInterruptTimer0()interrupt1〃每次1ms{staticuint8tmr2s=0;staticuint8tmr200ms=0;TH0=T0RH;//重新加載重載值TL0=T0RL;tmr200ms++;//定時(shí)200msif(tmr200ms>=200)//200ms{tmr200ms=0;flag200ms=1;tmr2s++;//定時(shí)2sif(tmr2s>=10)//200ms*10=2S{tmr2s=0;flag2s=1;}}KeyScan();〃執(zhí)行按鍵掃描}#define_DS1302_C#include"config.h"#include"DS1302.h"/*發(fā)送一個(gè)字節(jié)到DS1302通信總線上*/voidDS1302ByteWrite(uint8dat){uint8mask;for(mask=0x01;mask!=0;mask<<=1)//低位在前,逐位移出{if((mask&dat)!=0)//首先輸出該位數(shù)據(jù)DS1302_IO=1;elseDS1302_IO=0;DS1302_CK=1;//然后拉高時(shí)鐘DS1302_CK=0;〃再拉低時(shí)鐘,完成一個(gè)位的操作}DS1302_IO=1;//最后確保釋放IO引腳}/*由DS1302通信總線上讀取一個(gè)字節(jié)*/uint8DS1302ByteRead(){uint8mask;uint8dat=0;for(mask=0x01;mask!=0;mask<<=1)//低位在前,逐位讀取{if(DS1302_IO!=0)〃首先讀取此時(shí)的IO引腳,并設(shè)置dat中的對(duì)應(yīng)位{dat|=mask;}DS1302_CK=1;//然后拉高時(shí)鐘DS1302_CK=0;〃再拉低時(shí)鐘,完成一個(gè)位的操作}returndat;〃最后返回讀到的字節(jié)數(shù)據(jù)}/*用單次寫(xiě)操作向某一寄存器寫(xiě)入一個(gè)字節(jié),reg-寄存器地址,dat-待寫(xiě)入字節(jié)*/voidDS1302SingleWrite(uint8reg,uint8dat){DS1302_CE=1;〃使能片選信號(hào)DS1302ByteWrite((reg<<1)|0x80);〃發(fā)送寫(xiě)寄存器指令DS1302ByteWrite(dat);〃寫(xiě)入字節(jié)數(shù)據(jù)DS1302_CE=0;〃除能片選信號(hào)}/*用單次讀操作從某一寄存器讀取一個(gè)字節(jié),reg-寄存器地址,返回值-讀到的字節(jié)*/uint8DS1302SingleRead(uint8reg){uint8dat;DS1302_CE=1;〃使能片選信號(hào)DS1302ByteWrite((reg<<1)|0x81);〃發(fā)送讀寄存器指令dat=DS1302ByteRead();〃讀取字節(jié)數(shù)據(jù)DS1302_CE=0;〃除能片選信號(hào)returndat;}/*DS1302初始化,如發(fā)生掉電則重新設(shè)置初始時(shí)間*/voidInitDS1302(){uint8dat;structsTimecodeInitTime[]={〃默認(rèn)初始值:2014-01-0112:30:00星期30x2014,0x01,0x01,0x12,0x30,0x00,0x03};DS1302_CE=0;//初始化DS1302通信引腳DS1302_CK=0;dat=DS1302SingleRead(0);〃讀取秒寄存器if((dat&0x80)!=0)〃由秒寄存器最高位CH的值判斷DS1302是否已停止{DS1302SingleWrite(7,0x00);//撤銷(xiāo)寫(xiě)保護(hù)以允許寫(xiě)入數(shù)據(jù)SetRealTime(&InitTime);〃設(shè)置DS1302為默認(rèn)的初始時(shí)間}}#define_KEY_BOARD_C#include"config.h"#include"keyboard.h"#include"Time.h"constuint8codeKeyCodeMap[4][4]={//矩陣按鍵到標(biāo)準(zhǔn)鍵碼的映射表{'1','2','3',0x26},〃數(shù)字鍵1、數(shù)字鍵2、數(shù)字鍵3、向上鍵{'4','5','6',0x25},〃數(shù)字鍵4、數(shù)字鍵5、數(shù)字鍵6、向左鍵{'7','8','9',0x28},〃數(shù)字鍵7、數(shù)字鍵8、數(shù)字鍵9、向下鍵{'0',0x1B,0x0D,0x27}〃數(shù)字鍵0、ESC鍵、回車(chē)鍵、向右鍵};uint8pdataKeySta[4][4]={//全部矩陣按鍵的當(dāng)前狀態(tài){1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};/*按鍵驅(qū)動(dòng)函數(shù),檢測(cè)按鍵動(dòng)作,調(diào)度相應(yīng)動(dòng)作函數(shù),需在主循環(huán)中調(diào)用*/voidKeyDriver(){uint8i,j;staticuint8pdatabackup[4][4]={//按鍵值備份,保存前一次的值{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};for(i=0;i<4;i++)//循環(huán)檢測(cè)4*4的矩陣按鍵{for(j=0;j<4;j++){if(backup[i][j]!=KeySta[i][j])〃檢測(cè)按鍵動(dòng)作{if(backup[i][j]!=0)//按鍵按下時(shí)執(zhí)行動(dòng)作{KeyAction(KeyCodeMap[i][j]);〃調(diào)用按鍵動(dòng)作函數(shù)}backup[i][j]=KeySta[i][j];//刷新前一次的備份值}}}/*按鍵掃描函數(shù),需在定時(shí)中斷中調(diào)用,推薦調(diào)用間隔1ms*/voidKeyScan(){uint8i;staticuint8keyout=0;//矩陣按鍵掃描輸出索引staticuint8keybuf[4][4]={//矩陣按鍵掃描緩沖區(qū){0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF}};//將一行的4個(gè)按鍵值移入緩沖區(qū)keybuf[keyout][0]=(keybuf[keyout][0]<<1)|KEY_IN_1;keybuf[keyout][1]=(keybuf[keyout][1]<<1)|KEY_IN_2;keybuf[keyout]⑵=(keybuf[keyout]⑵<<1)|KEY_IN_3;keybuf[keyout][3]=(keybuf[keyout][3]<<1)|KEY_IN_4;〃消抖后更新按鍵狀態(tài)for(i=0;i<4;i++)〃每行4個(gè)按鍵,所以循環(huán)4次{if((keybuf[keyout][i]&0x0F)==0x00){〃連續(xù)4次掃描值為0,即4*4ms內(nèi)都是按下?tīng)顟B(tài)時(shí),可認(rèn)為按鍵已穩(wěn)定的按下KeySta[keyout][i]=0;}elseif((keybuf[keyout][i]&0x0F)==0x0F){〃連續(xù)4次掃描值為1,即4*4ms內(nèi)都是彈起狀態(tài)時(shí),可認(rèn)為按鍵已穩(wěn)定的彈起KeySta[keyout][i]=1;}}〃執(zhí)行下一次的掃描輸出keyout++;〃輸出索引遞增keyout&=0x03;〃索引值加到4即歸零switch(keyout)//根據(jù)索引值,釋放當(dāng)前輸出引腳,拉低下次的輸出引腳{case0:KEY_OUT_4=1;KEY_OUT_1=0;break;case1:KEY_OUT_1=1;KEY_OUT_2=0;break;case2:KEY_OUT_2=1;KEY_OUT_3=0;break;case3:KEY_OUT_3=1;KEY_OUT_4=0;break;default:break;}}#define_LCD1602_C#include"config.h"#include"Lcd1602.h"uint8tmpP0;〃暫存P0口的值bittmpADDR0;〃暫存LED位選譯碼地址0的值bittmpADDR1;〃暫存LED位選譯碼地址1的值/*暫停LED動(dòng)態(tài)掃描,暫存相關(guān)引腳的值*/voidLedScanPause(){ENLED=1;tmpP0=P0;tmpADDR0=ADDR0;tmpADDR1=ADDR1;}/*恢復(fù)LED動(dòng)態(tài)掃描,恢復(fù)相關(guān)引腳的值*/voidLedScanContinue(){ADDR0=tmpADDR0;ADDR1=tmpADDR1;P0=tmpP0;ENLED=0;}/*等待液晶準(zhǔn)備好*/voidLcdWaitReady(){uint8sta;LCD1602_DB=0xFF;LCD1602_RS=0;LCD1602_RW=1;do{LCD1602_E=1;sta=LCD1602_DB;〃讀取狀態(tài)字LCD1602_E=0;}while(sta&0x80);//bit7等于1表示液晶正忙,重復(fù)檢測(cè)直到其等于0為止}/*向LCD1602液晶寫(xiě)入一字節(jié)命令,cmd-待寫(xiě)入命令值*/voidLcdWriteCmd(uint8cmd){LedScanPause();LcdWaitReady();LCD1602_RS=0;LCD1602_RW=0;LCD1602_DB=cmd;LCD1602_E=1;LCD1602_E=0;LedScanContinue();}/*向LCD1602液晶寫(xiě)入一字節(jié)數(shù)據(jù),dat-待寫(xiě)入數(shù)據(jù)值*/voidLcdWriteDat(uint8dat){LedScanPause();LcdWaitReady();LCD1602_RS=1;LCD1602_RW=0;LCD1602_DB=dat;LCD1602_E=1;LCD1602_E=0;LedScanContinue();}/*清屏*/voidLcdClearScreen(){LcdWriteCmd(0x01);}/*打開(kāi)光標(biāo)的閃爍效果*/voidLcdOpenCursor(){LcdWriteCmd(0x0F);}/*關(guān)閉光標(biāo)顯示*/voidLcdCloseCursor(){LcdWriteCmd(0x0C);}#define_TIME_C#include"config.h"#include"DS1302.h"#include"LedBuzzer.h"#include"Lcd1602.h"#include"Time.h"#include"main.h"uint8codeWeekMod[]={〃星期X字符圖片表0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7,//星期日(紅心)0xEF,0xE7,0xE3,0xE7,0xE7,0xE7,0xE7,0xC3,〃星期10xC3,0x81,0x9D,0x87,0xC3,0xF9,0xC1,0x81,〃星期20xC3,0x81,0x9D,0xC7,0xC7,0x9D,0x81,0xC3,〃星期30xCF,0xC7,0xC3,0xC9,0xC9,0x81,0xCF,0xCF,〃星期40x81,0xC1,0xF9,0xC3,0x87,0x9D,0x81,0xC3,〃星期50xC3,0x81,0xF9,0xC3,0x81,0x99,0x81,0xC3,〃星期6};bitstaMute=0;〃靜音標(biāo)志位uint8AlarmHour=0x07;〃鬧鐘時(shí)間的小時(shí)數(shù)uint8AlarmMin=0x30;〃鬧鐘時(shí)間的分鐘數(shù)structsTimeCurTime;〃當(dāng)前日期時(shí)間uint8SetIndex=0;〃設(shè)置位索引uint8pdataSetAlarmHour;〃鬧鐘小時(shí)數(shù)設(shè)置緩沖uint8pdataSetAlarmMin;〃鬧鐘分鐘數(shù)設(shè)置緩沖structsTimepdataSetTime;//日期時(shí)間設(shè)置緩沖區(qū)/*獲取當(dāng)前日期時(shí)間,并刷新時(shí)間和星期的顯示*/voidRe

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論