基于MC9S08QG8的萬(wàn)年歷_第1頁(yè)
基于MC9S08QG8的萬(wàn)年歷_第2頁(yè)
基于MC9S08QG8的萬(wàn)年歷_第3頁(yè)
基于MC9S08QG8的萬(wàn)年歷_第4頁(yè)
基于MC9S08QG8的萬(wàn)年歷_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、江 蘇 師 范 大 學(xué) 科 文 學(xué) 院本 科 生 課 程 設(shè) 計(jì) 課 程 名 稱(chēng): 單片機(jī)課程實(shí)訓(xùn) 題 目: 基于MC9S08QG8的萬(wàn)年歷 專(zhuān) 業(yè) 班 級(jí): 11電信1 學(xué) 生 姓 名: 朱 楓 學(xué) 生 學(xué) 號(hào): 118326152 日 期: 2014/6/15 指 導(dǎo) 教 師: 陳 斯 科文學(xué)院教務(wù)部印制一、課程設(shè)計(jì)目的、任務(wù)和內(nèi)容要求:目的:如今電子萬(wàn)年歷樣式多樣、功能新穎,掛式、臺(tái)式以及帶裝飾畫(huà)面等豐富的電子萬(wàn)年歷數(shù)不勝數(shù),不但滿(mǎn)足了精準(zhǔn)的計(jì)時(shí)需求,還將計(jì)時(shí)帶上了科技時(shí)尚的味道。單片機(jī)技術(shù)所應(yīng)用的功能控制芯片可進(jìn)行多種功能的設(shè)置,如鬧鐘、報(bào)時(shí)、日歷查詢(xún)、語(yǔ)音等;并改善了很多原有石英鐘不

2、能解決的問(wèn)題,例如:數(shù)字夜光顯示、數(shù)據(jù)存儲(chǔ)以及全自動(dòng)溫度檢測(cè)等功能;這給傳統(tǒng)計(jì)時(shí)消費(fèi)帶來(lái)了新的動(dòng)力,越來(lái)越多的消費(fèi)者選擇了電子萬(wàn)年。具體設(shè)計(jì)任務(wù)如下:1.熟悉萬(wàn)年歷設(shè)計(jì)的工作原理;2.制定出電子萬(wàn)年歷系統(tǒng)各模塊的設(shè)計(jì)方案;3.焊接硬件電路、編寫(xiě)程序;4.寫(xiě)課程設(shè)計(jì)報(bào)告。設(shè)計(jì)要求:設(shè)計(jì)一個(gè)基于電子萬(wàn)年歷系統(tǒng)的設(shè)計(jì),要求:1.實(shí)現(xiàn)顯示年、月、日、時(shí)、分、秒及星期的功能。2.實(shí)現(xiàn)具有可調(diào)整日期和時(shí)間功能。 二、進(jìn)度安排:第3天: 熟悉課題,收集關(guān)于萬(wàn)年歷設(shè)計(jì)的相關(guān)資料;第46天: 確定設(shè)計(jì)方案,選擇飛思卡爾公司8位單片機(jī)MC9SO8QG8作為主控芯片;第712天: 軟件、硬件設(shè)計(jì)及調(diào)試,反復(fù)優(yōu)化直到

3、達(dá)到設(shè)計(jì)目標(biāo);第1314天:書(shū)寫(xiě)課程設(shè)計(jì)報(bào)告,總結(jié)課題設(shè)計(jì)經(jīng)驗(yàn),了解試用者反饋。三、主要參考文獻(xiàn):1 王宜懷、張書(shū)奎、王林、吳瑾著.嵌入式技術(shù)基礎(chǔ)與實(shí)踐.北京:清華大學(xué)出版社.20102 Freescale.MC9S08QG8 Data Sheet,Rev.2,20063 Morola(Freescale).HCS08 Family Reference Manual,Rev.1,20034 李剛、陳世利、周鑫玲著.飛思卡爾8位單片機(jī)實(shí)用教程.北京:電子工業(yè)出版社.2009 指導(dǎo)教師簽字: 年 月 日 江蘇師范大學(xué)物理與電子工程學(xué)院課程設(shè)計(jì)報(bào)告目 錄摘 要IIAbstractII1 緒論11.1

