版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 基于Proteus多功能電子萬(wàn)年歷的設(shè)計(jì)與實(shí)現(xiàn)</p><p><b> 摘 要</b></p><p> 本文基于Proteus多功能電子萬(wàn)年歷的設(shè)計(jì)并實(shí)現(xiàn)了其功能。主要是借助電路仿真軟件Proteus,在硬件方面主要采用AT89S51單片機(jī)作為主控核心,由LCD1點(diǎn)陣液晶顯示屏顯示??梢詫?duì)年、月、日、星期、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏
2、年補(bǔ)償?shù)榷喾N功能,可以同時(shí)顯示年、月、日、時(shí)、分、秒等信息。在軟件方面,主要包括日歷程序、時(shí)間調(diào)整程序和顯示程序。</p><p> 關(guān)鍵詞:Proteus ;AT89S51;單片機(jī);電子萬(wàn)年歷</p><p> Design and Realization of multi function electronic calendar based on Proteus</p>
3、<p><b> Abstract</b></p><p> In this paper, the design of multi function electronic calendar based on Proteus and the realization of its function. By means of circuit simulation software
4、 Proteus, in terms of hardware using AT89S51 microcontroller as the main control center, by LCD dot matrix LCD display. For years, month, day, week, hour, minutes and seconds for time, but also has a leap year compensati
5、on and other functions, can display year, month, day, time, minutes, seconds and other information. In the software aspect,</p><p> Key words:Proteus;AT89S51;Single chip microcomputer;Electronic calendar<
6、;/p><p><b> 目錄</b></p><p> 1 綜 述1</p><p> 1.1 單片機(jī)及多功能電子萬(wàn)年歷的發(fā)展簡(jiǎn)述1</p><p> 1.2 單片機(jī)及電子萬(wàn)年歷國(guó)內(nèi)外發(fā)展?fàn)顩r2</p><p><b> 2 開(kāi)發(fā)平臺(tái)3</b>&l
7、t;/p><p> 2.1 Keil uVision3介紹3</p><p> 2.2 單片機(jī)仿真軟件Proteus4</p><p><b> 3 硬件設(shè)計(jì)5</b></p><p> 3.1 AT89S51引腳及功能5</p><p> 3.2 AT89
8、S51的內(nèi)部結(jié)構(gòu)6</p><p> 3.2.1 電路設(shè)計(jì)框圖7</p><p> 3.2.2 主要單元電路設(shè)計(jì)8</p><p> 3.2.3 單片機(jī)中斷9</p><p> 3.3 LCD液晶顯示器9</p><p> 3.4 按鍵系統(tǒng)11</p><p>
9、; 4 程序設(shè)計(jì)12</p><p> 4.1 定時(shí)器模塊12</p><p> 4.2 外部中斷響應(yīng)模塊13</p><p> 4.3 主函數(shù)模塊14</p><p> 4.4 判斷閏年每月天數(shù)15</p><p> 4.5 時(shí)間調(diào)整16</p><p>
10、 5 系統(tǒng)仿真與調(diào)試18</p><p> 5.1 系統(tǒng)仿真18</p><p> 5.1.1 系統(tǒng)原理電路圖繪制18</p><p> 5.1.2 Keil 工程的建立19</p><p> 5.2 系統(tǒng)調(diào)試20</p><p> 5.2.1 LCD液晶顯示調(diào)試20</p>
11、;<p> 5.2.2 定時(shí)器調(diào)試21</p><p> 5.2.3 中斷函數(shù)調(diào)試21</p><p> 6 測(cè)試結(jié)果與分析22</p><p> 6.1 代碼的功能22</p><p> 6.2 測(cè)試結(jié)果分析25</p><p> 7 實(shí)驗(yàn)總結(jié)28</p>
12、<p><b> 致 謝29</b></p><p><b> 參考文獻(xiàn)30</b></p><p><b> 附 錄31</b></p><p><b> 緒論</b></p><p> 隨著科技的快速發(fā)展,自從觀太
13、陽(yáng)、擺鐘到現(xiàn)在電子鐘,在人們的不斷研究,不斷創(chuàng)新之下一步步進(jìn)步。本次課題主要介紹了基于Proteus的多功能電子萬(wàn)年歷的設(shè)計(jì)與實(shí)現(xiàn),多功能電子萬(wàn)年歷是這一發(fā)展趨勢(shì)中的代表,它順應(yīng)了時(shí)代的進(jìn)步,符合人們對(duì)時(shí)間方面的要求。它的出現(xiàn)給人們的日常生活帶來(lái)的諸多方便,在時(shí)間極顯寶貴的現(xiàn)代已經(jīng)廣泛應(yīng)用于各個(gè)領(lǐng)域,其作用更是不言而喻。而且多功能電子萬(wàn)年歷采用直觀的數(shù)字顯示,可以同時(shí)顯示年、月、日、時(shí)、分、秒等信息,還具有時(shí)間校準(zhǔn)等功能。本次課題主要研
14、究液晶顯示器LCD與單片機(jī)之間的硬件互聯(lián)及通信,對(duì)數(shù)種硬件連接方案進(jìn)行了詳盡的比較,在軟件方面對(duì)日歷算法也進(jìn)行了論述。其功耗小,可選用4~6V電壓為其供電,更符合消費(fèi)者的生活需求。</p><p> 1.1 單片機(jī)及多功能電子萬(wàn)年歷的發(fā)展簡(jiǎn)述</p><p> 單片微型計(jì)算機(jī)簡(jiǎn)稱(chēng)單片機(jī),是典型的嵌入式微控制器,其英文縮寫(xiě)為MCU,它最早是用在工業(yè)控制領(lǐng)域。從1972年至今單片機(jī)經(jīng)歷了四
15、個(gè)階段的發(fā)展,從Inter公司推出的MCS-8為代表的單片機(jī)到第二階段的部分功能優(yōu)化,再到8位至16的轉(zhuǎn)變,衍生到今天的單片機(jī)用于生活和各個(gè)工業(yè)用途。</p><p> 自從觀太陽(yáng)、擺鐘到現(xiàn)在電子鐘,人類(lèi)不斷研究,不斷創(chuàng)新紀(jì)錄,科學(xué)技術(shù)的不斷提高,計(jì)算機(jī)科學(xué)技術(shù)的日漸成熟,為人類(lèi)的高品質(zhì)生活提供了強(qiáng)有力的后盾??茖W(xué)技術(shù)介入人類(lèi)的生活,這是社會(huì)發(fā)展的必然趨勢(shì),而萬(wàn)年歷是這一發(fā)展趨勢(shì)中的代表,萬(wàn)年歷順應(yīng)了人們對(duì)時(shí)間
16、方面的要求,它的出現(xiàn)給人們的生活帶來(lái)的諸多方便,在時(shí)間極顯寶貴的現(xiàn)代生活中,已經(jīng)廣泛應(yīng)用于各個(gè)領(lǐng)域,其作用更是不言而喻。相比起傳統(tǒng)的時(shí)間工具,本系統(tǒng)有著精確顯示時(shí)間計(jì)算,清晰、全面的顯示信息界面,沒(méi)有厭余數(shù)據(jù),且具有溫度、農(nóng)歷顯示等功能,這些是傳統(tǒng)時(shí)間工具無(wú)法達(dá)到的。而相比市場(chǎng)出售的其他高科技時(shí)間工具,本系統(tǒng)有著制作簡(jiǎn)單,成本低廉等市場(chǎng)優(yōu)勢(shì)。 </p><p> 1.2單片機(jī)及電子萬(wàn)年歷國(guó)內(nèi)外發(fā)展?fàn)顩r
17、</p><p> 隨著微電子技術(shù)的高速發(fā)展,單片機(jī)在國(guó)民經(jīng)濟(jì)的個(gè)人領(lǐng)域得到了廣泛的運(yùn)用。單片機(jī)開(kāi)發(fā)技術(shù)已成為電子信息、電氣、通信、自動(dòng)化、機(jī)電一體化等專(zhuān)業(yè)技術(shù)人員必須掌握的技術(shù)。</p><p> 在國(guó)內(nèi):?jiǎn)纹瑱C(jī)的學(xué)習(xí)呈上升趨勢(shì),但很多人學(xué)習(xí)是無(wú)頭緒,不知道從何入手,行業(yè)發(fā)展迅速,國(guó)內(nèi)生產(chǎn)技術(shù)不斷提升。國(guó)內(nèi)企業(yè)為了獲得更大的投資收益,在生產(chǎn)規(guī)模和產(chǎn)品質(zhì)量上不斷提升,開(kāi)發(fā)單片機(jī)呈必然趨
18、勢(shì)。我國(guó)生產(chǎn)的多功能電子萬(wàn)年歷有很多,總體上來(lái)說(shuō)是研究多功能電子萬(wàn)年歷為主,商家生產(chǎn)的電子萬(wàn)年歷更從質(zhì)量、價(jià)格、實(shí)用上考慮不斷改變電子萬(wàn)年歷的設(shè)計(jì),使其更有市場(chǎng)。在科技發(fā)達(dá)的今天,智能化必將是以后的發(fā)展趨勢(shì),所以開(kāi)發(fā)活和學(xué)習(xí)單片機(jī)是社會(huì)發(fā)展的必然需求。</p><p> 在國(guó)外:最具有代表性的計(jì)時(shí)產(chǎn)品就是電子萬(wàn)年歷,它是近代世界鐘表業(yè)界的第三次革命。前兩次革命是擺和擺輪游絲的發(fā)明,以及石英晶體振蕩器的應(yīng)用,第三
19、次革命就是單片機(jī)數(shù)碼計(jì)時(shí)技術(shù)的應(yīng)用,使得從原來(lái)傳統(tǒng)指針計(jì)時(shí)的方式發(fā)展為人們?nèi)粘8鼮槭煜さ囊构鈹?shù)字顯示方式,直觀明了,并增加了全自動(dòng)日期,星期,溫度以及農(nóng)歷等顯示功能,它更符合消費(fèi)者的生活需求。因此,電子萬(wàn)年歷的出現(xiàn)帶來(lái)了鐘表計(jì)時(shí)業(yè)界跨越性的進(jìn)步。</p><p> 當(dāng)前,電子萬(wàn)年歷技術(shù)已經(jīng)進(jìn)入了優(yōu)化人-家庭-環(huán)境的整體關(guān)系的階段,它向著超微型、超高效以及集成電路的微型化方向發(fā)展,并為電子萬(wàn)年歷上的集中控制提供了
20、基礎(chǔ)。目前,市場(chǎng)上出售的萬(wàn)年歷品種很多,其中大部分是基于單片機(jī)技術(shù)設(shè)計(jì)的電子系統(tǒng)。當(dāng)今,數(shù)字萬(wàn)年歷主要還是用于計(jì)時(shí)、自動(dòng)報(bào)時(shí)、定時(shí)、日期查詢(xún)以及自動(dòng)控制等方面。由于單片機(jī)技術(shù)以及數(shù)字集成電路技術(shù)的發(fā)展和采用了先進(jìn)的石英技術(shù),使得如今的數(shù)字萬(wàn)年歷系統(tǒng)具有體積小、耗電省、計(jì)時(shí)準(zhǔn)確、性能穩(wěn)定、維護(hù)方便、走時(shí)準(zhǔn)確、攜帶方便等優(yōu)點(diǎn),此外,現(xiàn)在市場(chǎng)上已有現(xiàn)成的數(shù)字萬(wàn)年歷集成電路芯片出售,而且價(jià)格便宜、使用也很方便。</p><p
21、><b> 2 開(kāi)發(fā)平臺(tái)</b></p><p> 本節(jié)主要介紹開(kāi)發(fā)平臺(tái),兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng)Keil uVision3軟件和單片機(jī)仿真軟件Proteus。</p><p> 2.1 Keil uVision3介紹</p><p> 圖2.1 Keil uVision3軟件</p><
22、;p> Keil uVision3是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。Keil提供了包括C編譯器、宏匯編、連接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開(kāi)發(fā)方案,通過(guò)一個(gè)集成開(kāi)發(fā)環(huán)境(uVision)將這些部分組合在一起。 </p><p> Keil
23、uVision3工具包為for Dos的集成開(kāi)發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個(gè)開(kāi)發(fā)流程。開(kāi)發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及C51編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由LIB51創(chuàng)建生成庫(kù)文件,也可以與庫(kù)文件一起經(jīng)L51連接定位生成絕對(duì)目標(biāo)文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進(jìn)行源
24、代碼級(jí)調(diào)試,也可由仿真器使用直接對(duì)目標(biāo)板進(jìn)行調(diào)試,也可以直接寫(xiě)入程序存貯器如EPROM中。 </p><p> 相比起其他單片機(jī)的開(kāi)發(fā)軟件,Keil uVision3生成的目標(biāo)代碼效率非常之高,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。在開(kāi)發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語(yǔ)言的優(yōu)勢(shì)。編譯后能生成.hex文件,能直接為ISIS 7 Professional仿真軟件所使用。</p
25、><p> 2.2單片機(jī)仿真軟件Proteus</p><p> 圖2.2 Proteus單片機(jī)仿真軟件</p><p> 在Proteus是英國(guó)Labcenter公司開(kāi)發(fā)的電路及點(diǎn)偏激系統(tǒng)設(shè)計(jì)與仿真軟件。它可以實(shí)現(xiàn)數(shù)字電路,模擬電路及為控制器系統(tǒng)與外設(shè)的混合電路系統(tǒng)的電路仿真、軟件仿真、 系統(tǒng)協(xié)同仿真和PCB設(shè)計(jì)等功能。它能對(duì)各種處理器進(jìn)行實(shí)時(shí)仿真、調(diào)試與測(cè)試的
26、EDA工具,真正實(shí)現(xiàn)了再?zèng)]有目標(biāo)原型是就可以對(duì)系統(tǒng)進(jìn)行調(diào)試測(cè)試與驗(yàn)證。Proteus提供了30多個(gè)元件庫(kù)和7000余個(gè)元器件。元件涉及電阻、電容、二極管、三極管、變壓器、放大器、各種激勵(lì)源等等。SIS 7 Professional能完成原理圖設(shè)計(jì)的仿真平臺(tái),用于電路原理圖的設(shè)計(jì)以及交互式仿真。通過(guò)Keil uVision3編譯生成的.hex文件能直接用于Proteus所設(shè)計(jì)的電路圖上。</p><p><b
27、> 3 硬件設(shè)計(jì)</b></p><p> 微機(jī)處理系統(tǒng)中硬件的選擇直接影響系統(tǒng)的功能及穩(wěn)定性。選擇功能適合,少發(fā)生偶合的硬件設(shè)備,是整個(gè)系統(tǒng)設(shè)計(jì)的關(guān)鍵部分,所以本次設(shè)計(jì)選擇AT89S51進(jìn)行實(shí)驗(yàn)。</p><p> 3.1 AT89S51引腳及功能</p><p> AT89S51是一個(gè)低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含4k By
28、tes ISP的可反復(fù)擦寫(xiě)1000次的Flash只讀程序存儲(chǔ)器,器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲(chǔ)單元,AT89S51在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。</p><p> AT89S51采用的是40只引腳的雙列直插式封裝,如圖3.1所示。</p><p>
29、圖3.1 AT89S51引腳圖</p><p><b> 電源及晶振引腳 </b></p><p> Vcc(第40腳):+5V電源引腳; Vss(第20腳):接地引腳; </p><p> XTAL1、XTAL2(第19、18腳):外接晶振的兩個(gè)引腳。</p><p><b> 控
30、制引腳</b></p><p> RST/Vpd(第9腳):復(fù)位/備用電源引腳; </p><p> ALE/PROG(第30腳):地址鎖存使能輸出/編程脈沖輸入;</p><p> PSEN(第29腳):輸出訪問(wèn)片外程序存儲(chǔ)器讀選通信號(hào);</p><p> EA/Vpp(第31腳):外部ROM允許訪問(wèn)/編程電源
31、輸入。</p><p><b> 并行I/O口引腳</b></p><p> 并行I/O口共有32只引腳,其中:</p><p> P0.0~P0.7(第39~32腳)統(tǒng)稱(chēng)為P0口;</p><p> P1.0~P1.7(第1-8腳)統(tǒng)稱(chēng)為P1口;</p><p> P2.0~P2.7(
32、第21~28腳)統(tǒng)稱(chēng)為P2口;</p><p> P3.0~P3.7(第10~17腳)統(tǒng)稱(chēng)為P3口,作為一般I/O口使用。</p><p> 3.2 AT89S51的內(nèi)部結(jié)構(gòu)</p><p> 其內(nèi)部結(jié)構(gòu)包含了作為微型計(jì)算機(jī)所必需的基本功能部件,如CPU、RAM、ROM、定時(shí)/計(jì)數(shù)器和可編程并行I/O口、可編程串行口等。這些功能部件通常都掛靠在單片機(jī)內(nèi)部總線(xiàn)上
33、,通過(guò)內(nèi)部總線(xiàn)傳送數(shù)據(jù)信息和控制信息。其內(nèi)部基本結(jié)構(gòu)如圖3.2所示。</p><p> 圖3.2 硬件系統(tǒng)組成結(jié)構(gòu)框圖</p><p> 1.中央處理器(CPU):整個(gè)單片機(jī)的核心部件,是8位數(shù)據(jù)寬度的處理器,能處理8位二進(jìn)制數(shù)據(jù)或代碼,CPU負(fù)責(zé)控制、指揮和調(diào)度整個(gè)單元系統(tǒng)協(xié)調(diào)的工作,完成運(yùn)算和控制輸入輸出功能等操作。 </p><p> 2.數(shù)據(jù)
34、存儲(chǔ)器(RAM):片內(nèi)有128個(gè)8位用戶(hù)8個(gè)據(jù)存儲(chǔ)單元和128個(gè)專(zhuān)用寄存器單元,它們是統(tǒng)一編址的,專(zhuān)用寄存器只能用于存放控制指令數(shù)據(jù),用戶(hù)能訪問(wèn),而不能用于存放用戶(hù)數(shù)據(jù),所以,用戶(hù)能使用的RAM只有128個(gè),可存放讀寫(xiě)的數(shù)據(jù)、運(yùn)算的中間結(jié)果或用戶(hù)定義的字型表, </p><p> 3.程序存儲(chǔ)器(ROM):共有4096個(gè)8位掩膜ROM,用于存放用戶(hù)程序、原始數(shù)據(jù)或表格。 </p>
35、<p> 4.中斷系統(tǒng):具備較完善的中斷功能,有兩個(gè)外中斷、兩個(gè)定時(shí)/計(jì)數(shù)器中斷和一個(gè)串行中斷,可滿(mǎn)足不同的控制要求,并與2級(jí)的優(yōu)先級(jí)別選擇。 </p><p> 5.定時(shí)器/計(jì)數(shù)器:片內(nèi)有2個(gè)16位的可編程定時(shí)器/計(jì)數(shù)器,以實(shí)現(xiàn)定時(shí)或計(jì)數(shù)產(chǎn)生中斷,用于控制程序轉(zhuǎn)向。 </p><p> 6.串行口:內(nèi)置1個(gè)全雙工的串行通信口,用于與其它設(shè)備間的串行
36、數(shù)據(jù)傳送,該串行口既可以用作異步通信接發(fā)器,也可以當(dāng)同步移位器使用。 </p><p> 7.并行輸入/輸出(I/O)口:共有4組8位并行I/O口(P0、P1、P2、P3),每個(gè)口都由1個(gè)鎖存器和1個(gè)驅(qū)動(dòng)器組成。并行I/O口主要是用于實(shí)現(xiàn)與外部設(shè)備中數(shù)據(jù)的并行輸入/輸出,有些I/O口還具有其他功能。 </p><p> 8.特殊功能寄存器:共有21個(gè),用于對(duì)片內(nèi)的各
37、功能的部件進(jìn)行管理、控制、監(jiān)視。實(shí)際上是一些控制寄存器和狀態(tài)寄存器,是一個(gè)具有特殊功能的RAM區(qū)。 </p><p> 3.2.1 電路設(shè)計(jì)框圖</p><p> 本系統(tǒng)的電路系統(tǒng)框圖如圖2.1.3所示。AT89S51單片機(jī)對(duì)DS18B20寫(xiě)入控制字并讀取相應(yīng)的數(shù)據(jù),繼而控制LCM1602作出對(duì)應(yīng)的顯示。</p><p> 圖3.3 電路設(shè)計(jì)框圖&l
38、t;/p><p> 3.2.2主要單元電路設(shè)計(jì)</p><p> (1) AT89S51單片機(jī)主控制模塊的設(shè)計(jì)</p><p> AT89S51是一個(gè)低功耗,高性能CMOS 8位單片機(jī),其具有如下特點(diǎn):40個(gè)引腳,4kBytes Flash片內(nèi)程序存儲(chǔ)器,128Bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),32個(gè)外部雙向輸入/輸出(I/O)口,5個(gè)中斷優(yōu)先級(jí)2層中斷嵌
39、套中斷,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,看門(mén)狗(WDT)電路,片內(nèi)時(shí)鐘振蕩器。同時(shí)該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。AT89S51單片機(jī)為40引腳雙列直插芯片,有四個(gè)I/O口P0,P1,P2,P3,MCS-51單片機(jī)共有4個(gè)8位的I/O口(P0、P1、P2、P3),每一條I/O線(xiàn)都能獨(dú)立地作輸出或輸入。</p><p><b> (2) P
40、0口</b></p><p> P0口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,每腳可吸收8TTL門(mén)電流。當(dāng)P1口的管腳第一次寫(xiě)1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。</p><p><b> (3) P1口</b
41、></p><p> P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門(mén)電流。P1口管腳寫(xiě)入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。 </p><p><b> (4) P2口</b></p><p&
42、gt; P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門(mén)電流,當(dāng)P2口被寫(xiě)“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫(xiě)時(shí),P2口輸出其特殊功能寄存器的內(nèi)容
43、。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。 </p><p><b> (5) P3口</b></p><p> P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門(mén)電流。當(dāng)P3口寫(xiě)入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p>
44、<p> 3.2.3 單片機(jī)中斷 </p><p> 典型的8051單片機(jī)有5個(gè)中斷源,可分為兩個(gè)優(yōu)先級(jí),實(shí)現(xiàn)中斷服務(wù)嵌套。用戶(hù)可以用關(guān)中斷指令來(lái)屏蔽中斷請(qǐng)求,也可以用開(kāi)中斷指令是CPU接受中斷申請(qǐng)。每一個(gè)中斷源在軟件中都可以獨(dú)立開(kāi)關(guān),級(jí)別可由用戶(hù)自行設(shè)置。下表2.1.1為中斷控制標(biāo)志列表。</p><p> 表3.1 中斷控制標(biāo)志列表</p>&
45、lt;p> 3.3 LCD液晶顯示器</p><p> 本系統(tǒng)選擇的LCD是AMPIRE128×64的漢字圖形型液晶顯示模塊,可顯示漢字及圖形。單片機(jī)P1口作為數(shù)據(jù)輸出口,RS,R\W,E分別通過(guò)10K的上拉電阻連接到單片機(jī)的P0.0,P0.1,P0.2。VDD接5V電源,VSS接地。VEE為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)
46、可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度)。RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。R/W為讀寫(xiě)信號(hào)線(xiàn),高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫(xiě)操作。E(或EN)端為使能(enable)端,下降沿使能。DB0-DB7為雙向數(shù)據(jù)總線(xiàn),同時(shí)最高位DB7也是忙信號(hào)檢測(cè)位。BLA、BLK分別為顯示器背光燈的正、負(fù)極。液晶顯示器接口圖和管腳表如下所示。</p><p> 圖3.4 LCD液
47、晶顯示器</p><p> 表3.2 LCD接口說(shuō)明表</p><p><b> 3.4 按鍵系統(tǒng)</b></p><p> 基于多功能萬(wàn)年歷設(shè)置日歷、時(shí)間、鬧鐘等功能,我們決定使用button元件作為控制按鈕。Button元件在市場(chǎng)上到處可見(jiàn),其功能單一,少偶合,反應(yīng)速度快等特點(diǎn)。</p><p> 本系統(tǒng)使用
48、3個(gè)button元件分別作為設(shè)置位選、上調(diào)、下調(diào)等功能。3個(gè)按鍵與一個(gè)3位與門(mén)電路相連,作為整個(gè)按鍵控制功能系統(tǒng),以觸發(fā)AT89S51中斷為方式使用設(shè)置功能。其電路圖如圖3.4.1所示:</p><p> 圖3.4.1 按鍵系統(tǒng)</p><p> (1)Button1 :位選功能,設(shè)置位選位,可通過(guò)其對(duì)年、月、日、時(shí)、分、秒進(jìn)行控制;</p><p> (2)
49、Button2 :上調(diào)功能,對(duì)當(dāng)前所處狀態(tài)位進(jìn)行上調(diào);</p><p> (3)Button3 :下調(diào)功能,對(duì)當(dāng)前所處狀態(tài)位進(jìn)行下調(diào)。</p><p><b> 4 程序設(shè)計(jì)</b></p><p> 單片機(jī)的微機(jī)控制系統(tǒng)設(shè)計(jì),除了元件選擇、系統(tǒng)硬件電路設(shè)計(jì)外,最主要的工作就是如何根據(jù)每個(gè)模塊的實(shí)際需求設(shè)計(jì)出應(yīng)用程序。應(yīng)用程序的可靠性、高
50、效性、穩(wěn)定性直接影響系統(tǒng)的實(shí)現(xiàn)與應(yīng)用。因此,程序設(shè)計(jì)在微機(jī)控制系統(tǒng)設(shè)計(jì)中占據(jù)著重要地位。</p><p> 在單片機(jī)的系統(tǒng)設(shè)計(jì)的過(guò)程中,主要分為數(shù)據(jù)處理、系統(tǒng)過(guò)程控制兩大部分。在多功能智能萬(wàn)年歷系統(tǒng)中,數(shù)據(jù)獲取與數(shù)據(jù)分類(lèi)占較大的比例。其中時(shí)間的計(jì)算與獲取是整個(gè)系統(tǒng)的核心所在,另外數(shù)據(jù)顯示、聲音處理、過(guò)程控制也是整個(gè)系統(tǒng)的重點(diǎn)。</p><p> 為了更好地完成各個(gè)部分的內(nèi)容,更方便地進(jìn)
51、行調(diào)程序修改和調(diào)試排錯(cuò),我們把系統(tǒng)分為定時(shí)器模塊、外部中斷響應(yīng)模塊、主函數(shù)模塊這幾大部分進(jìn)行設(shè)計(jì),并分別進(jìn)行設(shè)計(jì)、編程和調(diào)試,最后通過(guò)主程序?qū)⒏鞒绦蚰K連接起來(lái)。這樣有利于程序修改和調(diào)試,增強(qiáng)了程序的可移植性。</p><p><b> 4.1 定時(shí)器模塊</b></p><p> 在本多功能萬(wàn)年歷系統(tǒng)中,使用定時(shí)器來(lái)精確計(jì)算每一秒的時(shí)間長(zhǎng)。首先是對(duì)定時(shí)器的選擇和
52、初始化:</p><p> 選擇定時(shí)器0,方式1。</p><p> TMOD = 0x01;</p><p> 裝載T0的初值,通過(guò)計(jì)算且與溫度傳感器公用,決定以20次溢出作為1秒的時(shí)間,故裝填</p><p> TH0 = 0x3c;</p><p> TR0 = 0xb0;</p><
53、;p> 然后啟動(dòng)定時(shí)器,打開(kāi)總中斷開(kāi)關(guān)</p><p><b> EA = 1;</b></p><p><b> ET0=1;</b></p><p> 初始化完成后便進(jìn)入中斷函數(shù)的設(shè)計(jì)。</p><p> 每一秒所產(chǎn)生的中斷要完成年、月、日、時(shí)、分、秒的計(jì)算,并為其他功能設(shè)定標(biāo)志
54、位等,如聲音,溫度顯示,流程圖如圖4.1。</p><p> 圖4.1計(jì)時(shí)器中斷響應(yīng)程序流程圖</p><p> 4.2外部中斷響應(yīng)模塊</p><p> 本系統(tǒng)使用0號(hào)中斷,在中斷中響應(yīng)設(shè)置時(shí)間、日歷和鬧鐘的功能。首先在主函數(shù)中打開(kāi)0號(hào)中斷開(kāi)關(guān),響應(yīng)模式,總中斷開(kāi)關(guān)</p><p><b> IT0 = 1;</b&
55、gt;</p><p><b> EX0 = 1;</b></p><p><b> EA = 1;</b></p><p> 另外使用button1作為設(shè)置位選位,button2作為上調(diào),button3作為下調(diào),其功能流程圖如圖4.2所示。</p><p> 圖4.2 外部中斷響應(yīng)流程圖&
56、lt;/p><p><b> 4.3 主函數(shù)模塊</b></p><p> 主函數(shù)模塊主要承擔(dān)顯示日歷、時(shí)間、星期、農(nóng)歷等信息。因?yàn)槲覀兯O(shè)的設(shè)置位選位為七次一循環(huán),所以在平常狀態(tài)下,系統(tǒng)顯示相關(guān)信息,當(dāng)進(jìn)入設(shè)置狀態(tài)下,主函數(shù)流程如下。</p><p> 圖4.3 主函數(shù)流程圖</p><p> 4.4判斷閏年每月天
57、數(shù)</p><p> 閏年的二月有29天,否則則為28天,下圖是判斷閏年的每個(gè)月的天數(shù)。</p><p> 圖4.4 判斷閏年每月天數(shù)</p><p> 非閏年每個(gè)月天數(shù)流程圖與之類(lèi)似,這里就不再作具體說(shuō)明。</p><p><b> 4.5時(shí)間調(diào)整</b></p><p> 1.根據(jù)當(dāng)
58、前的所處狀態(tài),來(lái)調(diào)整時(shí)間:滿(mǎn)60秒,分加1;滿(mǎn)60分,時(shí)加1;滿(mǎn)24時(shí),日加1;滿(mǎn)30日,月加1;滿(mǎn)12月,年加1。</p><p> 圖4.5 時(shí)間調(diào)整圖</p><p> 2.時(shí)間調(diào)整程序流程,先按控制鍵進(jìn)入調(diào)整狀態(tài)程序,再根據(jù)進(jìn)入的狀態(tài)進(jìn)行調(diào)整年月日時(shí)分秒,具體流程如下圖所示:</p><p> 圖4.6 時(shí)間調(diào)整程序秒流程圖</p>&l
59、t;p> 圖4.7 時(shí)間調(diào)整程序分流程圖</p><p><b> 5 系統(tǒng)仿真與調(diào)試</b></p><p> 仿真部分采用仿真軟件Proteus和兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng)Keil uVision3軟件來(lái)進(jìn)行仿真和調(diào)試。</p><p><b> 5.1系統(tǒng)仿真</b></p><p
60、> 5.1.1 系統(tǒng)原理電路圖繪制</p><p> ?。?)新建文件:打開(kāi)PROTEUS,點(diǎn)擊FILE,在彈出的下拉菜單中選擇NEW DESIGN,即進(jìn)入原理圖繪制界面。</p><p> ?。?)元器件選?。喊丛O(shè)計(jì)要求,在對(duì)象選擇窗口中點(diǎn)P,彈出PICK DEVICES對(duì)話(huà)框,在KEYWORDS中填寫(xiě)要選擇的元器件,然后在右邊對(duì)話(huà)框中選中要選的元器件,則元器件列在對(duì)象選擇的窗口
61、中。</p><p> (3)放置元器件、電源和地、連線(xiàn),得到系統(tǒng)電路圖,最后進(jìn)行電氣檢測(cè)。</p><p> 圖5.1 總體電路硬件原理圖</p><p> 5.1.2 Keil 工程的建立</p><p><b> 1.源文件的建立</b></p><p> 使用菜單“File-&g
62、t;New”或者點(diǎn)擊工具欄的新建文件按鈕,即可在打開(kāi)的文本編緝窗口中輸入源程序,保存該文件,注意必須加上擴(kuò)展名。</p><p><b> 2.建立工程文件</b></p><p> 點(diǎn)擊“Project->New Project… ”菜單,出現(xiàn)一個(gè)對(duì)話(huà)框,在編緝框中輸入文件名,點(diǎn)擊“保存”按鈕。在Project->Option for target出
63、現(xiàn)第二個(gè)對(duì)話(huà)框選擇目標(biāo) CPU(本次設(shè)計(jì)選擇 Atmel 公司的 AT89C52 芯片)。此時(shí),在工程窗口的文件頁(yè)中出現(xiàn)了“Target 1”,點(diǎn)擊“Source Group1”右鍵,選中其中的“Add file to Group‘Source Group1’”,出現(xiàn)一個(gè)對(duì)話(huà)框,要求尋找源文件(注意,該對(duì)話(huà)框下面的“文件類(lèi)型” 默認(rèn)為 C source file(*.c),也就是以 C 為擴(kuò)展名 的文件),雙擊該文件,將文件加入項(xiàng)目。雙
64、擊文件名,即打開(kāi)該源程序。工程建立好以后,對(duì)工程進(jìn)行進(jìn)一步的設(shè)置,以滿(mǎn)足要求。 </p><p> 首先點(diǎn)擊左邊Project窗口的Target 1,然后使用菜單“Project->Option for target ‘target1’” 設(shè)置對(duì)話(huà)框中的Target頁(yè)面,Xtal后面的數(shù)值是晶振頻率值,本次設(shè)計(jì)設(shè)置為12MHz;Memory Model用于設(shè)置RAM使用情況選擇Small;Compact
65、是可以使用一頁(yè)外部擴(kuò)展RAM,而Larget則是可以使用全部外部的擴(kuò)展RAM。Code Model 用于設(shè)置ROM空間的使用選擇none。</p><p> 設(shè)置對(duì)話(huà)框中的OutPut頁(yè)面中Creat Hex file用于生成可執(zhí)行代碼文件(可以用編程器寫(xiě)入單片機(jī)芯片的HEX格式文件,文件的擴(kuò)展名為.HEX)。</p><p><b> 3.編譯、連接</b>&l
66、t;/p><p> 選擇菜單 Project->Build target,對(duì)當(dāng)前工程進(jìn)行連接, 獲得*.hex的文件,該文件即可被編程器讀入并寫(xiě)到芯片中,同時(shí)還產(chǎn)生了一些其它相關(guān)的文件,可被用于Keil的仿真與調(diào)試。</p><p> 仿真部分采用Protus professional和Keil軟件結(jié)合完成設(shè)計(jì),功能強(qiáng)大且操作較為簡(jiǎn)單,可以很容易的實(shí)現(xiàn)各種系統(tǒng)的仿真。</p&g
67、t;<p> 最后得出系統(tǒng)仿真結(jié)果如下。</p><p> 圖5.2 多功能萬(wàn)年歷系統(tǒng)仿真效果圖</p><p><b> 5.2 系統(tǒng)調(diào)試</b></p><p> 系統(tǒng)調(diào)試主要是在電路原理圖仿真過(guò)程中出現(xiàn)的系統(tǒng)功能、仿真結(jié)果的性能誤差分析,下面我們從系統(tǒng)模塊進(jìn)行調(diào)試和分析。</p><p>
68、5.2.1 LCD液晶顯示調(diào)試</p><p> 這是整個(gè)系統(tǒng)可觀賞性的比分,LCD顯示時(shí)間空隙必須控制在一定的范圍內(nèi),如果時(shí)間短了,LCD會(huì)出現(xiàn)顯示不完整的情況;如果空隙時(shí)間長(zhǎng)了,液晶顯示就會(huì)閃爍的情況,所以其中對(duì)于度的把握非常重要。同時(shí)也要考慮在編譯過(guò)程中,除了顯示間隙還要算上系統(tǒng)數(shù)據(jù)處理與控制的時(shí)間間隙,否則同樣會(huì)出現(xiàn)閃爍的情況。經(jīng)過(guò)幾天的測(cè)試與調(diào)試,最終LCD顯示完整,沒(méi)有出現(xiàn)顯示問(wèn)題。</p&g
69、t;<p> 5.2.2 定時(shí)器調(diào)試</p><p> 定時(shí)器調(diào)試主要看“秒”這位的跳動(dòng)是否精確,這個(gè)需要長(zhǎng)時(shí)間的驗(yàn)證。同時(shí),在定時(shí)器內(nèi)處理的數(shù)據(jù)也要精確,因?yàn)槎〞r(shí)器內(nèi)處理數(shù)據(jù)也花費(fèi)時(shí)間,而這段時(shí)間沒(méi)有算到定時(shí)器內(nèi)。經(jīng)過(guò)長(zhǎng)時(shí)間的運(yùn)行,調(diào)試,最后把誤差范圍調(diào)整到1天±0.001秒。</p><p> 5.2.3 中斷函數(shù)調(diào)試</p><p&g
70、t; 中斷函數(shù)是系統(tǒng)與用戶(hù)交互的最要途徑,用戶(hù)可以通過(guò)連接中斷的按鈕操作系統(tǒng),設(shè)置日期、時(shí)間、鬧鐘等信息。因?yàn)橹袛囗憫?yīng)速度與認(rèn)為按鍵的速度有事會(huì)存在偏差,進(jìn)過(guò)多次試驗(yàn)后,使用了一個(gè)等待響應(yīng)的函數(shù)。該函數(shù)有效地降低了按鍵無(wú)響應(yīng)的概率,但依然無(wú)法做到點(diǎn)觸即可的效果,這還需要改進(jìn)。</p><p> 同時(shí),如果有人機(jī)互動(dòng),就必然會(huì)造成人為錯(cuò)誤,例如我先將月份調(diào)至為1月,然后日期調(diào)為31日,再回頭調(diào)月份為2月,這時(shí)就
71、會(huì)出現(xiàn)2月31日這樣的錯(cuò)誤信息情況。所以,在主函數(shù)中增設(shè)了日期排錯(cuò)函數(shù)。</p><p><b> 6測(cè)試結(jié)果與分析</b></p><p> 本次實(shí)驗(yàn)我們利用Proteus仿真和Keil軟件設(shè)計(jì)了多功能電子萬(wàn)年歷,通過(guò)測(cè)試我們發(fā)現(xiàn),想要幾個(gè)模塊相互配合使用,應(yīng)該將其緊密聯(lián)系起來(lái),而不是一個(gè)個(gè)單獨(dú)的個(gè)體。只有這樣才能夠發(fā)揮更大的潛力,為設(shè)計(jì)萬(wàn)年歷提供更有力的保障。
72、</p><p><b> 6.1代碼的功能</b></p><p> 1.主函數(shù)功能:獲取時(shí)間,顯示萬(wàn)年歷和時(shí)間設(shè)置,代碼如下。</p><p> void main(){</p><p> SFR_Init();</p><p> CAL_Init();</p>&l
73、t;p> GUI_Init();</p><p><b> TR1=1;</b></p><p><b> while(1){</b></p><p> GetTime(&sys);//獲得時(shí)間</p><p> LCD_ShowWNL();//顯示萬(wàn)年歷</p
74、><p> Time_Set(); //時(shí)間設(shè)置</p><p><b> }</b></p><p><b> }</b></p><p> 2. 萬(wàn)年歷顯示函數(shù),設(shè)置刷新模式,代碼如下。</p><p> void LCD_ShowWNL(){&l
75、t;/p><p> LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine); </p><p><b> //秒,每秒鐘刷新</b></p><p> if(!sys.cSec || State_Set) </p><p> //分,普
76、通模式每分鐘刷新</p><p> LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine); </p><p> //處于設(shè)置模式狀態(tài)每次刷新</p><p> if(!sys.cSec && !sys.cMin || State_Set) </p><p&
77、gt; //時(shí),普通模式每小時(shí)刷新</p><p> LCD_ShowTime(sys.cHour,6,63,Hour_Flag,UpLine,UnderLine); </p><p> //處于設(shè)置模式狀態(tài)每次刷新</p><p> if(!sys.cSec && !sys.cMin && !sys.cHour ||
78、 State_Set ){</p><p> //公歷農(nóng)歷的年、月、日、星期</p><p> Show_YMD();</p><p> //普通模式每天刷新</p><p> if(State_Set==7) State_Set=0; } }</p><p> //處于設(shè)置模式狀態(tài)每次刷新 </
79、p><p> 3. 年、月、日、星期、農(nóng)歷、天干地支顯示函數(shù),代碼如下。</p><p> void Show_YMD(){</p><p> uchar uiTempDat;</p><p> uiTempDat=RDS1302(0x88|0x01);</p><p> sys.cMon=((uiTempDat
80、&0x1f)>>4)*10+(uiTempDat&0x0f);</p><p> LCD_ShowTime(sys.cMon,2,5,Mon_Flag,NoUpLine,NoUnderLine);</p><p> hz_disp(4,5,1,uMod[1],1,NoUpLine,NoUnderLine);//月</p><p&
81、gt; Show16X32(2,27,ucNum3216[sys.cDay/10],Day_Flag);//日</p><p> Show16X32(2,43,ucNum3216[sys.cDay%10],Day_Flag); </p><p> hz_disp(6,8,2,ucLunar[13],1,UpLine,UnderLine); </p&g
82、t;<p> if(sys.cWeek==7)</p><p> hz_disp(6,40,1,uMod[2],1,UpLine,UnderLine);//星期 </p><p><b> else</b></p><p> hz_disp(6,40,1,ucLunar[sys.cWeek],1,UpLine,Un
83、derLine);//星期</p><p> LCD_ShowTime(20,0,9,1,UpLine,UnderLine);</p><p> LCD_ShowTime(sys.cYear,0,25,Year_Flag,UpLine,UnderLine);</p><p> hz_disp(0,41,1,uMod[0],1,UpLine,UnderLine
84、);//年</p><p> SpDat=GetSpringDay(sys.cYear,sys.cMon,sys.cDay);//獲得農(nóng)歷</p><p> if(SpDat.cMon==1)//顯示農(nóng)歷月</p><p> hz_disp(4,64,1,ucLunar[15],1,UpLine,NoUnderLine);/
85、/"正"</p><p> else if(SpDat.cMon==11)</p><p> hz_disp(4,64,1,ucLunar[16],1,UpLine,NoUnderLine);//"冬"</p><p> else if(SpDat.cMon==12)</p><p> hz
86、_disp(4,64,1,ucLunar[17],1,UpLine,NoUnderLine);//"臘"</p><p><b> else</b></p><p> hz_disp(4,63,1,ucLunar[SpDat.cMon],1,UpLine,NoUnderLine);//"二"~"十"
87、</p><p> if(SpDat.cDay/10==1 && SpDat.cDay%10>0)//顯示"十",例如"十四"而不是"一四"</p><p> hz_disp(4,95,1,ucLunar[10],1,UpLine,NoUnderLine);</p><p>
88、 else if(SpDat.cDay/10==2 && SpDat.cDay%10>0) //顯示"廿",例如"廿三"而不是"二四"</p><p> hz_disp(4,95,1,ucLunar[19],1,UpLine,NoUnderLine);</p><p><b> else&
89、lt;/b></p><p> hz_disp(4,95,1,ucLunar[SpDat.cDay/10],1,UpLine,NoUnderLine); //正常數(shù)字</p><p> if(!(SpDat.cDay%10)) //"十"</p><p> hz_disp(4,111,1,ucLunar[10]
90、,1,UpLine,NoUnderLine);</p><p> else//正常數(shù)字</p><p> hz_disp(4,111,1,ucLunar[SpDat.cDay%10],1,UpLine,NoUnderLine);</p><p> hz_disp(0,104,1,SX[(uint)(2000+SpDat.cYear)
91、%12],1,UpLine,UnderLine); //生肖</p><p> hz_disp(2,95,1,TianGan[(uint)(2000+SpDat.cYear)%10],1,NoUpLine,NoUnderLine);//天干</p><p> hz_disp(2,111,1,DiZhi[(uint)(2000+SpDat.cYear)%12],1,NoUpLin
92、e,NoUnderLine);//地支</p><p><b> }</b></p><p> 4.定時(shí)器1中斷服務(wù)函數(shù),讀取鍵值和清鍵值,保證每次按鍵只執(zhí)行依次按鍵動(dòng)作,代碼如下。</p><p> void timer1() interrupt 3 {</p><p> TH1= (-10000)/25
93、6;</p><p> TL1= (-10000)%256;</p><p> keyinput();//讀取按鍵</p><p> if (keyvalue&0x10){</p><p> State_Flag=TRUE;</p><p> keyvalue &= 0xef;//
94、清鍵值,保證一按下只執(zhí)行一次按鍵動(dòng)作</p><p><b> }</b></p><p> if (keyvalue&0x20 ){//加</p><p> Inc_Flag=TRUE;</p><p> keyvalue &= 0xdf;//清鍵值,保證一按下只執(zhí)行一次按鍵動(dòng)作。<
95、;/p><p><b> }</b></p><p> if (keyvalue&0x40){//減</p><p> Dec_Flag=TRUE;</p><p> keyvalue &= 0xbf;//清鍵值,保證一直按下只執(zhí)行一次按鍵動(dòng)作。</p><p><
96、;b> }</b></p><p><b> }</b></p><p> 5.計(jì)算當(dāng)年是否是閏年。當(dāng)前年為閏年滿(mǎn)足這兩個(gè)條件:滿(mǎn)足年份能被4整除;年份若是100的整數(shù)倍的話(huà),需被400整除才能是閏年,否則為平年。也就是“四年一閏,百年不閏,四百年再閏”,代碼如下。</p><p> bit YearFlag(ucha
97、r cYear){</p><p> if( (!(cYear%4) && (cYear%100)) || !(cYear%400) )</p><p><b> return 1;</b></p><p> else return 0;</p><p><b> }</b>
98、</p><p> 6. 計(jì)算目標(biāo)日期是星期幾。</p><p> uchar GetWeekDay(uchar cYear,uchar cMon,uchar cDay){</p><p><b> char i;</b></p><p> uint Sum=0,tmpyear;</p><
99、p> cYear=(((cYear>>4)&0x0f)*10)+(cYear&0x0f);//temp1+temp2;</p><p> tmpyear=2000+cYear;</p><p> cMon=(((cMon>>4)&0x0f)*10)+(cMon&0x0f);//temp1+temp2;</p>
100、<p> cDay=(((cDay>>4)&0x0f)*10)+(cDay&0x0f);//temp1+temp2;</p><p> for(i=1;i<=cMon-1;i++)</p><p> Sum+=Mon1[YearFlag(cYear)][i];</p><p> Sum+=cDay-1;</
101、p><p> return (((tmpyear-1)+(tmpyear-1)/4-(tmpyear-1)/100+(tmpyear-1)/400+Sum)%7)+1;</p><p><b> }</b></p><p> 7. LCD圖形初始化函數(shù)。描繪框架布局,并獲取初始化時(shí)間,代碼如下。</p><p> v
102、oid GUI_Init(){ </p><p> LCD12864_init();</p><p> ClearLCD();</p><p> Rect(0,0,127,63,1); //描繪框架</p><p> Line(62,0,62,62,1);</p><p> Line(0,48,12
103、7,48,1);</p><p> Line(0,15,127,15,1);</p><p> Line(24,15,24,48,1);</p><p> Line(63,32,128,32,1);</p><p> SetTime(sys);//設(shè)置時(shí)間</p><p> GetTime(&
104、sys);//獲得時(shí)間</p><p> Show_YMD();</p><p> LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine);</p><p> en_disp(6,103,1,Asc,":",1,UpLine,UnderLine);</p><p
105、> LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine); </p><p> en_disp(6,79,1,Asc,":",1,UpLine,UnderLine); </p><p> LCD_ShowTime(sys.cHour,6,63,Hour_Flag,UpLine,UnderLine);&l
106、t;/p><p> hz_disp(2,64,1,ucLunar[11],1,NoUpLine,NoUnderLine);//"農(nóng)"</p><p> hz_disp(2,80,1,ucLunar[12],1,NoUpLine,NoUnderLine);//"歷"</p><p> hz_disp(4,79,1,uMod
107、[1],1,UpLine,NoUnderLine);//"月"</p><p><b> }</b></p><p><b> 6.2測(cè)試結(jié)果分析</b></p><p> 在Proteus軟件和Keil uVision3軟件相結(jié)合調(diào)試的,完全用仿真軟件在PC機(jī)上對(duì)目標(biāo)電路原理圖和程序進(jìn)行檢
108、測(cè)和調(diào)試。調(diào)試過(guò)程中單片機(jī)相應(yīng)輸入端由通用鍵盤(pán)和鼠標(biāo)設(shè)定,運(yùn)行狀態(tài)、各寄存器狀態(tài)、端口狀態(tài)等都可以在指定的窗口區(qū)域顯示出來(lái),以確定程序運(yùn)行有無(wú)錯(cuò)誤。 </p><p> 整體程序調(diào)試:即把各子程序整體連起來(lái)進(jìn)入到綜合電路調(diào)試,看是否能實(shí)現(xiàn)預(yù)計(jì)的功能顯示。在這階段若發(fā)生故障,可以考慮各子程序在運(yùn)行時(shí)是否破壞現(xiàn)場(chǎng),數(shù)據(jù)緩沖單元是否發(fā)生沖突,標(biāo)志位的建立和清除在設(shè)計(jì)上是否失誤,堆棧是否溢出,輸入輸出狀態(tài)是否
109、正常等。</p><p> 其中測(cè)試結(jié)果主要看“秒”這位的跳動(dòng)是否精確,這個(gè)是需要長(zhǎng)時(shí)間的驗(yàn)證。同時(shí),在定時(shí)器內(nèi)處理的數(shù)據(jù)要精確,因?yàn)槎〞r(shí)器內(nèi)處理數(shù)據(jù)也花費(fèi)時(shí)間,而這段時(shí)間沒(méi)有算到定時(shí)器內(nèi)。經(jīng)過(guò)長(zhǎng)時(shí)間的調(diào)試、運(yùn)行,最后把誤差范圍盡可能的縮減。</p><p> 在調(diào)試過(guò)程中,出現(xiàn)過(guò)以下三種問(wèn)題:</p><p> ?。?)顯示的數(shù)據(jù)秒并沒(méi)有變化,是因?yàn)闆](méi)有啟動(dòng)定
110、時(shí)器,而我又不斷地去讀取DS1302時(shí)鐘芯片寄存器中的數(shù)據(jù)導(dǎo)致。啟動(dòng)定時(shí)器后,就不會(huì)出現(xiàn)這種問(wèn)題。</p><p> ?。?)調(diào)整時(shí)間后應(yīng)該先去掉寫(xiě)保護(hù),如果存在寫(xiě)保護(hù),那么在初始化寫(xiě)入初始時(shí)間時(shí),是寫(xiě)不進(jìn)去初始化的時(shí)間的。因而會(huì)看見(jiàn)顯示的時(shí)間并不隨著設(shè)置的初始化的值變化而變化,甚至我們看見(jiàn)的時(shí)間并不按著一秒一秒的增加。 </p><p> ?。?)液晶顯示不穩(wěn)定,甚至出現(xiàn)亂碼現(xiàn)
111、象。這是因?yàn)橐壕э@示的時(shí)候,由于采用的并行總線(xiàn),顯然傳輸速度快,但是數(shù)據(jù)端口必須接1K的排阻,以實(shí)現(xiàn)驅(qū)動(dòng)。因此,排阻的作用很大。寫(xiě)程序時(shí)要嚴(yán)格按照時(shí)序就行,否則,也不會(huì)顯示。</p><p> 經(jīng)過(guò)多次修改程序最后調(diào)試出來(lái)理想的效果,如下圖所示。</p><p><b> (a)</b></p><p><b> (b)<
112、/b></p><p> 圖6.1 系統(tǒng)仿真結(jié)果圖</p><p> 但是也有其的缺陷,現(xiàn)將日期調(diào)成31日,再調(diào)整到2月,顯示會(huì)出現(xiàn)問(wèn)題,如下圖所示。</p><p> 圖6.2 系統(tǒng)仿真結(jié)果圖</p><p><b> 7 實(shí)驗(yàn)總結(jié)</b></p><p> 在這次的畢業(yè)設(shè)計(jì)中不
113、僅檢驗(yàn)了我所學(xué)習(xí)的知識(shí),也培養(yǎng)了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。從系統(tǒng)問(wèn)題的提出,總體的功能模塊設(shè)計(jì),硬件選型,程序設(shè)計(jì),到最后系統(tǒng)是仿真實(shí)現(xiàn),達(dá)到預(yù)想的目的。</p><p> 在功能模塊設(shè)計(jì)的時(shí)候,我做了查閱了大量的資料,最后確定幾個(gè)我們?nèi)粘I钪邢⑾⑾嚓P(guān)的功能,使用市場(chǎng)上比較廉價(jià)高效的元件,并能在我的能力上能完成。最終確定使用AT89S51這個(gè)多功能的核心板。雖然在過(guò)程中斷斷續(xù)
114、續(xù)地遇到了很多問(wèn)題,但都通過(guò)查閱書(shū)籍,瀏覽網(wǎng)頁(yè),老師的指導(dǎo)找到了問(wèn)題所在,并順利地解決了問(wèn)題。在現(xiàn)在科技的發(fā)展,單片機(jī)的功能與外接電路的配合已經(jīng)相當(dāng)成熟,遇到問(wèn)題的時(shí)候,可以多想,多問(wèn),多看書(shū),以解決問(wèn)題。這也是四年來(lái)在大學(xué)所學(xué)到對(duì)資料的獲取能力。</p><p> 通過(guò)這次畢業(yè)設(shè)計(jì),我了解了整個(gè)嵌入式單片機(jī)系統(tǒng)的開(kāi)發(fā)流程和設(shè)計(jì)技巧。對(duì)過(guò)去4年所學(xué)習(xí)的知識(shí)是一種鞏固,更是一種溫故而知新。很多以前不甚了解的問(wèn)題都
115、得到了很全面的信息。同時(shí),也培養(yǎng)了我獨(dú)立完成系統(tǒng)項(xiàng)目設(shè)計(jì)的能力,以前都是團(tuán)隊(duì)的方式完成項(xiàng)目的,而這次讓我從軟硬件選型到系統(tǒng)實(shí)現(xiàn)的一次親生經(jīng)歷,獲益良多。這段時(shí)間的學(xué)習(xí)和實(shí)踐,使我了解到了理論和實(shí)際之間的差別,第一次真正接觸到了實(shí)際中的問(wèn)題,并通過(guò)查閱資料、和老師、同學(xué)交流,加強(qiáng)了自身的分析問(wèn)題、解決問(wèn)題的能力。同時(shí),我也發(fā)現(xiàn)了自己在某些方面的不足,尤其是程序編寫(xiě)和考慮問(wèn)題不夠全面,這是我以后要加以改進(jìn)的方面。也為以后的工作學(xué)習(xí)打下了結(jié)實(shí)
116、的基礎(chǔ)。</p><p><b> 致 謝</b></p><p> 感謝我的導(dǎo)師王華本老師的親切關(guān)懷,我的畢業(yè)設(shè)計(jì)是在她的悉心指導(dǎo)下完成的,她給予我在學(xué)術(shù)上的諄諄教誨。我不僅學(xué)到了知識(shí),而且學(xué)到了做人的準(zhǔn)則和嚴(yán)謹(jǐn)?shù)闹螌W(xué)作風(fēng)。</p><p> 沒(méi)有王華本老師的指導(dǎo)我想我不可能順利地完成此次課程設(shè)計(jì),在此我想對(duì)她表示由衷的感謝。在此我還
117、要感謝學(xué)校為我?guī)?lái)的一切,沒(méi)有學(xué)校為我提供的平臺(tái),我更不可能完成本次畢業(yè)設(shè)計(jì)。</p><p> 在論文即將完成之際,到開(kāi)始進(jìn)入課題到論文的完成,再到順利完成了課程論文答辯稿,有很多老師,同學(xué),朋友向我提供的幫助,在此,我向他們表示最真誠(chéng)的謝意。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]王海燕,楊艷華. Pro
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 多功能萬(wàn)年歷畢業(yè)論文
- 機(jī)械電子工程畢業(yè)設(shè)計(jì)-基于proteus的多功能萬(wàn)年歷的設(shè)計(jì)
- 電子萬(wàn)年歷畢業(yè)論文
- 畢業(yè)論文——電子萬(wàn)年歷設(shè)計(jì)
- 電子萬(wàn)年歷設(shè)計(jì)-畢業(yè)論文
- 畢業(yè)論文——電子萬(wàn)年歷設(shè)計(jì)
- 畢業(yè)論文-基于tft彩屏的多功能萬(wàn)年歷設(shè)計(jì)
- proteus課程設(shè)計(jì)--電子萬(wàn)年歷
- 電子萬(wàn)年歷的設(shè)計(jì)畢業(yè)論文
- 萬(wàn)年歷設(shè)計(jì)畢業(yè)論文
- 多功能電子萬(wàn)年歷課程設(shè)計(jì)
- 畢業(yè)論文——電子萬(wàn)年歷設(shè)計(jì)與制作
- 電子萬(wàn)年歷的設(shè)計(jì)與制作畢業(yè)論文
- 數(shù)字電子萬(wàn)年歷的畢業(yè)論文
- 萬(wàn)年歷畢業(yè)論文---基于at89s52單片機(jī)的電子萬(wàn)年歷設(shè)計(jì)
- 基于labview的電子萬(wàn)年歷的設(shè)計(jì)畢業(yè)論文
- 萬(wàn)年歷設(shè)計(jì)制作【畢業(yè)論文】
- 基于javascript的萬(wàn)年歷設(shè)計(jì)【畢業(yè)論文】
- 數(shù)字萬(wàn)年歷設(shè)計(jì)畢業(yè)論文
- 電子萬(wàn)年歷設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論