嵌入式課程設計報告解答_第1頁
嵌入式課程設計報告解答_第2頁
嵌入式課程設計報告解答_第3頁
嵌入式課程設計報告解答_第4頁
嵌入式課程設計報告解答_第5頁
免費預覽已結(jié)束,剩余37頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、數(shù)字課程設計報課程呈設計名稱:數(shù)字時鐘系別:系姓名:班級:學號:成績:指導教師:開課時間:2015-2016 學年學期引言1.1 系統(tǒng)背景1.2 系統(tǒng)功能系統(tǒng)總體方案1.22.1MKL25Z128VLK微控制器介紹.2.2.2 系統(tǒng)硬件框圖.2.三系統(tǒng)硬件設計33.1定時器(TPM模塊.3.3.3.3.1.1 計時器/ 定時器的工作原理3.1.2 TPM 模塊功能概述3.2串行通信(UART模塊4.4.321串行通信RS-232總線標準3.33.43.2.2MAX232芯片進行電平轉(zhuǎn)換基本原理液晶顯示模塊單片機(MCU模塊3.4.1 MC9S08AW6(單片機性能概述四軟件設置4.1 主函數(shù)(

2、 main.c )4.2 中斷子程序( isr.c4.5.7.7.8.8.1.0.4.3LCD 子程序(Icd.c).1.2.4.4 定時器( timer.c ).1.5.4.5 定時器/ 脈寬調(diào)制子程序( tpm.c)1.64.7 運行結(jié)果.2.8.五總結(jié).2.8.參考文獻.2.9.引言1.1 系統(tǒng)背景電子鐘在工業(yè)控制和日常生活中是很重要的,它不僅可以用于計時、提醒又可用于對機 器的控制,在自動化的過程中必然有電子鐘的參與,因此電子鐘的應用會越來越廣泛。而且 向著精確、低功耗、多功能發(fā)展?;趩纹瑱C設計的數(shù)字鐘精確度較高, 因為在程序的執(zhí) 行過程中, 任何指令都不影響定時器的正常計數(shù),即便程

3、序很長也不會影響中斷的時間。 從而,使數(shù)字鐘的精度僅僅取決于單片機的產(chǎn)生機器周期電路和定時器硬件電路的精確度。另外,程序較為簡潔,具有可靠性和較好的可讀性。如果我們想將它應用于實時控制之中, 只要對上述程序和硬件電路稍加修改, 便可以得到實時控制的實用系統(tǒng),從而應用到實際工 作與生產(chǎn)中去。數(shù)字時鐘系統(tǒng)可采用數(shù)字電路實現(xiàn),也可以采用單片機來完成。若用數(shù)字電路完成,所 設計的電路相當復雜, 大概需要十幾片數(shù)字集成塊, 其功能也主要依賴于數(shù)字電路的各功能 模塊的組合來實現(xiàn),焊接的過程比較復雜,成本也非常高。若用單片機來設計制作完成,由 于其功能的實現(xiàn)主要通過軟件編程來完成, 那么就降低了硬件電路的復

4、雜性,而且其成本也 有所降低數(shù)字鐘是采用數(shù)字電路實現(xiàn)對時,分,秒,數(shù)字顯示的計時裝置,由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應用,使得數(shù)字鐘的精度,遠遠超過老式鐘表,鐘表的數(shù) 字化給人們生產(chǎn)生活帶來了極大的方便, 而且大大地擴展了鐘表的報時功能。數(shù)字鐘已成為 人們?nèi)粘I钪械谋匦杵?,廣泛應用于家庭、車站、碼頭、劇院、辦公室等場所,給人們的 生活、學習、工作帶來極大的方便 4 。不僅如此,在現(xiàn)代化的進程中,也離不開電子鐘的相 關(guān)功能和原理,比如機械手的控制、家務的自動化、定時自動報警、按時自動打鈴、時間程 序自動控制、定時廣播、自動起閉路燈、定時開關(guān)烘箱、通斷動力設備、甚至各種定時電氣 的

5、自動啟用等,所有這些,都是以鐘表數(shù)字化為基礎的。而且是控制的核心部分。1.2 系統(tǒng)功能本次課程設計的主要任務是設計一個時鐘計數(shù)器,也就是要做一個秒表,能夠計數(shù),并且按照我們平時的時間計數(shù)格式顯示, 當我們按下某個計數(shù)按鍵時候,這個計數(shù)系統(tǒng)就一秒LCD 顯示器一秒的計數(shù),當計數(shù)到 59 秒就進位,顯示分鐘的部分加 1,當計數(shù)分鐘的數(shù)字顯示到 59, 同樣要進位,這時候時鐘部分加 1,如此循環(huán)下去。當我們再次按下此按鍵時候,計數(shù)器暫停計數(shù),此時顯示器也就暫停在那個時候不再計數(shù)了,并且顯示當前計數(shù)時間。要求每顯示一次就刷新一次,或者刷新頻率更高些。二.系統(tǒng)總體方案2.1MKL25Z128VLK微控制

6、器介紹飛思卡爾在2010年飛思卡爾技術(shù)論壇(FTF2010美國站推出了 Kinetis系列微控制器。面向領域不同,Kinetis系列基于ARM Cortex-M內(nèi)核陸續(xù)推出了 Kinetis K 系列、L系列、M系列、W系列。目標應用領域是智能電表、傳感器控制網(wǎng)絡、工業(yè)控制、數(shù)據(jù)采集等。本課程設計使用 MKL25Z128VLK微控制器,它是Kinetis L系列,其CPI核是Cortex-M0+處理器,Ki netis L 系列命名格式為:Q KL# A FFF R T PP CC (N)M KL25 Z 128 V LK 4MCU 勺硬件最小系統(tǒng)是指可以使內(nèi)部程序運行所必須的最低規(guī)模的外圍電

7、路,也可以包括寫入器接口電路。一般情況下, MCU勺硬件最小系統(tǒng)由電源、晶振及復位等電路組成。隨著Flash存儲器制造技術(shù)的發(fā)展,硬件最小系統(tǒng)把寫入器的接口電路也包含在其中。2.2系統(tǒng)硬件框圖KL系列MC是以AMBA、線規(guī)范為架構(gòu)SOC般來說,AMB架構(gòu)包含高性能系統(tǒng)總線 和低速、低功耗的外設總線。系統(tǒng)總線AHB是負責連接AR附核、DMA控制器、片內(nèi)存儲器 或其他需要高帶寬的模塊。外設總線APB則是用來連接系統(tǒng)的外圍慢速模塊,其協(xié)議規(guī)則相 對系統(tǒng)總線AHB來說較為簡單,它與系統(tǒng)總線 AHB之間則通過總線橋(Bus bridge )相連, 期望能減少系統(tǒng)總線的負載.三系統(tǒng)硬件設計3.1定時器(T

8、PM模塊 3.1.1 計時器 / 定時器的工作原理實現(xiàn)計數(shù)與定時的基本方法有三種:完全硬件方式、完全軟件方式、可編程計數(shù)器 / 定 時器。完全硬件方式使用數(shù)字邏輯電路實現(xiàn),即完全用硬件電路實現(xiàn)計數(shù) / 定時功能,缺點: 通用性差、 靈活性差。 完全軟件方式通過編程, 利用計算機執(zhí)行指令的時間實現(xiàn)定時, 優(yōu)點: 節(jié)省硬件;缺點:降低了 CPU勺使用效率、不容易提供多作業(yè)環(huán)境,可作為實現(xiàn)粗略延時的 方法。可編程計數(shù)器 / 定時器的優(yōu)點: 其計數(shù) / 定時功能可由程序靈活地設置, 設定之后與 CPU并行地工作,不占用CPU勺工作時間。3.1.2 TPM 模塊功能概述TPM定時器/脈寬調(diào)制模塊)共有三

9、個模塊 TPM0/TPM1/TPM2TPM0t 6個通道,TPM1和TPM2只有2個通道。TPM支持輸入捕捉、輸出比較,并且能夠產(chǎn)生PWMI號來控制電機。TPM的基本定時器部分是一個遞增的計數(shù)器, 通過設定模塊的溢出值, 當計數(shù)器遞增到該數(shù)值時, 產(chǎn)生TPM中斷,可以通過選擇時鐘源和溢出值設定該計數(shù)器的頻率。1 外部引腳TPM模塊具有基本定時、輸入捕捉、輸出比較、脈寬調(diào)制( PWM功能。2基本結(jié)構(gòu) 1 )計數(shù)時鐘源與分頻TPM的時鐘由 SIM_SOPT2TPMSF和SIM_SOPT2PLLFLLSE來進行選擇。選擇的時鐘源的分頻因子由狀態(tài)和控制 (TPMx_SC 的) PS2:0 位決定。2)

10、計數(shù)器TPM具有一個16位計數(shù)器,有兩種操作模式:上升計數(shù)和可逆計數(shù)。上升計數(shù):當(CPWMS = 0時寸,上升計數(shù)被選中。0值被加載到TPM計數(shù)器中,并且計數(shù)器增 量直到達到MOD中的值,此刻計數(shù)器被重載為0。可逆計數(shù):當(CPWMS = 1時寸,可逆計數(shù)被選中。當配置為可逆計數(shù)時,MOD必須大于等于2。0值被加載到TPM計數(shù)器,并且計數(shù)器增量直到達到 MODS,此時計數(shù)器減量直到它返回0值并且可逆計數(shù)重啟。將MCU勺串口與PC機相連,TPM每達到1s進行一次計時,并通過串口將計時信息發(fā)送給 PC機。通過串口調(diào)試工具,可以看到時間計數(shù)值在遞增。TPM莫塊具有中斷使能、初始化、關(guān)閉操作以及TP

11、M中斷處理函數(shù)。按照構(gòu)件的思想,可將它們封裝成獨立的功能函數(shù)。3.2串行通信(UART模塊實現(xiàn)異步串行通信功能的模塊在一部分MCI中被稱為通用異步收發(fā)器(Un iversalAsynchronous Receiver/Transmitters,UART,在另一些 MCI中被稱為串行通信接口(SerialCommuni cati on In terface ,SCI)。3.2.1串行通信RS-232總線標準在MCI中,若用RS-232總線進行串行通信,則需外界電路實現(xiàn)電平轉(zhuǎn)換,在發(fā)送端需要用驅(qū)動電平將TTL電平轉(zhuǎn)換成RS-232電平;在接收端,需要用接收電路將 RS-232電平轉(zhuǎn)換為TTL電平。

12、電平轉(zhuǎn)換器不僅可以由晶振管分立元件構(gòu)成,也可以直接使用集成電路。目前使用MAX232芯片比較多,該芯片使用單一 +5V電源供電實現(xiàn)電平轉(zhuǎn)換,下圖芯片 MAX232的引腳說明:(1)VCC( 16腳):正電源端,一般為+5V;(2)GND( 15腳):接地;(3)Vs+(2 腳):vs+=2vcc-1.5v=8.5v ;(4)Vs-(6 腳):vs-=-2vcc-1.5v=-11.5vT 2怕21531441351261171O8gGNDT1OUTRUNR1OUTTUNT2INR2OUTC1十 S+ ci-C2+ C2-Vs-T2OUT R2IN (5)(6)C2+,C2-(4,5腳):一般接1

13、uF的電解電容;C1+,C2-(1,3腳):一般接1uF的電解電容。3.2.1 MAX2323.2.2MAX232芯片進行電平轉(zhuǎn)換基本原理MAX232芯片進行電平轉(zhuǎn)換的基本原理發(fā)送過程:MC啲TxD (TTL電平)經(jīng)過MAX23的 11腳(T1IN)送到MAX23內(nèi)部,在內(nèi)部TTL電平被“提升”為232電平,通過14腳(T1OUT發(fā)送出去。接收過程:外部 232電平經(jīng)過MAX232的 13腳(R1IN)送入到MAX232勺內(nèi)部, 在內(nèi)部的電平被“降低”為 TTL電平,經(jīng)過12腳(R1OU)送到MCUl勺RxD進入MCI內(nèi)部。進行MCU勺串行通信接口編程時,只針對 MCU勺發(fā)送與接收引腳,與 M

14、AX232無關(guān),MAX232 只是起到電平轉(zhuǎn)換作用。輸入輸出引腳分兩組,基本含義如表2.2所示。在實際使用時,若只需要一路串行通信接口,可以使用其中任何一組。表2 MAX232芯片輸入輸出引腳分類與基本接法組別TTL電平引腳方向典型接口232電平引腳方向111輸入接 MC® TxD13連接到接口,與其12輸出接 MC的 RxD14它設備通過232相接210輸入接MCU勺TxD8連接到接口,與其9輸出接MCU勺RxD7它設備通過232相接3.3液晶顯示模塊1.點陣字符型LCD基本特點:LCD作為電子信息產(chǎn)品的主要顯示器件,相對于其他類型的顯示器件來說有其自身的特點, 主要包括:(1)低

15、電壓,低功耗;(1)平板型結(jié)構(gòu);(3)使用壽命長;(4)被動顯示;(5)顯示信息量大且易于彩色化;(6)無電磁輻射。點陣字符型LCD是專門用于顯示數(shù)字,字母,圖形符號及少量自定義符號的液晶顯示器。這類顯示器把LCD控制器,點陣驅(qū)動器,字符存儲器,顯示體及少量的阻容元件等集成一個液晶顯示模板。鑒于字符型液晶顯示模塊目前在國際上已經(jīng)規(guī)范化,其電特性及接口特性是 統(tǒng)一的,只要設計出一種型號的接口電路, 在指令上稍加修改即可使用各種規(guī)格的字符型液晶顯示器模塊。點陣字符型液晶顯示器模塊的控制器大多數(shù)為日立公司生產(chǎn)的HD44780及其兼容的控制電路,如: SED1278(SEIKO EP SON),KS0

16、066(SAMSUNG),NJU6408(NER JAP ANRADIO)等。2.字符型液晶顯示器模塊的特點如下:(1)液晶顯示屏是以若干5*8或5*11點陣塊等組成的顯示字符群。每個點陣塊塊為一個字符位,字符間距和行間距都是一個點的寬度。(2)主控制電路為HD44780( HITACH)及其他公司的兼容電路。從程序員的角度來看 LCD顯示接口與編程是面向HD44780的,只要了解HD44780的編程結(jié)構(gòu)即可進行LCD的顯示編程。內(nèi)部具有字符發(fā)生器ROM可顯示192種字符。具有64字節(jié)的字符發(fā)生器RAM可以定義8個5*8點陣字符或4個5*11的點陣字符。具有64字節(jié)的數(shù)據(jù)顯示RAM供顯示器編程

17、使用。標準接口特性,與MC9S0系列的MCI容易接口。(7) 模塊結(jié)構(gòu)緊湊,輕巧,裝配容易。(8) 單+5V電源供電(寬溫型需要加-7V驅(qū)動電源)。(9) 低功耗,高可靠性。LCD(YM160'2C)161514131 rCore2AW601110090807060504030201LCD.D7LCD.”D6LCD.”D5LCD.-D4LCD.3LCD,D3LCD.-DILCD.JDOLCD.JLCD.阿LCD,IRS二二三三7 _bs4 4圖3.3 MCU控制液晶顯示接口接線圖表3 HD44780的引腳信號官幅嵌電平方向引胎義刪1V詰電就2Vdd電溉+閃3VO刪動電徹卜說4RSHL輸

18、入寄存継擇:卜數(shù)據(jù)寄存器卜指令寄存器5RnvH'L獻貼操作選擇:卜讀操作眄誹6EHl HL輸入使能詐:R巴心E下瞧沿有效E習有效7110DB(WDB5三態(tài)S位械總鐮低4位,韻MCU進行4位能吐此4位不用11M4DB4-DB7三態(tài)S位數(shù)據(jù)總貓高垃,若與皿U進行価艇汕只用屮位1516EI-E2獻上下兩行使能信豈只用于4特姝醍3.4單片機(MCU模塊 341 MC9S08AW6(單片機性能概述S80是單芯片8位微控制器解決法案。MC9S08AW60/AW60/AW48/AW32/AW16成本高性能的8位微處理器單元(MCU S08家族中的成員。家族中有的 MCU使用增強型S08S核,且使用不

19、同的模塊,存儲空間,存儲器類型與封裝類型。AW6(系列主要常規(guī)模塊和特點:(1)最高達40MHZ勺CPUX作頻率和20MHZ勺內(nèi)部總線工作頻率;時鐘源選項包括晶振,諧振器,外部時鐘或,內(nèi)部產(chǎn)生的時鐘。(2)相比HC08CP指令集,S08CPU曾加了 BGN指令。(3)單線后臺調(diào)試模式接口:增強的斷點能力,允許單一的斷點設置在線調(diào)試(在片內(nèi)調(diào)試模塊增加了多于兩個的斷點)。(4)內(nèi)含32個中斷/復位源;內(nèi)含2KB的片內(nèi)RAM內(nèi)含60KB的片內(nèi)在線可編程的Flash存儲器,帶有 塊保護和安全選項。(5)可選的計算機正常操作(COP復位;低電壓檢測與復位或中斷;非法操作碼檢測與復位;非法地址檢測與復位

20、。(6) ADC多達16個通道,10個A/D轉(zhuǎn)換器與動動比較功能;兩個串行通信接口SCI模塊與可選的13位中斷;一個串行外設接口 SPI模塊;集成電路互聯(lián)總線IIC模塊運行高達100kbps的最高總線負載;8引腳鍵盤中斷KBI模塊。(7) Timers : 1個2通道和一個6通道16位定時器/脈沖寬度調(diào)制器模塊。既有輸入捕獲,輸出比較,脈寬調(diào)制功能。AW子系列MCU勺4種封裝形式只是引腳數(shù)量和形式有所區(qū) 別,其他方面是一致的。四軟件設置4.1 主函數(shù)( main.c )/ 說明見工程文件夾下的 Doc 文件夾內(nèi) Readme.txt 文件/#include "includes.h&q

21、uot; /包含總頭文件11int main(void)uint_8 LCDBuffer20;/uint_8 * g_DispalyInit;/1. 聲明主函數(shù)使用的局部變量uint_32 remember;/2. 關(guān)總中斷enter_critical(); /進入臨界區(qū) , 關(guān)中斷/3. 初始化底層模塊light_init(LIGHT_PORT, LIGHT_PIN_BLUE, LIGHT_OFF); /藍燈初始化uart_init (UART_1,BUSCLK, 9600); /串口 1 初始化 , 總線時鐘 24000Khz, 波特率 9600tpm_init(TPM0,TPM_CLKS

22、RC_PLL,1000000);/1sLCDInit();/LCD初始化/4. 變量賦初值g_time0=00;/(1) "時分秒 " 緩存初始化 (00:00:00)g_time1=00;g_time2=00;/g_time3=11;/ g_time4=51;g_time3=' 'g_time4='Z'g_time5='h'g_time6='a'g_time7='o'g_time8=' 'g_time9='Y'g_time10='u'g_time

23、11='e'g_time12=' 'g_time13=' 'g_time14=' 'H./g_DispalyInit = (uint_8 *)" sunremember = g_time2; /(2) 臨時變量 remember 初始化啟動串口 1 接收中斷/5. 開中斷uart_enable_re_int(UART_1); /tpm_enable_int(TPM0);/啟動模塊中斷init_critical(); /開總中斷/ LCDShow(g_DispalyInit);/ 進入主循環(huán)/ 主循環(huán)開始判斷秒鐘是否發(fā)生變

24、化for(;)if (g_time2 != remember) /LCDBuffer0=g_time0/10+'0'LCDBuffer1=g_time0%10+'0'LCDBuffer2=':'LCDBuffer3=g_time1/10+'0'LCDBuffer4=g_time1%10+'0'LCDBuffer5=':'LCDBuffer6=g_time2/10+'0'LCDBuffer7=g_time2%10+'0'LCDBuffer8=g_time3;LCDBuf

25、fer9=g_time4;LCDBuffer10=g_time5;LCDBuffer11=g_time6;LCDBuffer12=g_time7;LCDBuffer13=g_time8;LCDBuffer14=g_time9;LCDBuffer15=g_time10;LCDBuffer16='A'LCDBuffer17='_'LCDBuffer18='A'uart_sendN(UART_1,11,g_time);remember=g_time2;LCDShow(LCDBuffer); / end_while/ 主循環(huán)結(jié)束return 0;4.2

26、中斷子程序( isr.c )#include "includes.h"/中斷函數(shù)服務例程/串口 0 接收中斷服務例程void isr_uart0_re(void)uint_8 ch;uint_8 flag = 1;enter_critical();ch = uart_re1(UART_0, &flag);if (0 = flag)uart_send1(UART_0, ch);exit_critical();/串口 1 接收中斷服務例程void isr_uart1_re(void)static uint_8 index=0; / 收到的個數(shù)uint_8 flag =

27、1;enter_critical();if(index>11)index=0;/ 三個字節(jié)一收 , 時分秒g_timeindex=uart_re1(UART_1,&flag);if(0=flag) index+;exit_critical();/串口 2 接收中斷服務例程void isr_uart2_re(void)uint_8 ch;uint_8 flag = 1;enter_critical();ch = uart_re1(UART_2, &flag);if (0 = flag)uart_send1(UART_2, ch);exit_critical();/tpm 定

28、時中斷void tpm0_isr(void)static uint_32 TPMCounter = 0;/定時器溢出中斷標志if(TPM_SC_REG(TPM0_BASE_PTR) & TPM_SC_TOF_MASK) = TPM_SC_TOF_MASK)TPMCounter+;BSET(TPM_SC_TOF_SHIFT,TPM_SC_REG(TPM0_BASE_PTR);/ 清標志位if(TPMCounter > 100)/TPM 每中斷 100 次(即 1s)閃爍一次。TPMCounter = 0;SecAdd1(g_time);4.3LCD 子程序(Icd.c)/文件名稱:

29、 Icd.c/功能概要: Icd 構(gòu)件頭文件/12/版權(quán)所有 : 蘇州大學飛思卡爾嵌入式中心 ()/版本更新 : 2013-03-17V1.2/#incIude "Icd.h"/Icd 控制位和數(shù)據(jù)位端口及引腳號struct GPIO LCD11=LCD_RS_PORT,LCD_RS, LCD_RW_PORT,LCD_RW, LCD_E_PORT,LCD_E, LCD_D0_PORT,LCD_D0, LCD_D1_PORT,LCD_D1, LCD_D2_PORT,LCD_D2, LCD_D3_PORT,LCD_D3, LCD_D4_PORT,LCD_D4, LCD_D5_P

30、ORT,LCD_D5, LCD_D6_PORT,LCD_D6, LCD_D7_PORT,LCD_D7,;/內(nèi)部函數(shù)原型說明extern void LCDCommand(uint_8 cmd);/函數(shù)名稱:LCDInit/函數(shù)返回:/參數(shù)說明:/功能概要:LCD 初始化。29/ void LCDInit()uint_32 i = 0;/定義數(shù)據(jù)口和控制口為輸出for(i = 0;i < 11;i+)gpio_init(LCDi.gpio_port, LCDi.gpio_pin, 1,0);/設置指令 ,RS,R/W = 00, 寫指令代碼gpio_set (LCD0.gpio_port,

31、LCD0.gpio_pin, 0);gpio_set (LCD1.gpio_port, LCD1.gpio_pin, 0);/功能設置 -/設置指令LCDCommand(0x38);/5*7 點陣模式 ,2行顯示 ,8位數(shù)據(jù)總線LCDCommand(0x08);/關(guān)顯示 ,關(guān)光標顯示 ,不閃爍LCDCommand(0x01);/清屏for (i=0; i<40000; i+)asm("NOP"); / 延時LCDCommand(0x06);LCDCommand(0x14);/光標右移一個字符位 ,AC 自動加 1LCDCommand(0x0C);/開顯示 ,關(guān)光標顯示

32、 ,不閃爍/ /函數(shù)名稱: LCDShow /函數(shù)返回:無 /參數(shù)說明:需要顯示的數(shù)據(jù) /功能概要:液晶顯示 data 中的數(shù)據(jù)。/ void LCDShow(uint_8 data16)uint_8 i;/LCD 初始化LCDInit();/顯示第 1 行 16 個字符gpio_set (LCD0.gpio_port, LCD0.gpio_pin, 0);gpio_set (LCD1.gpio_port, LCD1.gpio_pin, 0);/后 7 位為 DD RAM 地址 (0x00)LCDCommand(0x80);/寫 16 個數(shù)據(jù)到 DD RAMgpio_set (LCD0.gpi

33、o_port, LCD0.gpio_pin, 1);gpio_set (LCD1.gpio_port, LCD1.gpio_pin, 0);/將要顯示在第 1 行上的 16個數(shù)據(jù)逐個寫入 DD RAM 中for (i = 0;i < 16;i+)LCDCommand(datai);/顯示第 2 行 16 個字符gpio_set (LCD0.gpio_port, LCD0.gpio_pin, 0);gpio_set (LCD1.gpio_port, LCD1.gpio_pin, 0);/后 7 位為 DD RAM 地址 (0x40)LCDCommand(0xC0);gpio_set (LC

34、D0.gpio_port, LCD0.gpio_pin, 1);gpio_set (LCD1.gpio_port, LCD1.gpio_pin, 0);/將要顯示在第 2 行上的 16個數(shù)據(jù)逐個寫入 DD RAM 中for (i = 16;i < 19;i+)LCDCommand(datai);/函數(shù)名稱:LCDCommand/函數(shù)返回:/參數(shù)說明:cmd:待執(zhí)行的命令/功能概要:執(zhí)行給定的 cmd 命令 ,且延時。/void LCDCommand(uint_8 cmd)uint_8 i;uint_16 j;uint_8 temp;/等待延遲防止重復調(diào)用此函數(shù)而LCD 卡死for (j=

35、0; j<1600; j+);asm("NOP");/數(shù)據(jù)送到 LCD 的數(shù)據(jù)線上for(i = 3;i < 11;i+)gpio_set (LCDi.gpio_port, LCDi.gpio_pin, 0);for(i = 3;i < 11;i+)temp = 0x01 & (cmd>>(i-3);gpio_set (LCDi.gpio_port, LCDi.gpio_pin, temp);/給出 E 信號的下降沿 (先高后低 ),使數(shù)據(jù)寫入 LCD gpio_set (LCD2.gpio_port, LCD2.gpio_pin, 1

36、);for (j=0;j<25;j+) asm("NOP");gpio_set (LCD2.gpio_port, LCD2.gpio_pin, 0);4.4 定時器( timer.c )/文件名稱: timer.c/功能概要:時間處理軟件源文件/版權(quán)所有:蘇州大學飛思卡爾嵌入式中心()/更新記錄: 2013-04-27 V1.0/#include "timer.h"/函數(shù)名稱:SecAdd1/函數(shù)返回:/參數(shù)說明:*p: 為指向一個時分秒數(shù)組 p3/功能概要:秒單元 +1,并處理時分單元( 00:00:00-23:59:59)/void SecAd

37、d1(uint_8 *p)*(p+2)+=1;/秒+1if(*(p+2)>=60)/秒溢出*(p+2)=0;/清秒*(p+1)+=1;/分+1if(*(p+1)>=60)/分溢出*(p+1)=0;/清分*p+=1;/時+1if(*p>=24)/時溢出*p=0;/清時4.5 定時器 / 脈寬調(diào)制子程序( tpm.c )/文件名稱: tpm.c/功能概要: tpm 底層驅(qū)動構(gòu)件源文件/版權(quán)所有:蘇州大學飛思卡爾嵌入式中心()/更新記錄: 2013-5-5 V2.0/#include "tpm.h"/定時器模塊 0,1,2 地址映射const TPM_MemMa

38、pPtr TPM_ARR=TPM0_BASE_PTR,TPM1_BASE_PTR,TPM2_BASE_PTR;/函數(shù)名稱:tpm_init/功能概要:初始化 tpm 模塊 ./參數(shù)說明:tpmModule: 模塊號:0、1、2/clk_src_sel: 時鐘源選擇 :1:PLL/FLL (推薦)、 2:晶振/int_us: 中斷微秒數(shù) ,中斷時間間隔/函數(shù)返回:/void tpm_init (uint_8 tpmModule,uint_8 clk_src_sel,uint_32 int_us)uint_32 int_ticks;if(tpmModule>2) tpmModule=2;/防

39、止越界值/開啟 SIM 時鐘門BSET(SIM_SCGC6_TPM0_SHIFT+tpmModule,SIM_SCGC6); / 使能 TPM 時鐘/根據(jù)傳入?yún)?shù)(時鐘源、中斷時間間隔),使能時鐘、確定有關(guān)寄存器值if (1=clk_src_sel)/選擇 PLL/FLL 為 TPM 模塊的時鐘源/MCGPLL/2 或者 MCGFLL 作為時鐘源BSET(SIM_SOPT2_PLLFLLSEL_SHIFT,SIM_SOPT2); / 使能 PLL 為時鐘源int_ticks=6*int_us;/6*int_us=(48000/8)*int_us/1000else/晶振作為時鐘源BSET(OSC

40、_CR_ERCLKEN_SHIFT,OSC0_CR);/開啟晶振輸出時鐘int_ticks=int_us;/1*int_us=(8000/8)*int_us/1000SIM_SOPT2 |= SIM_SOPT2_TPMSRC(clk_src_sel);/使能時鐘選擇TPM_ARRtpmModule->CNT=0x00;/計數(shù)器清 0TPM_ARRtpmModule->MOD=int_ticks;/給模數(shù)寄存器賦值/TOF 寫 1 清 0,TOIE 中斷使能, CMOD 選擇每次時鐘加 1,PS=0x011 選擇 8 分頻 ;TPM_ARRtpmModule->SC=TPM_S

41、C_TOF_MASK|TPM_SC_TOIE_MASK|TPM_SC_CMOD(1)|TPM_SC_PS(3);/函數(shù)名稱:tpm_enable_int/功能概要:使能 tpm 模塊中斷。/參數(shù)說明:tpmModule: 模塊號:0、1、2/函數(shù)返回:/void tpm_enable_int(uint_8 tpmModule)enable_irq(tpm0_irq_no + tpmModule);/函數(shù)名稱:tpm_disable_int/功能概要:禁止 tpm 模塊初始化。/參數(shù)說明:tpmModule: 模塊號:0、1、2/函數(shù)返回:/void tpm_disable_int(uint_8

42、 tpmModule)disable_irq(tpm0_irq_no + tpmModule);/函數(shù)名稱:tpm_stop/功能概要:禁止 tpm 模塊。/參數(shù)說明:tpmModule: 模塊號:0、1、2/函數(shù)返回:/void tpm_stop(uint_8 tpmModule)TPM_ARRtpmModule->SC&=TPM_SC_CMOD(3);4.6 串口通信子程序( uart.c )/文件名稱:uart.c/功能概要:uart 底層驅(qū)動構(gòu)件源文件/版權(quán)所有:蘇州大學飛思卡爾嵌入式中心()/更新記錄: 2012-11-12 V1.0/#include "ua

43、rt.h"/串口 1、 2 號地址映射const UART_MemMapPtr UART_ARR = UART1_BASE_PTR, UART2_BASE_PTR;/打開 MCGIRCLK 時鐘static void MCGIRCLK_OutEnable(void);/函數(shù)名稱:uart_init/功能概要:初始化 uart 模塊/參數(shù)說明:uartNo: 串口號: UART_0 、 UART_1 、UART_2/sel_clk: 選擇串口 0 時鐘源 :MCGIRCLK(4000Khz)/MCGPLL(48000Khz)/BUSCLK(24000khz)/baud:波特率:300、

44、600、1200、2400、4800、 9600、 19200、 115200./函數(shù)返回:/說明: 當參數(shù)為 UART_0 時, sel_clk 只能選擇 MCGIRCLK 或 MCGPLL ,若選擇內(nèi)部時鐘MCGIRCLK,/波特率需小于 19200; 當參數(shù)為 UART_1 或是 UART_2 時, sel_clk 只能選擇 BUSCLK/void uart_init (uint_8 uartNo,uint_32 sel_clk,uint_32 baud_rate)/局部變量聲明 register uint_16 sbr;uint_8 temp;uint_32 clk_Khz;UARTL

45、P_MemMapPtr uartch1=UART0_BASE_PTR;/ 聲明 uartch1 為 UARTLP_MemMapPtr 結(jié)構(gòu)體類型指針UART_MemMapPtr uartch2;/聲明 uartch2 為 UART_MemMapPtr 結(jié)構(gòu)體類型指針uartch2 = UART_ARRuartNo-1; / 獲得 UART1 、 2 模塊相應口基地址/根據(jù)帶入?yún)?shù) uartNo ,給局部變量 uartch1 賦值if(uartNo=0)switch(sel_clk) case MCGIRCLK:/啟用并選擇 UART0 時鐘源 MCGIRCLKMCGIRCLK_OutEnabl

46、e();/啟用內(nèi)部快速時鐘/UART0 選擇 MCGIRCLK=4000KhzSIM_SOPT2 |= SIM_SOPT2_UART0SRC(0x3);時鐘源break;case MCGPLL:SIM_SOPT2 |= SIM_SOPT2_UART0SRC(1);/UART0 選擇MCGFLLCLK_khz=48000Khz 時鐘源SIM_SOPT2 |= SIM_SOPT2_PLLFLLSEL_MASK;break;default:break;/引腳復用為串口功能并啟用串口模塊時鐘PORTA_PCR14 = PORT_PCR_MUX(0x3);/ 使能 UART0_TXDPORTA_PCR1

47、5 = PORT_PCR_MUX(0x3);/ 使能 UART0_RXDSIM_SCGC4 |= SIM_SCGC4_UART0_MASK;/啟動串口 0 時鐘/ 暫時關(guān)閉串口 0 發(fā)送與接收功能uartch1->C2 &= (UART_C2_TE_MASK | UART_C2_RE_MASK);/根據(jù)時鐘源選擇時鐘頻率if(MCGIRCLK = sel_clk)clk_Khz = MCGFLL_CLK_KHZ;else if (MCGPLL = sel_clk)clk_Khz = MCGPLL_CLK_KHZ;/配置串口工作模式 :8 位無校驗模式sbr = (uint_16)

48、(clk_Khz*1000)/(baud_rate * 16);elsetemp = UART_BDH_REG(uartch1) & (UART_BDH_SBR(0x1F);UART_BDH_REG(uartch1) = temp | UART_BDH_SBR(sbr & 0x1F00) >> 8);UART_BDL_REG(uartch1) = (uint_8)(sbr & UART_BDL_SBR_MASK);/初始化控制寄存器、清標志位UART0_C4 = 0x0F;UART0_C1 = 0x00;UART0_C3 = 0x00;UART0_MA1 =

49、 0x00;UART0_MA2 = 0x00;UART0_S1 |= 0x1F;UART0_S2 |= 0xC0;/啟動發(fā)送接收 uartch1->C2 |= (UART_C2_TE_MASK | UART_C2_RE_MASK);switch (uartNo)case UART_1:PORTE_PCR0 = PORT_PCR_MUX(0x3);/使能UART1_TXDPORTE_PCR1 = PORT_PCR_MUX(0x3);/使能UART1_RXDSIM_SCGC4 |= SIM_SCGC4_UART1_MASK; / 啟動串口 1 時鐘break;case UART_2:PORT

50、E_PCR22 = PORT_PCR_MUX(0x4); / 使能 UART2_TXDPORTE_PCR23 = PORT_PCR_MUX(0x4); / 使能 UART2_RXDSIM_SCGC4 |= SIM_SCGC4_UART2_MASK;/ 啟動串口 2 時鐘break;default:break; /傳參錯誤,返回/暫時關(guān)閉串口 1、2 發(fā)送與接收功能uartch2->C2 &= (UART_C2_TE_MASK | UART_C2_RE_MASK);/配置波特率 ,KL25 串口 1、2 時鐘頻率只能使用 Bus clock = 24M 總線時鐘/配置串口工作模式

51、,8 位無校驗模式uartch2->C1 = 0;sbr = (uint_16)(BUS_CLK_KHZ*1000)/(baud_rate * 16);temp = UART_BDH_REG(uartch2) & (UART_BDH_SBR(0x1F);UART_BDH_REG(uartch2) = temp | UART_BDH_SBR(sbr & 0x1F00) >> 8);UART_BDL_REG(uartch2) = (uint_8)(sbr & UART_BDL_SBR_MASK);/初始化控制寄存器、清標志位 uartch2->C1 = 0x00;uartch2->C3 = 0x00;uartch2->S1 = 0x1F;uartch2->S2 = 0x00;/啟動發(fā)送接收 uartch2->C2 |= (UART_C2_TE_MASK | UART_C2_RE_MASK);/函數(shù)名稱:uart_send1

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論