4、 課題研究的背景11.2 課題研究的目的和意義11.3 整體概述12 設(shè)計(jì)方案簡(jiǎn)述22.1 功能介紹22.2 設(shè)計(jì)方案選擇22.2.1 控制部分及語(yǔ)言的選擇22.2.2 顯示模塊選擇22.2.3 鍵盤(pán)選擇22.3 總體設(shè)計(jì)思路33 硬件設(shè)計(jì)43.1 主控芯片最小系統(tǒng)的設(shè)計(jì)43.1.1 MC9S08QG8特點(diǎn)43.1.2 芯片引腳分配53.1.3 MCU最小系統(tǒng)53.2 電源設(shè)計(jì)63.3 獨(dú)立鍵盤(pán)模塊63.4 液晶顯示模塊74 軟件設(shè)計(jì)94.1 系統(tǒng)軟件流程圖94.2 定時(shí)器程序設(shè)計(jì)104.3 中斷程序設(shè)計(jì)114.3.1 IRQ中斷程序設(shè)計(jì)114.3.2 KBI中斷程序設(shè)計(jì)124.4 LCD顯示

5、程序設(shè)計(jì)144.5 星期計(jì)算公式以及閏月識(shí)別164.5.1 星期計(jì)算公式164.5.2 閏月識(shí)別165 總結(jié)18參考文獻(xiàn)19摘 要電子萬(wàn)年歷是一種非常廣泛日常計(jì)時(shí)工具,對(duì)現(xiàn)代社會(huì)越來(lái)越流行。它可以對(duì)年、月、日、周、時(shí)、分、秒進(jìn)行計(jì)時(shí)。本設(shè)計(jì)是基于飛思卡爾MC9S08QG8單片機(jī)進(jìn)行的電子萬(wàn)年歷設(shè)計(jì),可以顯示年月日時(shí)分秒以及星期,具有可調(diào)整日期和時(shí)間功能。該電路采用MC9S08QG8單片機(jī)作為核心,功耗小。 萬(wàn)年歷的設(shè)計(jì)過(guò)程包括硬件與軟件方面。硬件部分主要由QG8單片機(jī)最小系統(tǒng)模塊,LCD1602顯示模塊,獨(dú)立按鍵模塊組成。軟件方面主要包括日歷程序、時(shí)間調(diào)整程序,顯示程序等。關(guān)鍵詞:MC9S08

6、QG8;LCD1602;計(jì)時(shí);調(diào)整AbstractElectronic calendar day time is a very wide range of tools, increasingly popular in modern society. It can be years, months, days, week, when, minutes, seconds for time. This design is the design of electronic calendar Freescale MCU MC9S08QG8 based, can display the date when

7、 the minutes and seconds and weeks, with adjustable date and time functions. The circuit uses MCU MC9S08QG8 as the core, low power consumption.Calendar of the design process including the hardware and software aspects.The hardware part consists of MCU QG8 minimum system module, LCD1602 display modul

8、e, keyboard module. The software includes calendar program, time to adjust the program, display program.Keywords:MC9S08QG8 MCU;LCD1602;Time;Adjustment-I-1 緒論1.1 課題研究的背景電子萬(wàn)年歷是采用獨(dú)立芯片控制內(nèi)部數(shù)據(jù)運(yùn)行,以LED或LCD數(shù)碼顯示日期、時(shí)間、星期,糅合了多項(xiàng)先進(jìn)電子技術(shù)及現(xiàn)代經(jīng)典工藝打造的現(xiàn)代數(shù)碼計(jì)時(shí)產(chǎn)品。隨著人們生活水平的提高和生活節(jié)奏的加快,對(duì)時(shí)間的要求越來(lái)越高,精準(zhǔn)數(shù)字計(jì)時(shí)的消費(fèi)需求也是越來(lái)越多。從觀太陽(yáng)、擺

9、鐘到現(xiàn)在電子鐘,人類(lèi)不斷研究,不斷創(chuàng)新紀(jì)錄。對(duì)于電子萬(wàn)年歷,它可以對(duì)年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能,采用直觀的數(shù)字顯示,可以同時(shí)顯示年、月、日、時(shí)、分、秒等信息,還具有時(shí)間校準(zhǔn)等功能。此萬(wàn)年歷具有讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢(shì),具有廣闊的市場(chǎng)前景。1.2 課題研究的目的和意義二十一世紀(jì)是數(shù)字化技術(shù)高速發(fā)展的時(shí)代,而單片機(jī)在數(shù)字化高速發(fā)展的時(shí)代扮演著極為重要的角色。電子萬(wàn)年歷的開(kāi)發(fā)與研究在信息化時(shí)代的今天亦是當(dāng)務(wù)之急,因?yàn)樗鼞?yīng)用在學(xué)校、機(jī)關(guān)、企業(yè)、部隊(duì)等單位禮堂、訓(xùn)練場(chǎng)地、教學(xué)室、公共場(chǎng)地等場(chǎng)合,可以說(shuō)遍及人們生活

