版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、基于Proteus多功能電子萬年歷的設(shè)計與實現(xiàn)摘 要本文基于Proteus多功能電子萬年歷的設(shè)計并實現(xiàn)了其功能。主要是借助電路仿真軟件Proteus,在硬件方面主要采用AT89S51單片機作為主控核心,由LCD1點陣液晶顯示屏顯示??梢詫δ?、月、日、星期、時、分、秒進行計時,還具有閏年補償?shù)榷喾N功能,可以同時顯示年、月、日、時、分、秒等信息。在軟件方面,主要包括日歷程序、時間調(diào)整程序和顯示程序。關(guān)鍵詞:Proteus ;AT89S51;單片機;電子萬年歷Design and Realization of multi function electronic calendar based on P
2、roteusAbstractIn this paper, the design of multi function electronic calendar based on Proteus and the realization of its function. By means of circuit simulation software Proteus, in terms of hardware using AT89S51 microcontroller as the main control center, by LCD dot matrix LCD display. For years
3、, month, day, week, hour, minutes and seconds for time, but also has a leap year compensation and other functions, can display year, month, day, time, minutes, seconds and other information. In the software aspect, mainly includes calendar program time to adjust procedures and display program.Key wo
4、rds:Proteus;AT89S51;Single chip microcomputer;Electronic calendar目錄1 綜 述11.1 單片機及多功能電子萬年歷的發(fā)展簡述11.2 單片機及電子萬年歷國內(nèi)外發(fā)展狀況22 開發(fā)平臺32.1 Keil uVision3介紹32.2 單片機仿真軟件Proteus43 硬件設(shè)計53.1 AT89S51引腳及功能53.2 AT89S51的內(nèi)部結(jié)構(gòu)63.2.1 電路設(shè)計框圖73.2.2 主要單元電路設(shè)計83.2.3 單片機中斷93.3 LCD液晶顯示器93.4 按鍵系統(tǒng)114 程序設(shè)計124.1 定時器模塊124.2 外部中斷響應
5、模塊134.3 主函數(shù)模塊144.4 判斷閏年每月天數(shù)154.5 時間調(diào)整165 系統(tǒng)仿真與調(diào)試185.1 系統(tǒng)仿真185.1.1 系統(tǒng)原理電路圖繪制185.1.2 Keil 工程的建立195.2 系統(tǒng)調(diào)試205.2.1 LCD液晶顯示調(diào)試205.2.2 定時器調(diào)試215.2.3 中斷函數(shù)調(diào)試216 測試結(jié)果與分析226.1 代碼的功能226.2 測試結(jié)果分析257 實驗總結(jié)28致 謝29參考文獻30附 錄31緒論隨著科技的快速發(fā)展,自從觀太陽、擺鐘到現(xiàn)在電子鐘,在人們的不斷研究,不斷創(chuàng)新之下一步步進步。本次課題主要介紹了基于Proteus的多功能電子萬年歷的設(shè)計與實現(xiàn),多功能電子萬年歷是這一
6、發(fā)展趨勢中的代表,它順應了時代的進步,符合人們對時間方面的要求。它的出現(xiàn)給人們的日常生活帶來的諸多方便,在時間極顯寶貴的現(xiàn)代已經(jīng)廣泛應用于各個領(lǐng)域,其作用更是不言而喻。而且多功能電子萬年歷采用直觀的數(shù)字顯示,可以同時顯示年、月、日、時、分、秒等信息,還具有時間校準等功能。本次課題主要研究液晶顯示器LCD與單片機之間的硬件互聯(lián)及通信,對數(shù)種硬件連接方案進行了詳盡的比較,在軟件方面對日歷算法也進行了論述。其功耗小,可選用46V電壓為其供電,更符合消費者的生活需求。1.1 單片機及多功能電子萬年歷的發(fā)展簡述單片微型計算機簡稱單片機,是典型的嵌入式微控制器,其英文縮寫為MCU,它最早是用在工業(yè)控制領(lǐng)域
7、。從1972年至今單片機經(jīng)歷了四個階段的發(fā)展,從Inter公司推出的MCS-8為代表的單片機到第二階段的部分功能優(yōu)化,再到8位至16的轉(zhuǎn)變,衍生到今天的單片機用于生活和各個工業(yè)用途。自從觀太陽、擺鐘到現(xiàn)在電子鐘,人類不斷研究,不斷創(chuàng)新紀錄,科學技術(shù)的不斷提高,計算機科學技術(shù)的日漸成熟,為人類的高品質(zhì)生活提供了強有力的后盾。科學技術(shù)介入人類的生活,這是社會發(fā)展的必然趨勢,而萬年歷是這一發(fā)展趨勢中的代表,萬年歷順應了人們對時間方面的要求,它的出現(xiàn)給人們的生活帶來的諸多方便,在時間極顯寶貴的現(xiàn)代生活中,已經(jīng)廣泛應用于各個領(lǐng)域,其作用更是不言而喻。相比起傳統(tǒng)的時間工具,本系統(tǒng)有著精確顯示時間計算,清晰
8、、全面的顯示信息界面,沒有厭余數(shù)據(jù),且具有溫度、農(nóng)歷顯示等功能,這些是傳統(tǒng)時間工具無法達到的。而相比市場出售的其他高科技時間工具,本系統(tǒng)有著制作簡單,成本低廉等市場優(yōu)勢。 1.2單片機及電子萬年歷國內(nèi)外發(fā)展狀況隨著微電子技術(shù)的高速發(fā)展,單片機在國民經(jīng)濟的個人領(lǐng)域得到了廣泛的運用。單片機開發(fā)技術(shù)已成為電子信息、電氣、通信、自動化、機電一體化等專業(yè)技術(shù)人員必須掌握的技術(shù)。在國內(nèi):單片機的學習呈上升趨勢,但很多人學習是無頭緒,不知道從何入手,行業(yè)發(fā)展迅速,國內(nèi)生產(chǎn)技術(shù)不斷提升。國內(nèi)企業(yè)為了獲得更大的投資收益,在生產(chǎn)規(guī)模和產(chǎn)品質(zhì)量上不斷提升,開發(fā)單片機呈必然趨勢。我國生產(chǎn)的多功能電子萬年歷有
9、很多,總體上來說是研究多功能電子萬年歷為主,商家生產(chǎn)的電子萬年歷更從質(zhì)量、價格、實用上考慮不斷改變電子萬年歷的設(shè)計,使其更有市場。在科技發(fā)達的今天,智能化必將是以后的發(fā)展趨勢,所以開發(fā)活和學習單片機是社會發(fā)展的必然需求。在國外:最具有代表性的計時產(chǎn)品就是電子萬年歷,它是近代世界鐘表業(yè)界的第三次革命。前兩次革命是擺和擺輪游絲的發(fā)明,以及石英晶體振蕩器的應用,第三次革命就是單片機數(shù)碼計時技術(shù)的應用,使得從原來傳統(tǒng)指針計時的方式發(fā)展為人們?nèi)粘8鼮槭煜さ囊构鈹?shù)字顯示方式,直觀明了,并增加了全自動日期,星期,溫度以及農(nóng)歷等顯示功能,它更符合消費者的生活需求。因此,電子萬年歷的出現(xiàn)帶來了鐘表計時業(yè)界跨越性
10、的進步。當前,電子萬年歷技術(shù)已經(jīng)進入了優(yōu)化人-家庭-環(huán)境的整體關(guān)系的階段,它向著超微型、超高效以及集成電路的微型化方向發(fā)展,并為電子萬年歷上的集中控制提供了基礎(chǔ)。目前,市場上出售的萬年歷品種很多,其中大部分是基于單片機技術(shù)設(shè)計的電子系統(tǒng)。當今,數(shù)字萬年歷主要還是用于計時、自動報時、定時、日期查詢以及自動控制等方面。由于單片機技術(shù)以及數(shù)字集成電路技術(shù)的發(fā)展和采用了先進的石英技術(shù),使得如今的數(shù)字萬年歷系統(tǒng)具有體積小、耗電省、計時準確、性能穩(wěn)定、維護方便、走時準確、攜帶方便等優(yōu)點,此外,現(xiàn)在市場上已有現(xiàn)成的數(shù)字萬年歷集成電路芯片出售,而且價格便宜、使用也很方便。2 開發(fā)平臺本節(jié)主要介紹開發(fā)平臺,兼容
11、單片機C語言軟件開發(fā)系統(tǒng)Keil uVision3軟件和單片機仿真軟件Proteus。2.1 Keil uVision3介紹 圖2.1 Keil uVision3軟件Keil uVision3是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(uVision)將這些部分組合在一起。 Keil uVision3工具包為for
12、60;Dos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及C51編譯器編譯生成目標文件(.OBJ)。目標文件可由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標準的Hex文件,以供調(diào)試器dScope51或tScope51使用進行源代碼級調(diào)試,也可由仿真器使用直接對目標板進行調(diào)試,也可以直接寫入程序存貯器如EPROM中。 相比起其他單片機的開發(fā)軟件,Keil uVision3生成的目標代碼效率非常之高,多
13、數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。編譯后能生成.hex文件,能直接為ISIS 7 Professional仿真軟件所使用。2.2單片機仿真軟件Proteus 圖2.2 Proteus單片機仿真軟件在Proteus是英國Labcenter公司開發(fā)的電路及點偏激系統(tǒng)設(shè)計與仿真軟件。它可以實現(xiàn)數(shù)字電路,模擬電路及為控制器系統(tǒng)與外設(shè)的混合電路系統(tǒng)的電路仿真、軟件仿真、 系統(tǒng)協(xié)同仿真和PCB設(shè)計等功能。它能對各種處理器進行實時仿真、調(diào)試與測試的EDA工具,真正實現(xiàn)了再沒有目標原型是就可以對系統(tǒng)進行調(diào)試測試與驗證。Proteus提供了30多個
14、元件庫和7000余個元器件。元件涉及電阻、電容、二極管、三極管、變壓器、放大器、各種激勵源等等。SIS 7 Professional能完成原理圖設(shè)計的仿真平臺,用于電路原理圖的設(shè)計以及交互式仿真。通過Keil uVision3編譯生成的.hex文件能直接用于Proteus所設(shè)計的電路圖上。3 硬件設(shè)計微機處理系統(tǒng)中硬件的選擇直接影響系統(tǒng)的功能及穩(wěn)定性。選擇功能適合,少發(fā)生偶合的硬件設(shè)備,是整個系統(tǒng)設(shè)計的關(guān)鍵部分,所以本次設(shè)計選擇AT89S51進行實驗。3.1 AT89S51引腳及功能AT89S51是一個低功耗,高性能CMOS 8位單片機,片內(nèi)含4k Bytes ISP的可反復擦寫1000次的F
15、lash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)制造,兼容標準MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,AT89S51在眾多嵌入式控制應用系統(tǒng)中得到廣泛應用。AT89S51采用的是40只引腳的雙列直插式封裝,如圖3.1所示。圖3.1 AT89S51引腳圖(1) 電源及晶振引腳 Vcc(第40腳):+5V電源引腳; Vss(第20腳):接地引腳; XTAL1、XTAL2(第19、18腳):外接晶振的兩個引腳。(2) 控制引腳RST/Vpd(第9腳):復位/備用電源引腳; ALE/PR
16、OG(第30腳):地址鎖存使能輸出/編程脈沖輸入;PSEN(第29腳):輸出訪問片外程序存儲器讀選通信號;EA/Vpp(第31腳):外部ROM允許訪問/編程電源輸入。(3) 并行I/O口引腳并行I/O口共有32只引腳,其中:P0.0P0.7(第3932腳)統(tǒng)稱為P0口;P1.0P1.7(第1-8腳)統(tǒng)稱為P1口;P2.0P2.7(第2128腳)統(tǒng)稱為P2口;P3.0P3.7(第1017腳)統(tǒng)稱為P3口,作為一般I/O口使用。3.2 AT89S51的內(nèi)部結(jié)構(gòu)其內(nèi)部結(jié)構(gòu)包含了作為微型計算機所必需的基本功能部件,如CPU、RAM、ROM、定時/計數(shù)器和可編程并行I/O口、可編程串行口等。這些功能部件
17、通常都掛靠在單片機內(nèi)部總線上,通過內(nèi)部總線傳送數(shù)據(jù)信息和控制信息。其內(nèi)部基本結(jié)構(gòu)如圖3.2所示。圖3.2 硬件系統(tǒng)組成結(jié)構(gòu)框圖1.中央處理器(CPU):整個單片機的核心部件,是8位數(shù)據(jù)寬度的處理器,能處理8位二進制數(shù)據(jù)或代碼,CPU負責控制、指揮和調(diào)度整個單元系統(tǒng)協(xié)調(diào)的工作,完成運算和控制輸入輸出功能等操作。 2.數(shù)據(jù)存儲器(RAM):片內(nèi)有128個8位用戶8個據(jù)存儲單元和128個專用寄存器單元,它們是統(tǒng)一編址的,專用寄存器只能用于存放控制指令數(shù)據(jù),用戶能訪問,而不能用于存放用戶數(shù)據(jù),所以,用戶能使用的RAM只有128個,可存放讀寫的數(shù)據(jù)、運算的中間結(jié)果或用戶定義的字型表,
18、;3.程序存儲器(ROM):共有4096個8位掩膜ROM,用于存放用戶程序、原始數(shù)據(jù)或表格。 4.中斷系統(tǒng):具備較完善的中斷功能,有兩個外中斷、兩個定時/計數(shù)器中斷和一個串行中斷,可滿足不同的控制要求,并與2級的優(yōu)先級別選擇。 5.定時器/計數(shù)器:片內(nèi)有2個16位的可編程定時器/計數(shù)器,以實現(xiàn)定時或計數(shù)產(chǎn)生中斷,用于控制程序轉(zhuǎn)向。 6.串行口:內(nèi)置1個全雙工的串行通信口,用于與其它設(shè)備間的串行數(shù)據(jù)傳送,該串行口既可以用作異步通信接發(fā)器,也可以當同步移位器使用。 7.并行輸入/輸出(I/O)口:共有4組8位并行I/O口(P0、P1、P2、P3),每個口都由
19、1個鎖存器和1個驅(qū)動器組成。并行I/O口主要是用于實現(xiàn)與外部設(shè)備中數(shù)據(jù)的并行輸入/輸出,有些I/O口還具有其他功能。 8.特殊功能寄存器:共有21個,用于對片內(nèi)的各功能的部件進行管理、控制、監(jiān)視。實際上是一些控制寄存器和狀態(tài)寄存器,是一個具有特殊功能的RAM區(qū)。 3.2.1 電路設(shè)計框圖本系統(tǒng)的電路系統(tǒng)框圖如圖2.1.3所示。AT89S51單片機對DS18B20寫入控制字并讀取相應的數(shù)據(jù),繼而控制LCM1602作出對應的顯示。鍵盤控制模塊AT89S51主控模塊LCD1液晶顯示模塊 圖3.3 電路設(shè)計框圖3.2.2主要單元電路設(shè)計(1) AT89S51單片機主控制模塊的設(shè)計A
20、T89S51是一個低功耗,高性能CMOS 8位單片機,其具有如下特點:40個引腳,4kBytes Flash片內(nèi)程序存儲器,128Bytes的隨機存取數(shù)據(jù)存儲器(RAM),32個外部雙向輸入/輸出(I/O)口,5個中斷優(yōu)先級2層中斷嵌套中斷,2個16位可編程定時計數(shù)器,2個全雙工串行通信口,看門狗(WDT)電路,片內(nèi)時鐘振蕩器。同時該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應不同產(chǎn)品的需求。AT89S51單片機為40引腳雙列直插芯片,有四個I/O口P0,P1,P2,P3,MCS-51單片機共有4個8位的I/O口(P0、P1、P2、P3),每一條I/O線都能獨立地作輸出或輸入。
21、(2) P0口P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。(3) P1口P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 (4) P2口P2口:P2口為一個內(nèi)部上
22、拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 (5) P3口P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內(nèi)部上拉為高電平
23、,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。3.2.3 單片機中斷 典型的8051單片機有5個中斷源,可分為兩個優(yōu)先級,實現(xiàn)中斷服務嵌套。用戶可以用關(guān)中斷指令來屏蔽中斷請求,也可以用開中斷指令是CPU接受中斷申請。每一個中斷源在軟件中都可以獨立開關(guān),級別可由用戶自行設(shè)置。下表2.1.1為中斷控制標志列表。表3.1 中斷控制標志列表中斷源工作標志向量地址外部中斷0IE00311計時器0TF00BH外部中斷1IE113H計時器1TF11BH串行端口傳送T123H串行端口接收R123H3.3 LCD液晶顯示器本系統(tǒng)選擇的LCD是AMPIRE1
24、28×64的漢字圖形型液晶顯示模塊,可顯示漢字及圖形。單片機P1口作為數(shù)據(jù)輸出口,RS,RW,E分別通過10K的上拉電阻連接到單片機的P0.0,P0.1,P0.2。VDD接5V電源,VSS接地。VEE為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度)。RS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。R/W為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。E(或EN)端為使能(enable)端,下降沿使能。DB0-DB7為雙向數(shù)據(jù)總線,同時最高位DB7也是忙
25、信號檢測位。BLA、BLK分別為顯示器背光燈的正、負極。液晶顯示器接口圖和管腳表如下所示。圖3.4 LCD液晶顯示器表3.2 LCD接口說明表管腳號管教電平引腳說明1CS1 H/L 片選擇信號,低電平時選擇前64列2CS2 H/L片選擇信號,低電平時選擇后64列3GND 0V邏輯電源地4VCC5.0V邏輯電源正5V0LCD驅(qū)動電壓6RSH/L數(shù)據(jù)指令選擇7R/WH/L讀寫選擇:高電平:讀數(shù)據(jù);低電平:寫數(shù)據(jù) 8EH/L讀寫使能,高電平有效,下降沿鎖定數(shù)據(jù)9DB0H/L數(shù)據(jù)輸入輸出引腳10DB1H/L數(shù)據(jù)輸入輸出引腳11DB2H/L數(shù)據(jù)輸入輸出引
26、腳12DB3H/L數(shù)據(jù)輸入輸出引腳13DB4H/L數(shù)據(jù)輸入輸出引腳14DB5H/L數(shù)據(jù)輸入輸出引腳15DB6H/L數(shù)據(jù)輸入輸出引腳16DB7H/L數(shù)據(jù)輸入輸出引腳17RSTL復位信號,低電平有效 18VOUT-10V背光源負極3.4 按鍵系統(tǒng)基于多功能萬年歷設(shè)置日歷、時間、鬧鐘等功能,我們決定使用button元件作為控制按鈕。Button元件在市場上到處可見,其功能單一,少偶合,反應速度快等特點。本系統(tǒng)使用3個button元件分別作為設(shè)置位選、上調(diào)、下調(diào)等功能。3個按鍵與一個3位與門電路相連,作為整個按鍵控制功能系統(tǒng),以觸發(fā)AT89S51中斷為方式使用設(shè)置功能。其電路圖如圖3.4.1
27、所示: 圖3.4.1 按鍵系統(tǒng)(1)Button1 :位選功能,設(shè)置位選位,可通過其對年、月、日、時、分、秒進行控制;(2)Button2 :上調(diào)功能,對當前所處狀態(tài)位進行上調(diào);(3)Button3 :下調(diào)功能,對當前所處狀態(tài)位進行下調(diào)。4 程序設(shè)計單片機的微機控制系統(tǒng)設(shè)計,除了元件選擇、系統(tǒng)硬件電路設(shè)計外,最主要的工作就是如何根據(jù)每個模塊的實際需求設(shè)計出應用程序。應用程序的可靠性、高效性、穩(wěn)定性直接影響系統(tǒng)的實現(xiàn)與應用。因此,程序設(shè)計在微機控制系統(tǒng)設(shè)計中占據(jù)著重要地位。在單片機的系統(tǒng)設(shè)計的過程中,主要分為數(shù)據(jù)處理、系統(tǒng)過程控制兩大部分。在多功能智能萬年歷系統(tǒng)中,數(shù)據(jù)獲取與數(shù)據(jù)分類占較大的比例
28、。其中時間的計算與獲取是整個系統(tǒng)的核心所在,另外數(shù)據(jù)顯示、聲音處理、過程控制也是整個系統(tǒng)的重點。為了更好地完成各個部分的內(nèi)容,更方便地進行調(diào)程序修改和調(diào)試排錯,我們把系統(tǒng)分為定時器模塊、外部中斷響應模塊、主函數(shù)模塊這幾大部分進行設(shè)計,并分別進行設(shè)計、編程和調(diào)試,最后通過主程序?qū)⒏鞒绦蚰K連接起來。這樣有利于程序修改和調(diào)試,增強了程序的可移植性。4.1 定時器模塊在本多功能萬年歷系統(tǒng)中,使用定時器來精確計算每一秒的時間長。首先是對定時器的選擇和初始化:選擇定時器0,方式1。TMOD = 0x01;裝載T0的初值,通過計算且與溫度傳感器公用,決定以20次溢出作為1秒的時間,故裝填TH0 = 0x3
29、c;TR0 = 0xb0;然后啟動定時器,打開總中斷開關(guān)EA = 1;ET0=1;初始化完成后便進入中斷函數(shù)的設(shè)計。每一秒所產(chǎn)生的中斷要完成年、月、日、時、分、秒的計算,并為其他功能設(shè)定標志位等,如聲音,溫度顯示,流程圖如圖4.1。圖4.1計時器中斷響應程序流程圖4.2外部中斷響應模塊本系統(tǒng)使用0號中斷,在中斷中響應設(shè)置時間、日歷和鬧鐘的功能。首先在主函數(shù)中打開0號中斷開關(guān),響應模式,總中斷開關(guān)IT0 = 1;EX0 = 1;EA = 1;另外使用button1作為設(shè)置位選位,button2作為上調(diào),button3作為下調(diào),其功能流程圖如圖4.2所示。否是否是圖4.2 外部中斷響應流程圖4.3
30、 主函數(shù)模塊主函數(shù)模塊主要承擔顯示日歷、時間、星期、農(nóng)歷等信息。因為我們所設(shè)的設(shè)置位選位為七次一循環(huán),所以在平常狀態(tài)下,系統(tǒng)顯示相關(guān)信息,當進入設(shè)置狀態(tài)下,主函數(shù)流程如下。圖4.3 主函數(shù)流程圖4.4判斷閏年每月天數(shù)閏年的二月有29天,否則則為28天,下圖是判斷閏年的每個月的天數(shù)。圖4.4 判斷閏年每月天數(shù)非閏年每個月天數(shù)流程圖與之類似,這里就不再作具體說明。4.5時間調(diào)整1.根據(jù)當前的所處狀態(tài),來調(diào)整時間:滿60秒,分加1;滿60分,時加1;滿24時,日加1;滿30日,月加1;滿12月,年加1。圖4.5 時間調(diào)整圖2.時間調(diào)整程序流程,先按控制鍵進入調(diào)整狀態(tài)程序,再根據(jù)進入的狀態(tài)進行調(diào)整年月
31、日時分秒,具體流程如下圖所示:圖4.6 時間調(diào)整程序秒流程圖 圖4.7 時間調(diào)整程序分流程圖5 系統(tǒng)仿真與調(diào)試仿真部分采用仿真軟件Proteus和兼容單片機C語言軟件開發(fā)系統(tǒng)Keil uVision3軟件來進行仿真和調(diào)試。5.1系統(tǒng)仿真5.1.1 系統(tǒng)原理電路圖繪制(1)新建文件:打開PROTEUS,點擊FILE,在彈出的下拉菜單中選擇NEW DESIGN,即進入原理圖繪制界面。(2)元器件選?。喊丛O(shè)計要求,在對象選擇窗口中點P,彈出PICK DEVICES對話框,在KEYWORDS中填寫要選擇的元器件,然后在右邊對話框中選中要選的元器件,則元器件列在對象選擇的窗口中。(3)放置元器件、電源和
32、地、連線,得到系統(tǒng)電路圖,最后進行電氣檢測。圖5.1 總體電路硬件原理圖5.1.2 Keil 工程的建立1.源文件的建立使用菜單“File->New”或者點擊工具欄的新建文件按鈕,即可在打開的文本編緝窗口中輸入源程序,保存該文件,注意必須加上擴展名。2.建立工程文件點擊“Project->New Project ”菜單,出現(xiàn)一個對話框,在編緝框中輸入文件名,點擊“保存”按鈕。在Project->Option for target出現(xiàn)第二個對話框選擇目標 CPU(本次設(shè)計選擇 Atmel 公司的 AT89C52 芯片)。此時,在工程窗口的文件頁中出現(xiàn)了“Target 1”,點擊
33、“Source Group1”右鍵,選中其中的“Add file to GroupSource Group1”,出現(xiàn)一個對話框,要求尋找源文件(注意,該對話框下面的“文件類型” 默認為 C source file(*.c),也就是以 C 為擴展名 的文件),雙擊該文件,將文件加入項目。雙擊文件名,即打開該源程序。工程建立好以后,對工程進行進一步的設(shè)置,以滿足要求。 首先點擊左邊Project窗口的Target 1,然后使用菜單“Project->Option for target target1” 設(shè)置對話框中的Target頁面,Xtal后面的數(shù)值是晶振頻率值,本次設(shè)計設(shè)置為12MHz;
34、Memory Model用于設(shè)置RAM使用情況選擇Small;Compact是可以使用一頁外部擴展RAM,而Larget則是可以使用全部外部的擴展RAM。Code Model 用于設(shè)置ROM空間的使用選擇none。設(shè)置對話框中的OutPut頁面中Creat Hex file用于生成可執(zhí)行代碼文件(可以用編程器寫入單片機芯片的HEX格式文件,文件的擴展名為.HEX)。3.編譯、連接選擇菜單 Project->Build target,對當前工程進行連接, 獲得*.hex的文件,該文件即可被編程器讀入并寫到芯片中,同時還產(chǎn)生了一些其它相關(guān)的文件,可被用于Keil的仿真與調(diào)試。仿真部分采用Pr
35、otus professional和Keil軟件結(jié)合完成設(shè)計,功能強大且操作較為簡單,可以很容易的實現(xiàn)各種系統(tǒng)的仿真。最后得出系統(tǒng)仿真結(jié)果如下。圖5.2 多功能萬年歷系統(tǒng)仿真效果圖5.2 系統(tǒng)調(diào)試系統(tǒng)調(diào)試主要是在電路原理圖仿真過程中出現(xiàn)的系統(tǒng)功能、仿真結(jié)果的性能誤差分析,下面我們從系統(tǒng)模塊進行調(diào)試和分析。5.2.1 LCD液晶顯示調(diào)試這是整個系統(tǒng)可觀賞性的比分,LCD顯示時間空隙必須控制在一定的范圍內(nèi),如果時間短了,LCD會出現(xiàn)顯示不完整的情況;如果空隙時間長了,液晶顯示就會閃爍的情況,所以其中對于度的把握非常重要。同時也要考慮在編譯過程中,除了顯示間隙還要算上系統(tǒng)數(shù)據(jù)處理與控制的時間間隙,否
36、則同樣會出現(xiàn)閃爍的情況。經(jīng)過幾天的測試與調(diào)試,最終LCD顯示完整,沒有出現(xiàn)顯示問題。5.2.2 定時器調(diào)試定時器調(diào)試主要看“秒”這位的跳動是否精確,這個需要長時間的驗證。同時,在定時器內(nèi)處理的數(shù)據(jù)也要精確,因為定時器內(nèi)處理數(shù)據(jù)也花費時間,而這段時間沒有算到定時器內(nèi)。經(jīng)過長時間的運行,調(diào)試,最后把誤差范圍調(diào)整到1天±0.001秒。5.2.3 中斷函數(shù)調(diào)試中斷函數(shù)是系統(tǒng)與用戶交互的最要途徑,用戶可以通過連接中斷的按鈕操作系統(tǒng),設(shè)置日期、時間、鬧鐘等信息。因為中斷響應速度與認為按鍵的速度有事會存在偏差,進過多次試驗后,使用了一個等待響應的函數(shù)。該函數(shù)有效地降低了按鍵無響應的概率,但依然無法
37、做到點觸即可的效果,這還需要改進。同時,如果有人機互動,就必然會造成人為錯誤,例如我先將月份調(diào)至為1月,然后日期調(diào)為31日,再回頭調(diào)月份為2月,這時就會出現(xiàn)2月31日這樣的錯誤信息情況。所以,在主函數(shù)中增設(shè)了日期排錯函數(shù)。6測試結(jié)果與分析本次實驗我們利用Proteus仿真和Keil軟件設(shè)計了多功能電子萬年歷,通過測試我們發(fā)現(xiàn),想要幾個模塊相互配合使用,應該將其緊密聯(lián)系起來,而不是一個個單獨的個體。只有這樣才能夠發(fā)揮更大的潛力,為設(shè)計萬年歷提供更有力的保障。6.1代碼的功能1.主函數(shù)功能:獲取時間,顯示萬年歷和時間設(shè)置,代碼如下。void main()SFR_Init();CAL_Init();
38、GUI_Init();TR1=1;while(1) GetTime(&sys);/獲得時間 LCD_ShowWNL();/顯示萬年歷 Time_Set(); /時間設(shè)置 2. 萬年歷顯示函數(shù),設(shè)置刷新模式,代碼如下。void LCD_ShowWNL()LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine); /秒,每秒鐘刷新if(!sys.cSec | State_Set) /分,普通模式每分鐘刷新LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine); /處于設(shè)置模式狀態(tài)每次刷新
39、if(!sys.cSec && !sys.cMin | State_Set) /時,普通模式每小時刷新LCD_ShowTime(sys.cHour,6,63,Hour_Flag,UpLine,UnderLine); /處于設(shè)置模式狀態(tài)每次刷新if(!sys.cSec && !sys.cMin && !sys.cHour | State_Set )/公歷農(nóng)歷的年、月、日、星期Show_YMD();/普通模式每天刷新if(State_Set=7) State_Set=0; /處于設(shè)置模式狀態(tài)每次刷新 3. 年、月、日、星期、農(nóng)歷、天干地支顯示函數(shù),代
40、碼如下。void Show_YMD()uchar uiTempDat; uiTempDat=RDS1302(0x88|0x01);sys.cMon=(uiTempDat&0x1f)>>4)*10+(uiTempDat&0x0f);LCD_ShowTime(sys.cMon,2,5,Mon_Flag,NoUpLine,NoUnderLine);hz_disp(4,5,1,uMod1,1,NoUpLine,NoUnderLine);/月Show16X32(2,27,ucNum3216sys.cDay/10,Day_Flag);/日Show16X32(2,43,ucNum
41、3216sys.cDay%10,Day_Flag); hz_disp(6,8,2,ucLunar13,1,UpLine,UnderLine); if(sys.cWeek=7)hz_disp(6,40,1,uMod2,1,UpLine,UnderLine);/星期 else hz_disp(6,40,1,ucLunarsys.cWeek,1,UpLine,UnderLine);/星期 LCD_ShowTime(20,0,9,1,UpLine,UnderLine); LCD_ShowTime(sys.cYear,0,25,Year_Flag,UpLine,UnderLine); hz_disp(0
42、,41,1,uMod0,1,UpLine,UnderLine);/年SpDat=GetSpringDay(sys.cYear,sys.cMon,sys.cDay);/獲得農(nóng)歷 if(SpDat.cMon=1)/顯示農(nóng)歷月 hz_disp(4,64,1,ucLunar15,1,UpLine,NoUnderLine);/"正"else if(SpDat.cMon=11) hz_disp(4,64,1,ucLunar16,1,UpLine,NoUnderLine);/"冬"else if(SpDat.cMon=12) hz_disp(4,64,1,ucLuna
43、r17,1,UpLine,NoUnderLine);/"臘"else hz_disp(4,63,1,ucLunarSpDat.cMon,1,UpLine,NoUnderLine);/"二""十" if(SpDat.cDay/10=1 && SpDat.cDay%10>0)/顯示"十",例如"十四"而不是"一四" hz_disp(4,95,1,ucLunar10,1,UpLine,NoUnderLine); else if(SpDat.cDay/10=2
44、&& SpDat.cDay%10>0) /顯示"廿",例如"廿三"而不是"二四" hz_disp(4,95,1,ucLunar19,1,UpLine,NoUnderLine); else hz_disp(4,95,1,ucLunarSpDat.cDay/10,1,UpLine,NoUnderLine); /正常數(shù)字if(!(SpDat.cDay%10) /"十" hz_disp(4,111,1,ucLunar10,1,UpLine,NoUnderLine);else/正常數(shù)字 hz_disp(
45、4,111,1,ucLunarSpDat.cDay%10,1,UpLine,NoUnderLine); hz_disp(0,104,1,SX(uint)(2000+SpDat.cYear)%12,1,UpLine,UnderLine); /生肖 hz_disp(2,95,1,TianGan(uint)(2000+SpDat.cYear)%10,1,NoUpLine,NoUnderLine);/天干hz_disp(2,111,1,DiZhi(uint)(2000+SpDat.cYear)%12,1,NoUpLine,NoUnderLine);/地支4.定時器1中斷服務函數(shù),讀取鍵值和清鍵值,保證
46、每次按鍵只執(zhí)行依次按鍵動作,代碼如下。void timer1() interrupt 3 TH1= (-10000)/256;TL1= (-10000)%256;keyinput();/讀取按鍵if (keyvalue&0x10)State_Flag=TRUE;keyvalue &= 0xef;/清鍵值,保證一按下只執(zhí)行一次按鍵動作if (keyvalue&0x20 )/加Inc_Flag=TRUE;keyvalue &= 0xdf;/清鍵值,保證一按下只執(zhí)行一次按鍵動作。if (keyvalue&0x40)/減Dec_Flag=TRUE;keyvalu
47、e &= 0xbf;/清鍵值,保證一直按下只執(zhí)行一次按鍵動作。5.計算當年是否是閏年。當前年為閏年滿足這兩個條件:滿足年份能被4整除;年份若是100的整數(shù)倍的話,需被400整除才能是閏年,否則為平年。也就是“四年一閏,百年不閏,四百年再閏”,代碼如下。bit YearFlag(uchar cYear) if( (!(cYear%4) && (cYear%100) | !(cYear%400) ) return 1;else return 0;6. 計算目標日期是星期幾。uchar GetWeekDay(uchar cYear,uchar cMon,uchar cDay)
48、char i;uint Sum=0,tmpyear;cYear=(cYear>>4)&0x0f)*10)+(cYear&0x0f);/temp1+temp2;tmpyear=2000+cYear;cMon=(cMon>>4)&0x0f)*10)+(cMon&0x0f);/temp1+temp2;cDay=(cDay>>4)&0x0f)*10)+(cDay&0x0f);/temp1+temp2;for(i=1;i<=cMon-1;i+)Sum+=Mon1YearFlag(cYear)i;Sum+=cDay-
49、1;return (tmpyear-1)+(tmpyear-1)/4-(tmpyear-1)/100+(tmpyear-1)/400+Sum)%7)+1;7. LCD圖形初始化函數(shù)。描繪框架布局,并獲取初始化時間,代碼如下。void GUI_Init() LCD12864_init(); ClearLCD(); Rect(0,0,127,63,1); /描繪框架 Line(62,0,62,62,1); Line(0,48,127,48,1); Line(0,15,127,15,1); Line(24,15,24,48,1); Line(63,32,128,32,1); SetTime(sys)
50、;/設(shè)置時間 GetTime(&sys);/獲得時間 Show_YMD(); LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine); en_disp(6,103,1,Asc,":",1,UpLine,UnderLine); LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine); en_disp(6,79,1,Asc,":",1,UpLine,UnderLine); LCD_ShowTime(sys.cHour,6,63,Hour_Flag
51、,UpLine,UnderLine); hz_disp(2,64,1,ucLunar11,1,NoUpLine,NoUnderLine);/"農(nóng)" hz_disp(2,80,1,ucLunar12,1,NoUpLine,NoUnderLine);/"歷" hz_disp(4,79,1,uMod1,1,UpLine,NoUnderLine);/"月"6.2測試結(jié)果分析在Proteus軟件和Keil uVision3軟件相結(jié)合調(diào)試的,完全用仿真軟件在PC機上對目標電路原理圖和程序進行檢測和調(diào)試。調(diào)試過程中單片機相應輸入端由通用鍵盤和鼠標設(shè)
52、定,運行狀態(tài)、各寄存器狀態(tài)、端口狀態(tài)等都可以在指定的窗口區(qū)域顯示出來,以確定程序運行有無錯誤。 整體程序調(diào)試:即把各子程序整體連起來進入到綜合電路調(diào)試,看是否能實現(xiàn)預計的功能顯示。在這階段若發(fā)生故障,可以考慮各子程序在運行時是否破壞現(xiàn)場,數(shù)據(jù)緩沖單元是否發(fā)生沖突,標志位的建立和清除在設(shè)計上是否失誤,堆棧是否溢出,輸入輸出狀態(tài)是否正常等。其中測試結(jié)果主要看“秒”這位的跳動是否精確,這個是需要長時間的驗證。同時,在定時器內(nèi)處理的數(shù)據(jù)要精確,因為定時器內(nèi)處理數(shù)據(jù)也花費時間,而這段時間沒有算到定時器內(nèi)。經(jīng)過長時間的調(diào)試、運行,最后把誤差范圍盡可能的縮減。在調(diào)試過程中,出現(xiàn)過以下三種問題:(1)顯示的數(shù)據(jù)秒并沒有變化,是因為沒有啟動定時器,而我又不斷地去讀取DS1302時鐘芯片寄存器中的數(shù)據(jù)導致。啟動定時器后,就不會出現(xiàn)這種問題。(2)調(diào)整時間后應該先去掉寫保護,如果存在寫保護,那么在初始化寫入初始時間時,是寫不進去初始化的時間的。因而會看見顯示的時間并不隨著設(shè)置的初始化的值變化而變化,甚至我們看見的時間并不按著一秒一秒的增加。 (3)液晶顯示不穩(wěn)定,甚至出現(xiàn)亂碼現(xiàn)象。這是因為液晶顯示的時候,由于采用的并行總線,顯然傳輸速度快,但是數(shù)據(jù)端口必須接1K的排阻,以實現(xiàn)驅(qū)動。因此,排阻的作用很大。寫程序時要嚴格按照時序就行,否則,也不會
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 照片濾鏡調(diào)色課程設(shè)計
- 二手車交易平臺營業(yè)員銷售總結(jié)
- 春游課程設(shè)計
- 家具設(shè)計師工作總結(jié)
- 風險防控方案計劃
- 法律服務行業(yè)風險防范方案
- 化工行業(yè)衛(wèi)生防護要點
- 物流運輸行業(yè)咨詢服務經(jīng)驗總結(jié)
- 藥店衛(wèi)生管理措施
- 金融領(lǐng)域的投資顧問職責
- 2024-2030年中國汽車水泵市場未來發(fā)展趨勢及前景調(diào)研分析報告
- 綠城營銷策劃管理標準化手冊
- 2025小學創(chuàng)意特色寒假素養(yǎng)作業(yè)設(shè)計真絕了【高清可打印】
- 2025年上半年河南安陽市睢陽區(qū)“減縣補鄉(xiāng)”鄉(xiāng)鎮(zhèn)事業(yè)單位選拔130人重點基礎(chǔ)提升(共500題)附帶答案詳解
- 2025學年學期學校衛(wèi)生工作計劃
- 10.1.2事件的關(guān)系和運算(教學課件)高一數(shù)學(人教A版2019必修第二冊)
- 2024-2030年中國天然靛藍行業(yè)市場規(guī)模預測及發(fā)展可行性分析報告
- DB37T 4548-2022 二氧化碳驅(qū)油封存項目碳減排量核算技術(shù)規(guī)范
- 《公路養(yǎng)護安全培訓》課件
- 2024國家開放大學基礎(chǔ)寫作形考任務2試題及答案
- 2023-2024學年江蘇省蘇州市高一(上)期末地理試卷
評論
0/150
提交評論