10、的每一個(gè)角落。所以說(shuō)電子萬(wàn)年歷的開(kāi)發(fā)是國(guó)家之所需,社會(huì)之所需,人民之所需。由于社會(huì)對(duì)信息交換不斷提高的要求及高新技術(shù)的逐步發(fā)展,促使電子萬(wàn)年歷發(fā)展并且投入市場(chǎng)得到廣泛應(yīng)用。1.3 整體概述萬(wàn)年歷由MC9S08QG8單片機(jī)最小系統(tǒng)電路,獨(dú)立按鍵電路以及LCD1602顯示電路組成。MC9S08QG8單片機(jī)作為主控制,根據(jù)使用FLL(鎖頻環(huán))的內(nèi)部模式產(chǎn)生時(shí)鐘,進(jìn)行計(jì)數(shù),通過(guò)程序處理轉(zhuǎn)換為年、月、日、時(shí)、分、秒以及星期并通過(guò)LCD1602顯示電路顯示時(shí)間,并且可以根據(jù)按鍵進(jìn)行修改年、月、日、時(shí)、分、秒。經(jīng)過(guò)布線,焊接,調(diào)試等工作后萬(wàn)年歷成型。2 設(shè)計(jì)方案簡(jiǎn)述2.1 功能介紹1、具有顯示年、月、日、時(shí)

11、、分、秒以及星期的功能2、具備年、月、日、時(shí)、分校準(zhǔn)功能3、具有閏月識(shí)別的功能2.2 設(shè)計(jì)方案選擇2.2.1 控制部分及語(yǔ)言的選擇方案一 選用可編程邏輯器件設(shè)計(jì)以及Verilog HDL語(yǔ)言。設(shè)計(jì)起來(lái)結(jié)構(gòu)清晰,各個(gè)模塊從硬件上設(shè)計(jì)起來(lái)相對(duì)簡(jiǎn)單,控制與顯示模塊間的連接也會(huì)比較方便。但是考慮到本設(shè)計(jì)的特點(diǎn),EDA在功能擴(kuò)展上比較受局限,而且EDA占用的資源也相對(duì)多一些,且用可編程邏輯器件的成本較高。并且對(duì)Verilog HDL語(yǔ)言并不是很深的了解。方案二 選用8位的單片機(jī)以及C語(yǔ)言。單片機(jī)擁有豐富的中斷源,方便本課程的設(shè)計(jì);擁有內(nèi)部參考時(shí)鐘,準(zhǔn)確度相當(dāng)高;C語(yǔ)言與匯編兼容的編程環(huán)境也很方便來(lái)實(shí)現(xiàn)一

12、些調(diào)用;I/O口功能也較為強(qiáng)大;方便對(duì)本設(shè)計(jì)進(jìn)行擴(kuò)展,成本也相對(duì)低很多。綜合上述方案的選擇與比較,并根據(jù)對(duì)電器元件的熟悉程度以及市場(chǎng)的供應(yīng)關(guān)系,選擇方案二并選用MC9S08QG8單片機(jī)。2.2.2 顯示模塊選擇方案一:LED數(shù)碼管動(dòng)態(tài)掃描。采用七段碼顯示,經(jīng)濟(jì)實(shí)惠,但操作繁瑣。方案二:點(diǎn)陣式數(shù)碼管顯示。點(diǎn)陣式數(shù)碼管顯示對(duì)于顯示漢字比較合適,顯示數(shù)字有些浪費(fèi),并且成本較高。方案三:LCD1602液晶。該液晶顯示屏的顯示功能強(qiáng)大,內(nèi)置192種字符,可顯示大量符號(hào)、數(shù)字,清晰可見(jiàn),而且功率消耗小壽命長(zhǎng)抗干擾能力強(qiáng),且操作較方便。綜合上述方案的選擇與比較,故選擇方案三。2.2.3 鍵盤(pán)選擇方案一:矩陣

13、式鍵盤(pán) 行列式鍵盤(pán)的原理就是每一行線與每一列線的交叉地方不相通,而是接上一個(gè)按鍵,通過(guò)按鍵來(lái)接通。 特點(diǎn): 以省出不少的I/O 口資源,程序編寫(xiě)相對(duì)復(fù)雜點(diǎn),適用于鍵數(shù)比較多的情況。 方案二: 獨(dú)立式鍵盤(pán) 獨(dú)立式鍵盤(pán)是指各個(gè)按鍵相互獨(dú)立地連接到各自的單片機(jī)的I/O 口,I/O口只需要做輸入口就能讀到所有的按鍵。 特點(diǎn): 電路簡(jiǎn)單,程序容易寫(xiě),適用于按鍵數(shù)較少的情況。 綜合上述方案的選擇與比較,故選擇方案二。2.3 總體設(shè)計(jì)思路 此設(shè)計(jì)在液晶上顯示年、月、日、時(shí)、分、秒以及星期,電路一般包括以下幾個(gè)部分:?jiǎn)纹瑱C(jī)最小系統(tǒng)模塊、獨(dú)立按鍵模塊及顯示模塊。主控芯片采用飛思卡爾的MC9S08QG8單片機(jī)。圖

14、2-1 總體框圖對(duì)于各部分:(1)MC9S08QG8單片機(jī)最小系統(tǒng),單片機(jī)通過(guò)輸出各種電脈沖信號(hào)來(lái)驅(qū)動(dòng)控制各部分正常工作。(2)采用3.3V穩(wěn)壓電源供電。(3)鍵盤(pán)調(diào)節(jié)時(shí)間模塊,為使時(shí)鐘走時(shí)與標(biāo)準(zhǔn)時(shí)間一致,校時(shí)電路是必不可少的,鍵盤(pán)用來(lái)校正液晶上顯示的時(shí)間。(4)LCD1602顯示模塊,將單片機(jī)發(fā)送數(shù)據(jù)實(shí)時(shí)顯示在液晶屏上。3 硬件設(shè)計(jì)3.1 主控芯片最小系統(tǒng)的設(shè)計(jì)本設(shè)計(jì)的主控芯片采用飛思卡爾的MC9S08QG8單片機(jī),其是低成本、高性能8位微處理器S08家族中的成員。Freescale的S08系列8位MCU由于其穩(wěn)定性高、開(kāi)發(fā)周期短、成本低、型號(hào)多樣、兼容性好而被廣泛應(yīng)用。3.1.1 MC9S

15、08QG8特點(diǎn)20MHz HCS08 CPU (中央處理器)增加了BGND指令的HC08指令集 背景調(diào)試系統(tǒng) 斷點(diǎn)能力,允許在線調(diào)試時(shí)設(shè)置單個(gè)斷點(diǎn)(片上調(diào)試狀態(tài)時(shí)可多設(shè)置2個(gè)斷點(diǎn)) 調(diào)試模塊包括2個(gè)比較器、9種觸發(fā)模式.8個(gè)存儲(chǔ)change-of-flow地址和event-only數(shù)據(jù)的深度FIFO.調(diào)試模塊支持標(biāo)簽和強(qiáng)制斷點(diǎn) 支持多達(dá)32個(gè)中斷/復(fù)位源FLASH可在全工作電壓和溫度下讀/編程/擦除MC9S08QG8 8KB FLASH,512B RAM ICS 內(nèi)部時(shí)鐘源模塊包括由內(nèi)部或外部參考 控制的鎖頻環(huán)(FLL); 內(nèi)部參考的精確調(diào)整允許整個(gè)溫度和電壓環(huán)境下有0.2%的分辨率和2%的偏

16、差; 支持從1 MHz到10 MHz的總線頻率XOSC 低電壓振蕩器模塊可軟件選擇晶體 或者陶瓷諧振器的頻率范圍,從31.25 kHz到 38.4 kHz或者從1 MHz到16 MHz,并且支持高達(dá)20Mhz的外部時(shí)鐘源看門(mén)狗的計(jì)算機(jī)正確運(yùn)行(COP)復(fù)位可選擇從專(zhuān)用的1 kHz內(nèi)部時(shí)鐘源或總線時(shí)鐘運(yùn)行具有復(fù)位或中斷的低電壓檢測(cè)、復(fù)位的非法操作碼檢測(cè)、復(fù)位的非法地址檢測(cè) FLASH塊保護(hù)ADC 8通道、10位模數(shù)轉(zhuǎn)換模塊,還具有自動(dòng)比較功能,異步時(shí)鐘源,溫度傳感器和內(nèi)部能帶隙參考源通道;ADC使用實(shí)時(shí)中斷計(jì)數(shù)器來(lái)硬件觸發(fā)ACMP 具有與內(nèi)部參考源比較選項(xiàng)的模擬比較器模塊;輸出可選擇連接到TPM

17、模塊SCI 具有13位中止能力選項(xiàng)的串行通訊接口模塊SPI 串行外圍接口模塊IIC 內(nèi)部集成電路總線模塊 TPM 2通道定時(shí)器/脈寬調(diào)制器;每通道能用于輸入捕獲,輸出比較,緩沖邊沿對(duì)齊PWM或者緩沖中心對(duì)齊PWMMTIM 帶預(yù)置值的8位計(jì)數(shù)器模塊KBI 8管腳的鍵盤(pán)中斷模塊,帶有軟件可選擇的邊沿極性和邊沿/電平模式12個(gè)通用輸入/輸出管腳,1個(gè)僅為輸入和1個(gè)僅為輸出管腳;每個(gè)管腳輸出10mA,每片最大輸出60mA當(dāng)用作輸入時(shí)可軟件選擇端口上拉當(dāng)用作輸出時(shí)可軟件選擇端口轉(zhuǎn)換率和驅(qū)動(dòng)強(qiáng)度RESET和IRQ管腳有內(nèi)部上拉以減少用戶(hù)系統(tǒng)費(fèi)用單線的背景調(diào)試接口片上、在線仿真器(ICE),具有實(shí)時(shí)總線捕獲

18、功能3.1.2 芯片引腳分配圖3-1 MC9S08QG8 16腳PDIP封裝圖3.1.3 MCU最小系統(tǒng)圖3-2 MC9S08QG8最小系統(tǒng)圖在設(shè)計(jì)電路時(shí),單片機(jī)是本課題核心電路,所有數(shù)據(jù)以及控制都從這里出發(fā),因此可以說(shuō)它是最重要的模塊,在焊接時(shí),應(yīng)該先焊接最小系統(tǒng),在最小系統(tǒng)可以使用之后才可以繼續(xù)焊接下面的電路,而測(cè)試系統(tǒng)是否正常的方法就是使用BDM下載器(Feescale8位機(jī)專(zhuān)用下載器)下載程序進(jìn)行測(cè)試。MCU的最小系統(tǒng)是指可以使內(nèi)部程序運(yùn)行所必需的外圍電路。一般情況下,MCU的硬件最小系統(tǒng)由電源電路、BDM電路、晶振及復(fù)位等電路組成,如圖3-2。3.2 電源設(shè)計(jì)用變壓器進(jìn)行交流降壓,然

19、后經(jīng)過(guò)橋式整流器VD1整成脈動(dòng)直流,并用電容C1平滑濾波后送到7805三端穩(wěn)壓器穩(wěn)成5V輸出,得到5V直流輸出。如圖3-3。圖3-3 220V轉(zhuǎn)5V穩(wěn)壓電源電路圖再采用LM1117芯片將5V轉(zhuǎn)3.3V自制穩(wěn)壓電源,如圖3-4。圖3-4 LM1117 5V轉(zhuǎn)3.3V穩(wěn)壓電源電路圖3.3 獨(dú)立鍵盤(pán)模塊鍵盤(pán)的種類(lèi)分多種。按鍵盤(pán)的分布方式可分為獨(dú)立式和矩陣式;按讀入鍵值的方式可分為直讀方式和掃描方式;按是否進(jìn)行硬件編碼可分為硬件編碼方式和非編碼方式;按微處理器響應(yīng)方式可分為中斷方式和查詢(xún)方式。本設(shè)計(jì)采用獨(dú)立鍵盤(pán),每個(gè)按鍵連接一個(gè)輸入口,如圖為PTA2、PTA3口,每根輸入線上的按鍵不會(huì)影響其他輸入線的

20、工作狀態(tài),起到調(diào)整日期,時(shí)間的功能。此次萬(wàn)年歷使用的MC9S08QG8的鍵盤(pán)中斷功能,當(dāng)按鍵按下時(shí),該口會(huì)產(chǎn)生低電平,觸發(fā)鍵盤(pán)中斷。如圖3-4。圖3-4 獨(dú)立鍵盤(pán)模塊3.4 液晶顯示模塊圖3-5 LCD1602電路圖如圖3-5所示,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)線,高電平(

21、1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫(xiě)操作。第6腳:E(或EN)端為使能(enable)端,高電平(1)時(shí)讀取信息,負(fù)跳變時(shí)執(zhí)行指令。 第714腳:D0D7為8位雙向數(shù)據(jù)端。第1516腳:空腳或背燈電源。15腳背光正極,16腳背光負(fù)極。表3-1 基本操作時(shí)序表讀狀態(tài)輸入RS=L,R/W=H,E=H輸出D0D7=狀態(tài)字寫(xiě)指令輸入RS=L,R/W=L,D0D7=指令碼,E=下降沿輸出無(wú)讀數(shù)據(jù)輸入RS=H,R/W=H,E=H輸出D0D7=數(shù)據(jù)寫(xiě)數(shù)據(jù)輸入RS=H,R/W=L,D0D7=數(shù)據(jù),E=下降沿輸出無(wú)4 軟件設(shè)計(jì)在硬件電路確定之后,則系統(tǒng)所有的智能功能要由軟件來(lái)完成。軟件是整個(gè)控制系統(tǒng)設(shè)計(jì)的核心

22、,它具有充分的靈活性,可以根據(jù)系統(tǒng)的要求而變化,對(duì)于同樣的硬件系統(tǒng),配以不同的軟件系統(tǒng),所實(shí)現(xiàn)的功能也就不一樣,而且有此硬件電路的功能都可以用軟件來(lái)實(shí)現(xiàn)。所以對(duì)于一個(gè)系統(tǒng)設(shè)計(jì)來(lái)說(shuō),軟件系統(tǒng)常常比硬件系統(tǒng)需要更多的工作量。整個(gè)系統(tǒng)的硬件組成相對(duì)簡(jiǎn)單,較小的硬件開(kāi)銷(xiāo)需要相對(duì)復(fù)雜的軟件進(jìn)行補(bǔ)償,下面較為詳細(xì)地分析軟件的設(shè)計(jì)。 4.1 系統(tǒng)軟件流程圖如圖4-1所示。圖4-1 軟件流程圖4.2 定時(shí)器程序設(shè)計(jì)采用內(nèi)部時(shí)鐘,使用內(nèi)部16位定時(shí)器。16位TPM的核心部件仍然是一個(gè)16位的計(jì)數(shù)器,軟件可以隨時(shí)讀取該計(jì)數(shù)器的數(shù)值,而不影響計(jì)數(shù)器的工作。但對(duì)計(jì)數(shù)器進(jìn)行寫(xiě)入操作時(shí)會(huì)導(dǎo)致計(jì)數(shù)器復(fù)位。該計(jì)數(shù)器的3種工作

23、模式是1、自由計(jì)數(shù)器:此時(shí)模寄存器TPMMODH:TPMMODL為0x0000或者是0xffff,計(jì)數(shù)器總是進(jìn)行加1動(dòng)作,當(dāng)達(dá)到0xffff時(shí)回0x0000,產(chǎn)生溢出動(dòng)作,設(shè)置標(biāo)志。2、加法計(jì)數(shù)器:如果模寄存器既不是0x0000,也不是0xffff,則此時(shí)計(jì)數(shù)器加1直到與模寄存器相等時(shí),產(chǎn)生溢出動(dòng)作,設(shè)置標(biāo)志,計(jì)數(shù)器回0x0000。加法計(jì)數(shù)器可以為處于輸入捕捉、輸出比較以及沿對(duì)齊PWM工作模式下的2個(gè)獨(dú)立通道,提供時(shí)鐘參考。3、加減計(jì)數(shù)器:當(dāng)TPM設(shè)置為中間對(duì)齊的PWM工作模式時(shí),計(jì)數(shù)器會(huì)有加1、減1的動(dòng)作。每當(dāng)計(jì)數(shù)器加1到與莫寄存器數(shù)值相等時(shí)就開(kāi)始減1,減到0x0000時(shí)又繼續(xù)加1,如此循環(huán)

24、。每當(dāng)?shù)竭_(dá)模寄存器數(shù)值并開(kāi)始減1時(shí),產(chǎn)生溢出動(dòng)作,設(shè)置標(biāo)志。本次設(shè)計(jì)使用的是加法計(jì)數(shù)器,根據(jù)總線頻率為4.34MHZ左右,對(duì)它128分頻后,當(dāng)模計(jì)數(shù)器的值為0x8472的時(shí)候,時(shí)間為1S,觸發(fā)定時(shí)器中斷。定時(shí)器部分代碼如下:/*TPM初始化*/void TPM_Init(void)TPMSC=0x4f;TPMMOD=0x8472; /*定時(shí)器中斷*/interrupt VectorNumber_Vtpmovf void TPM_ISR(void)if(TPMSC&0x80)=0x80)TPMSC_TOF=0; LCD_conv(year,mon,day,hour,min,sec);LC

25、D_disp(); if(sec>=59)sec=0;if(min>=59)min=0;if(hour>=23)hour=0;if(day>=yuetian(mon)+runping(year)day=1;if(mon>=12)mon=1;if(year>=9999)year=0;elseyear+; else mon+; else day+; else hour+; else min+;else sec+; 4.3 中斷程序設(shè)計(jì)4.3.1 IRQ中斷程序設(shè)計(jì)外部中斷由IRQ狀態(tài)和控制寄存器IRQSC管理.當(dāng)使能IRQ功能,同步邏輯監(jiān)測(cè)管腳的只邊沿或者邊沿和

26、電平事件.當(dāng)MCU處于停止?fàn)顟B(tài)和系統(tǒng)時(shí)鐘關(guān)閉時(shí),使用一個(gè)獨(dú)立的異步通路以便IRQ (如果使能)能喚醒MCU。為了IRQ管腳作為中斷請(qǐng)求(IRQ)輸入,IRQSC中的IRQ管腳使能(IRQPE)控制位必須為1.作為一個(gè)IRQ輸入,用戶(hù)可選擇管腳為只邊沿監(jiān)測(cè)或者邊沿電平檢測(cè)(IRQMOD),一個(gè)事件是否導(dǎo)致一個(gè)中斷或者設(shè)置IRQF位,這能被軟件輪詢(xún). 當(dāng)使能IRQ管腳,默認(rèn)使用內(nèi)部上拉功能(IRQPDD = 0)。如果用戶(hù)希望使用外部上拉,寫(xiě)IRQPDD為1能關(guān)掉內(nèi)部功能。 BIH和BIL指令能夠在IRQ管腳被配置成IRQ輸入時(shí)用來(lái)檢測(cè)管腳上的電平。IRQMOD控制位重配置監(jiān)測(cè)邏輯以便監(jiān)測(cè)邊沿時(shí)間

27、和管腳電平.在這種邊沿監(jiān)測(cè)模式中,當(dāng)一個(gè)邊沿被監(jiān)測(cè)到時(shí)(當(dāng)IRQ管腳從未聲明電平變?yōu)槁暶麟娖? IRQF狀態(tài)標(biāo)志被置1, 但是標(biāo)志當(dāng)IRQ保持聲明電平時(shí)一直被置1(不能被清除)。 本次設(shè)計(jì)運(yùn)用IRQ中斷,當(dāng)按下開(kāi)關(guān),即觸發(fā)IRQ中斷,用于變更調(diào)整模式。決定是調(diào)分還是調(diào)時(shí)還是調(diào)日還是調(diào)月還是調(diào)年。IRQ中斷部分程序如下:/*IRQ初始化*/void IRQ_Init(void)IRQSC_IRQMOD=0; IRQSC_IRQIE=1; IRQSC_IRQPE=1; /*IRQ中斷程序*/interrupt VectorNumber_Virq void IRQ_ISR(void)Delay_ms

28、(50); if(IRQSC & 0x08)=0x08) IRQSC_IRQACK=1; if(flag>=4) flag=0; else flag+; 4.3.2 KBI中斷程序設(shè)計(jì)KBI特點(diǎn)包括:(1)多達(dá)8個(gè)鍵盤(pán)中斷管腳,獨(dú)立管腳使能位(2)每個(gè)鍵盤(pán)中斷管腳編程為只下降沿(或上升沿),或下降沿和低電平(或上升沿和高電平)的中斷敏感性(3)一個(gè)軟件使能鍵盤(pán)中斷(4)從低功耗狀態(tài)退出KBI包括三個(gè)寄存器:8位管腳狀態(tài)和控制寄存器(KBISC)、8位管腳使能寄存器(KBIPE)、8位沿選擇寄存器(KBIES)本設(shè)計(jì)中運(yùn)用KBI中斷。當(dāng)按下按鍵時(shí),觸發(fā)中斷,加1或者減1。KBI中斷

29、部分程序如下: /*KBI初始化*/void KBI_Init(void)KBISC=0x02;KBIPE=0x0c;KBIES=0xf3;PTAPE_PTAPE2=1;PTADD_PTADD2=0;PTAPE_PTAPE3=1;PTADD_PTADD3=0; /*鍵盤(pán)中斷程序*/interrupt VectorNumber_Vkeyboard void KBI(void)while(PTAD_PTAD2=0)Delay_ms(50);while(PTAD_PTAD2=0)switch(flag)case 0: if(min<=0)min=59;else min-;break;case

30、1: if(hour<=0)hour=23;else hour-;break;case 2: if(day<=1)day=yuetian(mon)+runping(year);else day-;break;case 3: if(mon<=1)mon=12;else mon-;break;case 4: if(year<=1583)year=9999;else year-;break;default:if(min<=0)min=59;else min-;break;while(PTAD_PTAD2=0);while(PTAD_PTAD3=0)Delay_ms(50

31、);while(PTAD_PTAD3=0)switch(flag) case 0: if(min>=59)min=0;else min+;break; case 1: if(hour>=23)hour=0;else hour+;break; case 2: if(day>=yuetian(mon)+runping(year)day=1;else day+;break; case 3: if(mon>=12)mon=1;else mon+;break; case 4: if(year>=9999)year=1583;else year+;break; default

32、:if(min>=59)min=0;else min+;break;while(PTAD_PTAD3=0);KBISC_KBACK=1; 4.4 LCD顯示程序設(shè)計(jì)液晶工作流程圖如圖4-2。液晶顯示部分代碼:/*寫(xiě)LCD命令函數(shù)*/void LCD_en_command(unsigned char command)Delay_ms(5);LCD1602_RW=0;LCD1602_RS=0;LCD1602_EN=1;LCDIO=command;Delay_ms(10);LCD1602_EN=0;/*寫(xiě)LCD數(shù)據(jù)函數(shù)*/void LCD_en_dat(unsigned char dat)De

33、lay_ms(5);LCD1602_RW=0;LCD1602_RS=1;LCD1602_EN=1;LCDIO=dat;Delay_ms(10);LCD1602_EN=0;/*LCD顯示位置選擇函數(shù)*/void LCD_set_xy(unsigned char x,unsigned char y)unsigned char address;if(x=0)address=0x80+y;elseaddress=0xc0+y;LCD_en_command(address);/*LCD清屏函數(shù)*/void LCD_clr()LCD_en_command(0x01);Delay_ms(5);/*LCD顯示

34、函數(shù)*/void LCD_disp(void) LCD_set_xy(0,0); LCD_en_dat(table30);LCD_en_dat(table31);LCD_en_dat(table32);LCD_en_dat(table33);LCD_en_dat(0x3a);LCD_en_dat(disp_buf0);LCD_en_dat(disp_buf1);LCD_en_dat(disp_buf2);LCD_en_dat(disp_buf3);LCD_en_dat(0x2d);LCD_en_dat(disp_buf4);LCD_en_dat(disp_buf5);LCD_en_dat(0x

35、2d);LCD_en_dat(disp_buf6);LCD_en_dat(disp_buf7);LCD_set_xy(1,1); LCD_en_dat(table2xingqi(year,mon,day)*3); LCD_en_dat(table2xingqi(year,mon,day)*3+1); LCD_en_dat(table2xingqi(year,mon,day)*3+2); LCD_set_xy(1,5);LCD_en_dat(disp_buf8);LCD_en_dat(disp_buf9);LCD_en_dat(0x3a);LCD_en_dat(disp_buf10);LCD_e

36、n_dat(disp_buf11);LCD_en_dat(0x3a);LCD_en_dat(disp_buf12);LCD_en_dat(disp_buf13);LCD_set_xy(1,14);LCD_en_dat(table12*flag);LCD_en_dat(table12*flag+1);/*lcd1602初始化*/void LCD_Init(void)Delay_ms(15);LCD_en_command(0x38);/8位數(shù)據(jù)傳送模式Delay_ms(15);LCD_en_command(0x0c);LCD_en_command(0x06);LCD_en_command(0x01

37、);Delay_ms(5);4.5 星期計(jì)算公式以及閏月識(shí)別4.5.1 星期計(jì)算公式蔡勒(Zeller)公式:W = Y + Y / 4 + C / 4 - 2C + 26 (M + 1) / 10 + D - 1公式中的符號(hào)含義如下,W:星期;C:世紀(jì)-1; Y:年(兩位數(shù)); M:月(M大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月來(lái)計(jì)算,比如2003年1月1日要看作2002年的13月1日來(lái)計(jì)算) D:日; 代表取整,即只要整數(shù)部分。簡(jiǎn)單地說(shuō),c是年份的前兩位,y是年份后兩位,m是月份,d是日數(shù)。1月和2月要按上一年的13月和 14月來(lái)算,這時(shí)c和y均按

38、上一年取值算出來(lái)的w除以7,余數(shù)是幾就是星期幾。如果余數(shù)是0,則為星期日。星期計(jì)算部分代碼:/*星期計(jì)算公式*/signed int xingqi(unsigned int a,unsigned char b,unsigned c) signed int x; if(b>=3) x=a%100+(a%100)/4+a/400-2*a/100+26*(b+1)/10+c-1; else x=(a-1)%100+(a-1)%100)/4+(a-1)/400-2*(a-1)/100+26*(b+13)/10+c-1; while(x<0) x=x+7; x=x%7; return x;4

39、.5.2 閏月識(shí)別公歷閏年計(jì)算(按一回歸年365天5小時(shí)48分45.5秒)、普通年能整除4且不能整除100的為閏年。(如2004年就是閏年,1900年不是閏年)、世紀(jì)年能整除400的是閏年。(如2000年是閏年,1900年不是閏年)因此在本設(shè)計(jì)中,當(dāng)該年是閏年時(shí),2月份的天數(shù)會(huì)認(rèn)定為29天,而平年時(shí)會(huì)認(rèn)定為28天。閏月識(shí)別部分代碼:/*計(jì)算月里天數(shù)*/unsigned char yuetian(unsigned char e)unsigned char f;switch(e)case 1: f=31;break;case 2:f=28;break;case 3: f=31;break;case

40、 4: f=30;break;case 5: f=31;break;case 6: f=30;break;case 7: f=31;break;case 8: f=31;break;case 9: f=30;break;case 10:f=31;break;case 11:f=30;break;case 12:f=31;break;default:f=0;break;return f;/*計(jì)算閏年或平年*/unsigned char runping(unsigned int b)unsigned char c;if(b%4=0 && b%100!=0)|b%400=0) && mon=2)c=1;elsec=0;return c;5 總結(jié)在這段調(diào)試的時(shí)間里,我們經(jīng)歷了階段性成功的狂喜、測(cè)試失敗后的絕望、陷入困境時(shí)的不知所措,重新投入的振作。

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論