2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩24頁(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)介

1、<p>  課 程 設(shè) 計(jì) 報(bào) 告</p><p>  課程設(shè)計(jì)名稱(chēng): 嵌入式技術(shù)基礎(chǔ)與實(shí)踐 </p><p>  系 別: 三 系 </p><p>  學(xué)生姓名: </p><p>  班 級(jí): &

2、lt;/p><p>  學(xué) 號(hào): </p><p>  成 績(jī): </p><p>  指導(dǎo)教師: </p><p>  開(kāi)課時(shí)間: 2010-2011 學(xué)年 2 學(xué)期</p>

3、<p><b>  目 錄</b></p><p>  第一章 系統(tǒng)概要2</p><p>  1.1 系統(tǒng)背景2</p><p>  1.2 系統(tǒng)功能3</p><p>  第二章 系統(tǒng)硬件設(shè)計(jì)3</p><p>  2.1 系統(tǒng)原理圖3</p><p

4、>  2.2 單片機(jī)(MCU)模塊4</p><p>  2.2.1 MC9S08AW60單片機(jī)性能概述4</p><p>  2.2.2 內(nèi)部結(jié)構(gòu)簡(jiǎn)圖5</p><p>  2.3 串行通信模塊5</p><p>  2.3.1 MAX232引腳圖5</p><p>  2.3.2 串行通信的電路原理

5、7</p><p>  2.4 液晶顯示模塊8</p><p>  第三章 系統(tǒng)軟件設(shè)計(jì)9</p><p>  3.1 MCU方(C)程序9</p><p>  3.1.1串行通信子程序16</p><p>  3.1.2 LCD子程序19</p><p>  第四章 系統(tǒng)測(cè)試22

6、</p><p>  第五章 總結(jié)展望22</p><p><b>  5.1 總結(jié)22</b></p><p><b>  5.2 展望22</b></p><p><b>  參考文獻(xiàn)22</b></p><p><b>  第一章

7、 系統(tǒng)概要</b></p><p><b>  1.1 系統(tǒng)背景</b></p><p>  數(shù)字時(shí)鐘,當(dāng)我們聽(tīng)到這幾個(gè)字時(shí),第一反應(yīng)就是我們所說(shuō)的數(shù)字,不錯(cuò)數(shù)字鐘就是以數(shù)字顯示取代模擬表盤(pán)的鐘表,在顯示上它用數(shù)字反應(yīng)出此時(shí)的時(shí)間,相比模擬鐘能給人一種一目了然的感覺(jué),不僅如此它還能同時(shí)顯示時(shí)、分、秒。而且能對(duì)時(shí)、分、秒準(zhǔn)確校時(shí),這是普通鐘所不及的。由于單片

8、機(jī)集成度高、功能強(qiáng)、可靠性高、體積小、功耗地、使用方便、價(jià)格低廉等一系列優(yōu)點(diǎn),目前已經(jīng)滲入到人們工作和生活的方方面面,幾乎“無(wú)處不在,無(wú)所不為”。單片機(jī)的應(yīng)用領(lǐng)域已從面向工業(yè)控制、通訊、交通、智能儀表等迅速發(fā)展到家用消費(fèi)產(chǎn)品、辦公自動(dòng)化、汽車(chē)電子、PC機(jī)外圍以及網(wǎng)絡(luò)通訊等廣大領(lǐng)域。</p><p><b>  1.2 系統(tǒng)功能</b></p><p>  在實(shí)驗(yàn)箱上有

9、一個(gè)啟動(dòng)鍵,當(dāng)按下啟動(dòng)鍵給以一個(gè)低電平,電子時(shí)鐘從當(dāng)前設(shè)定值開(kāi)始走時(shí)。按秒刷新,要求在LCD屏上顯示。若按啟動(dòng)鍵給以高電平,則時(shí)間暫停,再按,時(shí)間繼續(xù)按秒刷新。</p><p>  第二章 系統(tǒng)硬件設(shè)計(jì)</p><p><b>  2.1 系統(tǒng)原理圖</b></p><p>  該系統(tǒng)由AW60最小系統(tǒng)電路為主要結(jié)構(gòu),利用串口進(jìn)行數(shù)據(jù)的控制與采

10、集。首先將開(kāi)關(guān)接在AW60上的PORT_D口上,用于控制數(shù)字時(shí)鐘系統(tǒng)的開(kāi)關(guān)。然后將LCD的數(shù)據(jù)線7-14引腳(D0-D7)分別與MCU的PTA0-PTA7連接,LCD的控制線RS、R/W、E(4、5、6引腳)分別于MCU的PTC4、PTC6、PTF6連接,用于輸出時(shí)間。數(shù)字時(shí)鐘必須要有晶振電路,所以將該晶振電路與AW60的PTG5和PTG6相連,用于時(shí)間的自加。由于在運(yùn)行系統(tǒng)時(shí),以防電流不穩(wěn)定,所以在PTB0端設(shè)置一個(gè)下拉電阻,穩(wěn)定電流

11、。</p><p>  2.2 單片機(jī)(MCU)模塊</p><p>  2.2.1 MC9S08AW60單片機(jī)性能概述</p><p> ?。?)最高達(dá)40MHz的CPU工作頻率和20Hz的內(nèi)部總線工作頻率表;時(shí)鐘源選項(xiàng)包括晶振、諧振器、外部時(shí)鐘或內(nèi)部產(chǎn)生的時(shí)鐘。</p><p>  (2)相比HC08 CPU指令集,S08 CPU增加了B

12、GND指令。</p><p> ?。?)單線后臺(tái)調(diào)試模式接口;增強(qiáng)的斷點(diǎn)能力,允許單一的斷點(diǎn)設(shè)置在線調(diào)試(在片內(nèi)調(diào)試的模塊增加了多于兩個(gè)的斷點(diǎn))。</p><p> ?。?)內(nèi)含32個(gè)中斷/復(fù)位源;內(nèi)含2KB的片內(nèi)RAM;內(nèi)含60KB的片內(nèi)在線可編程Flash存儲(chǔ)器,帶有塊保護(hù)和安全選項(xiàng)。</p><p> ?。?)可選的計(jì)算機(jī)正常操作(COP)復(fù)位;低電壓檢測(cè)和復(fù)

13、位或中斷;非法操作碼檢測(cè)與復(fù)位;非法地址檢測(cè)與復(fù)位。</p><p> ?。?)ADC:多達(dá)16個(gè)通道,10位A/D轉(zhuǎn)換器與自動(dòng)比較功能;兩個(gè)串行通信接口SCI模塊與可選的13位中斷;一個(gè)串行外設(shè)接口SPI模塊;集成電路互連總線I2C模塊運(yùn)作高達(dá)100kbps的最高總線負(fù)載;8引腳鍵盤(pán)中斷KBI模塊。</p><p> ?。?)Timers:1個(gè)2通道和1個(gè)6通道16位定時(shí)器/脈沖寬度調(diào)制

14、器模板。具有輸入、捕捉、輸出比較、脈寬調(diào)制功能。</p><p>  2.2.2 內(nèi)部結(jié)構(gòu)簡(jiǎn)圖</p><p><b>  1. 內(nèi)部結(jié)構(gòu)簡(jiǎn)圖</b></p><p>  如圖所示,給出了AW60的內(nèi)部結(jié)構(gòu)圖,它對(duì)于我們理解和應(yīng)用AW60 MCU有重要作用,在學(xué)習(xí)了基本有法后,應(yīng)在反過(guò)來(lái)熟悉這個(gè)內(nèi)部結(jié)構(gòu)圖,以便更好地理解AW60 MCU的基本原

15、理。從內(nèi)部結(jié)構(gòu)圖可以看出,AW60主要有以下幾個(gè)部分:S08 CPU、存儲(chǔ)器、定時(shí)器接口模塊、定時(shí)器模塊、看門(mén)狗模塊、通用IO模塊、串口通信模塊(SCI)、串行外設(shè)接口(SPI)模塊、I2C(IIC)模塊、A/D轉(zhuǎn)換模塊、鍵盤(pán)中斷模塊、時(shí)鐘發(fā)生模塊、復(fù)位與中斷模塊等。</p><p>  2.3 串行通信模塊</p><p>  2.3.1 MAX232引腳圖</p><

16、;p>  在MCU中,若用RS-232總線進(jìn)行串行通信,則需外接電路實(shí)現(xiàn)電平轉(zhuǎn)換。在發(fā)送端,需要用驅(qū)動(dòng)電路將TTL 電平轉(zhuǎn)換成RS-232電平;在接受端,需要用接收電路將RS-232電平。轉(zhuǎn)化為T(mén)TL電平。電平轉(zhuǎn)換器不僅可以由晶振管分立元件構(gòu)成,也可以直接使用集成電路。目前使用MAX232芯片較多,該芯片使用單一+5V電源供電實(shí)現(xiàn)電平轉(zhuǎn)換。如圖所示,給出了MAX232的引腳說(shuō)明。各引腳含義簡(jiǎn)要說(shuō)明如下:</p>&l

17、t;p>  Vcc(16腳):正電源端,一般接+5V。</p><p>  GND(15腳):地。</p><p>  VS+(2腳):VS+=2VCC-1.5V=8.5V。</p><p>  VS-(6腳):VS-=-2VCC-1.5V=-11.5V。</p><p>  C2+、C2-(4、5腳):一般接1μF的電解電容。<

18、/p><p>  C1+、C1-(1、3腳):一般接1μF的電解電容。</p><p>  在正常情況下,(1)T1IN=5V,則T1OUT=-9V;T1IN=0V,則T1OUT=9V。(2)將R1IN與T1OUT相連,令T1IN=5V,則R1OUT=5V;令T1IN=0V,則R1OUT=0V。</p><p>  MAX232芯片進(jìn)行電平轉(zhuǎn)換的基本原理:(1)發(fā)送過(guò)程

19、:MCU的TxD(TTL電平)經(jīng)過(guò)MAX232的11腳(T1IN)送到MAX232內(nèi)部,在內(nèi)部TTL電平被“提升”為232電平,通過(guò)14腳(T1OUT)發(fā)送出去。接受過(guò)程:外部232電平經(jīng)過(guò)MAX232的13腳(R1IN)進(jìn)入到MAX232的內(nèi)部,在內(nèi)部232電平被“降低”為T(mén)TL電平,經(jīng)過(guò)12腳(R1OUT送到MCU的RxD,進(jìn)入MCU內(nèi)部。</p><p>  2.3.2 串行通信的電路原理</p>

20、;<p>  從基本原理的角度看,串行通信接口SCI的主要功能是:接收時(shí),把外部的單線輸入的數(shù)據(jù)變成一個(gè)字節(jié)的并行數(shù)據(jù)送入MCU內(nèi)部;發(fā)送時(shí),把需要發(fā)送的一個(gè)字節(jié)的并行數(shù)據(jù)轉(zhuǎn)換為單線輸入。為了設(shè)置波特率,SCI應(yīng)具有波特率寄存器。為了能夠設(shè)置通信格式、是否校驗(yàn)、是否允許中斷等,SCI應(yīng)具有控制寄存器。而要知道串口是否有數(shù)據(jù)可收、數(shù)據(jù)是否發(fā)送出去等,需要有SCI狀態(tài)寄存器。當(dāng)然,若一個(gè)寄存器不夠用,控制與狀態(tài)寄存器可能有多個(gè)

21、。而SCI數(shù)據(jù)寄存器存放要發(fā)送的數(shù)據(jù),也存放接受的數(shù)據(jù),這并不沖突,因?yàn)榘l(fā)送與接收的實(shí)際工作是通過(guò)“發(fā)送移位寄存器”和“接收以為寄存器”完成的。編程時(shí),程序員并不直接與“發(fā)送移位寄存器”和“接收移位寄存器”打交道,只與數(shù)據(jù)寄存器打交道,所以MCU中并沒(méi)有設(shè)置“發(fā)送移位寄存器和“接收移位寄存器”的映像地址。發(fā)送時(shí),程序員通過(guò)判定狀態(tài)寄存器的相應(yīng)位,了解是否可以發(fā)送一個(gè)新的數(shù)據(jù)。若可以發(fā)送,則將待發(fā)送的數(shù)據(jù)放入“SCI數(shù)據(jù)寄存器”中就可以了

22、,剩下的工作由MCU自動(dòng)完成:將數(shù)據(jù)從“SCI數(shù)據(jù)寄存器”送到“發(fā)送移位寄存器”,硬件驅(qū)動(dòng)將“發(fā)送移位寄存器”的數(shù)據(jù)一位一位地按照規(guī)定的波特率移到發(fā)</p><p>  2.4 液晶顯示模塊</p><p>  點(diǎn)陣字符型LCD是專(zhuān)門(mén)用于顯示數(shù)字、字母、圖形符號(hào)及少量自定義符號(hào)的液晶顯示器。這類(lèi)顯示器把LCD控制器、點(diǎn)陣驅(qū)動(dòng)器、字符存儲(chǔ)器、顯示體及少量的阻容元件等集成一個(gè)液晶顯示模塊。鑒于

23、字符型液晶顯示模塊目前在國(guó)際上已經(jīng)規(guī)范化,其電特性及接口特性是統(tǒng)一的,因此,只要設(shè)計(jì)出一種型號(hào)的接口電路,在指令上稍加修改即可使用各種規(guī)格的字符型液晶顯示模塊。</p><p>  點(diǎn)陣字符型液晶顯示模塊的控制器大多數(shù)為日立公司生產(chǎn)的HD44780及其兼容的控制電路,如SED1278(SEIKO EPSON)、KS0066(SAMSUNG)、NJU6408(NER JAPANRADIO)等。字符型液晶顯示模塊的主

24、要特點(diǎn)如下:</p><p>  液晶顯示屏是以若干5*8或5*11點(diǎn)陣塊組成的顯示字符群。每個(gè)點(diǎn)陣塊為一個(gè)字符位,字符間距和行距都為一個(gè)點(diǎn)的寬度。</p><p>  主控制電路為HD44780(HITACHI)及其他公司的兼容電路。從程序員的角度來(lái)說(shuō),LCD的顯示接口與編程是面向HD44780的,只要了解HD44780的編程結(jié)構(gòu)即可進(jìn)行LCD的顯示編程。</p><

25、p>  內(nèi)部具有字符發(fā)生器ROM,可顯示192種字符(160個(gè)5*7點(diǎn)陣字符和32個(gè)5*10點(diǎn)陣字符)。</p><p>  具有64字節(jié)的字符發(fā)生器RAM,可以定義8個(gè)5*8點(diǎn)陣字符或4個(gè)5*11點(diǎn)陣字符。</p><p>  具有64字節(jié)的數(shù)據(jù)顯示RAM,供顯示編程時(shí)使用</p><p>  標(biāo)準(zhǔn)接口特性,與MC9S08系列MCU容易接口。</p&g

26、t;<p>  模塊結(jié)構(gòu)緊湊、輕巧、裝配容易。</p><p>  單+5V電源供電(寬溫型需要加-7V驅(qū)動(dòng)電源)。</p><p><b>  低功耗、高可靠性。</b></p><p>  第三章 系統(tǒng)軟件設(shè)計(jì)</p><p>  3.1 MCU方(C)程序</p><p>&l

27、t;b>  main.c</b></p><p>  #include "Includes.h"</p><p>  #include "LCD.h"</p><p>  #include "SCI.h"</p><p>  #include "timer

28、.h"</p><p>  #include "GPIO.h"</p><p>  //在此添加全局變量定義</p><p>  uint8 g_time[8];</p><p>  void main(void){</p><p>  uint8 g_DispalyInit[]=&quo

29、t;00:00:00";</p><p>  uint8 remember;</p><p>  uint32 mRuncount=0;</p><p><b>  uint8 i;</b></p><p><b>  uint8 m;</b></p><p>&l

30、t;b>  int n=1;</b></p><p><b>  //1 關(guān)總中斷</b></p><p>  DisableInterrupt(); //禁止總中斷</p><p><b>  //2 芯片初始化</b></p><p>  MCUInit();</

31、p><p><b>  //3 模塊初始化</b></p><p>  Light_Init(Light_Run_PORT,Light_Run,Light_OFF);</p><p>  LCDinit();</p><p>  TPMinit(TPM_NUM_1);</p><p>  SCIIni

32、t(SCI_NUM_1,SYSTEM_CLOCK,9600);</p><p><b>  //定時(shí)器</b></p><p><b>  //內(nèi)存初始化 </b></p><p>  g_time[0]=0;</p><p>  g_time[1]=0; </p><p>

33、  g_time[2]=':';</p><p>  g_time[3]=0;</p><p>  g_time[4]=0;</p><p>  g_time[5]=':';</p><p>  g_time[6]=0;</p><p>  g_time[7]=0;</p>

34、<p>  remember=g_time[7];</p><p><b>  //開(kāi)放中斷</b></p><p><b>  //LCD</b></p><p>  LCDshow(g_DispalyInit); </p><p><b>  while(n){</b

35、></p><p>  if(GPIO_Get(LCD_Run_PORT,0)==LCD_Run){</p><p>  remember = g_time[7];</p><p><b>  n = 0;</b></p><p>  EnableSCIReInt();</p><p>  

36、EnableInterrupt();</p><p>  EnabletimerInt(TPM_NUM_1);</p><p><b>  }</b></p><p><b>  //4 主循環(huán)</b></p><p>  while (!n){ </p><p> 

37、 if(g_time[7]!=remember){</p><p>  for(i=0;i<8;i++) {</p><p>  if(i==2 || i ==5){</p><p>  g_DispalyInit[i] =g_time[i];</p><p><b>  } </b></p><

38、;p><b>  else{</b></p><p>  m=g_time[i];</p><p>  g_DispalyInit[i]=m+'0';</p><p><b>  }</b></p><p><b>  }</b></p>&

39、lt;p>  LCDshow(g_DispalyInit);</p><p>  SCISendN(SCI_NUM_1,3,g_time);</p><p>  remember=g_time[7];</p><p><b>  }</b></p><p>  if(GPIO_Get(LCD_Run_PORT,0)

40、!=LCD_Run){</p><p>  LCDshow(g_DispalyInit); </p><p><b>  n = 1;</b></p><p>  DisableInterrupt();</p><p>  DisableSCIReInt();</p><p>  Disablet

41、imerInt(TPM_NUM_1);</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b&

42、gt;  isr.c</b></p><p>  #include "Includes.h"</p><p>  //此處為用戶新定義中斷處理函數(shù)的存放處</p><p>  #include "timer.h"</p><p>  //此處為用戶新定義中斷處理函數(shù)的存放處</p>

43、;<p>  interrupt void isrT1Out(void){</p><p>  DisableInterrupt();</p><p>  SecAdd1(g_time);</p><p>  TPM_CSTR(1) &=~(TPM1SC_TOF_MASK);</p><p>  EnableInterr

44、upt();</p><p><b>  }</b></p><p>  //未定義的中斷處理函數(shù),本函數(shù)不能刪除</p><p>  interrupt void isrDummy(void){</p><p><b>  }</b></p><p>  //中斷處理子程序

45、類(lèi)型定義</p><p>  typedef void( *ISR_func_t)(void);</p><p>  //中斷矢量表,如果需要定義其它中斷函數(shù),請(qǐng)修改下表中的相應(yīng)項(xiàng)目</p><p>  const ISR_func_t ISR_vectors[] @0xFFCC = {</p><p>  isrDummy, //

46、 0xFFCC //時(shí)基中斷</p><p>  isrDummy, // 0xFFCE //IIC中斷</p><p>  isrDummy, // 0xFFD0 //ADC轉(zhuǎn)換中斷</p><p>  isrDummy, // 0xFFD2 //鍵盤(pán)中斷</p>

47、<p>  isrDummy, // 0xFFD4 //SCI2發(fā)送中斷</p><p>  isrDummy, // 0xFFD6 //SCI2接收中斷</p><p>  isrDummy, // 0xFFD8 //SCI2錯(cuò)誤中斷</p><p>  isrDummy,

48、// 0xFFDA //SCI1發(fā)送中斷</p><p>  isrDummy, // 0xFFDC //SCI1接收中斷</p><p>  isrDummy, // 0xFFDE //SCI1錯(cuò)誤中斷</p><p>  isrDummy, // 0xFFE0 //SPI中斷

49、</p><p>  isrDummy, // 0xFFE2 //TPM2溢出中斷</p><p>  isrDummy, // 0xFFE4 //TPM2通道1輸入捕捉/輸出比較中斷</p><p>  isrDummy, // 0xFFE6 //TPM2通道0輸入捕捉/輸出比較中斷</p>&

50、lt;p>  isrT1Out, // 0xFFE8 //TPM1溢出中斷</p><p>  isrDummy, // 0xFFEA //TPM1通道5輸入捕捉/輸出比較中斷</p><p>  isrDummy, // 0xFFEC //TPM1通道4輸入捕捉/輸出比較中斷</p><p>  isr

51、Dummy, // 0xFFEE //TPM1通道3輸入捕捉/輸出比較中斷</p><p>  isrDummy, // 0xFFF0 //TPM1通道2輸入捕捉/輸出比較中斷</p><p>  isrDummy, // 0xFFF2 //TPM1通道1輸入捕捉/輸出比較中斷</p><p>  isrDummy,

52、 // 0xFFF4 //TPM1通道0輸入捕捉/輸出比較中斷</p><p>  isrDummy, // 0xFFF6 //ICG的PLL鎖相狀態(tài)變化中斷</p><p>  isrDummy, // 0xFFF8 //低電壓檢測(cè)中斷</p><p>  isrDummy, // 0xFFFA

53、 //IRQ引腳中斷</p><p>  isrDummy // 0xFFFC //SWI指令中斷 </p><p>  //RESET是特殊中斷,其向量由開(kāi)發(fā)環(huán)境直接設(shè)置(在本軟件系統(tǒng)的Start08.o文件中)</p><p><b>  };</b></p><p><b&g

54、t;  timer.c</b></p><p>  #include "timer.h"</p><p>  void TPMinit(uint8 TPMNo){</p><p>  if(TPMNo > 2)</p><p>  TPMNo = 2;</p><p>  else

55、 if(TPMNo < 1)</p><p><b>  TPMNo=1;</b></p><p>  TPM_CSTR(TPMNo)=0b00010110;</p><p>  TPM_CNTH(TPMNo) = 0x00;</p><p>  TPM_CNTL(TPMNo) = 0x00;</p>

56、<p>  TPM_MODH(TPMNo) = 0x7A;</p><p>  TPM_MODL(TPMNo) = 0x12;</p><p><b>  }</b></p><p>  void SecAdd1(uint8 *p){</p><p>  *(p+7)+=1;</p><p

57、>  if(*(p+7)>=10){</p><p>  *(p+7) = 0;</p><p>  *(p+6)+=1;</p><p>  if(*(p+6)>=6){</p><p>  *(p+6) = 0;</p><p>  *(p+4)+=1;</p><p> 

58、 if(*(p+4)>=10){</p><p>  *(p+4) = 0;</p><p>  *(p+3)+=1;</p><p>  if(*(p+3)>=6){</p><p>  *(p+3) = 0;</p><p>  *(p+1)+=1;</p><p>  if(*

59、(p+1)>=9){</p><p>  *(p+1) = 0;</p><p><b>  *p+=1;</b></p><p><b>  } </b></p><p>  if((*p*10+*(p+1))>=24)</p><p><b>  *

60、p = 0; </b></p><p>  *(p+1) = 0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b&

61、gt;</p><p><b>  }</b></p><p><b>  timer.h</b></p><p>  #ifndef timeR_H</p><p>  #define timeR_H</p><p>  #include "MC9S08AW60.

62、h"</p><p>  #include "Type.h"</p><p>  #define TPM_CSTR(x)(*(vuint8 *)(0x00000020+(x-1)*64))</p><p>  #define TPM_CNTH(x)(*(vuint8 *)(0x00000021+(x-1)*64))</p>

63、<p>  #define TPM_CNTL(x)(*(vuint8 *)(0x00000022+(x-1)*64))</p><p>  #define TPM_MODH(x)(*(vuint8 *)(0x00000023+(x-1)*64))</p><p>  #define TPM_MODL(x)(*(vuint8 *)(0x00000024+(x-1)*64))<

64、;/p><p>  #define EnabletimerInt(x) TPM_CSTR(x) |= TPM1SC_TOIE_MASK</p><p>  #define DisabletimerInt(x) TPM_CSTR(x) &=~TPM1SC_TOIE_MASK</p><p>  #define TPM_NUM_1 1</p>

65、<p>  #define TPM_NUM_2 2</p><p>  #define TPM1_CH_0 0</p><p>  #define TPM1_CH_1 1</p><p>  #define TPM1_CH_2 2</p><p>  #define TPM1_CH_3

66、 3</p><p>  #define TPM1_CH_4 4</p><p>  #define TPM1_CH_5 5</p><p>  #define TPM2_CH_0 0</p><p>  #define TPM2_CH_1 1</p><p>  void

67、TPMinit(uint8 TPMNo);</p><p>  void SecAdd1(uint8 *p);</p><p><b>  #endif</b></p><p>  3.1.1串行通信子程序</p><p><b>  SCI.c</b></p><p>  

68、#include "SCI.h"</p><p>  void SCIInit(uint8 SCINo, uint8 sysclk, uint16 baud){</p><p>  uint16 ubgs;</p><p><b>  ubgs=0;</b></p><p>  if(SCINo>

69、;2){</p><p><b>  SCINo=2;</b></p><p><b>  }</b></p><p>  ubgs=sysclk*(10000/(baud/100))/16;</p><p>  SCI_BDH(SCINo)=(uint8)((ubgs&0xFF00)>

70、;>8);</p><p>  SCI_BDL(SCINo)=(uint8)(ubgs&0x00FF);</p><p>  SCI_C1(SCINo)=0b00000000;</p><p>  SCI_C2(SCINo)=0b00001100;</p><p><b>  }</b></p>

71、<p>  void SCISend1(uint8 SCINo, uint8 ch) {</p><p>  if(SCINo>2){</p><p><b>  SCINo=2;</b></p><p><b>  }</b></p><p>  while(!(SCI_S1(

72、SCINo)&0b1000000));</p><p>  SCI_D(SCINo)=ch;</p><p><b>  }</b></p><p>  uint8 SCIRe1(uint8 SCINo, uint8 *p) {</p><p><b>  uint16 k;</b><

73、/p><p><b>  uint8 i;</b></p><p>  if(SCINo>2){</p><p><b>  SCINo=2;</b></p><p><b>  }</b></p><p>  for(k=0;k<0xfbbb;

74、k++)</p><p>  if((SCI_S1(SCINo)&0b00100000)!=0){</p><p>  i=SCI_D(SCINo);</p><p><b>  *p=0x00;</b></p><p><b>  break;</b></p><p&g

75、t;<b>  }</b></p><p>  if(k>=0xfbbb){</p><p><b>  i=0xff;</b></p><p><b>  *p=0x01;</b></p><p><b>  }</b></p>&l

76、t;p><b>  return i;</b></p><p><b>  }</b></p><p>  void SCISendN(uint8 SCINo, uint16 n, uint8 ch[]) {</p><p>  uint16 i; </p><p&g

77、t;  if(SCINo>2) {</p><p><b>  SCINo=2;</b></p><p><b>  }</b></p><p>  for(i=0;i<n;i++)</p><p>  SCISend1(SCINo,ch[i]);</p><p>

78、;<b>  }</b></p><p>  uint8 SCIReN(uint8 SCINo, uint16 n, uint8 ch[]) {</p><p><b>  uint16 m;</b></p><p><b>  uint8 fp;</b></p><p>&l

79、t;b>  m=0;</b></p><p>  if(SCINo>2) {</p><p><b>  SCINo=2;</b></p><p><b>  }</b></p><p>  while(m<n) {</p><p>  ch[m

80、]=SCIRe1(SCINo,&fp);</p><p>  if(fp==1) {</p><p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  m++;</b></p><p>&

81、lt;b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  void SCISendString(uint8 SCINo, char *p){</p><p><b>  uint32 k;

82、</b></p><p>  if(SCINo>2) {</p><p><b>  SCINo=2;</b></p><p><b>  }</b></p><p>  if(p==0) return;</p><p>  for(k=0;p[k]!=&#

83、39;\0';++k) {</p><p>  SCISend1(SCINo,p[k]);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  SCI.h</b></p><p>  #if

84、ndef SCI_H</p><p>  #define SCI_H</p><p>  #include "MC9S08AW60.h"</p><p>  #include "Type.h"</p><p>  #define SCI_BDH(x) (*(vuint8 *)(0x00000038+(x

85、-1)*8))</p><p>  #define SCI_BDL(x) (*(vuint8 *)(0x00000039+(x-1)*8))</p><p>  #define SCI_C1(x) (*(vuint8 *)(0x0000003A+(x-1)*8))</p><p>  #define SCI_C2(x) (*(vuint8 *)(0x0000003B

86、+(x-1)*8))</p><p>  #define SCI_S1(x) (*(vuint8 *)(0x0000003C+(x-1)*8))</p><p>  #define SCI_S2(x) (*(vuint8 *)(0x0000003D+(x-1)*8))</p><p>  #define SCI_C3(x) (*(vuint8 *)(0x000000

87、3E+(x-1)*8))</p><p>  #define SCI_D(x) (*(vuint8 *)(0x0000003F+(x-1)*8))</p><p>  #define EnableSCIReInt() SCI1C2 |=(SCI1C2_RIE_MASK)</p><p>  #define DisableSCIReInt() SCI1C2 &

88、=~(SCI1C2_RIE_MASK)</p><p>  #define SCI_NUM_1 1</p><p>  #define SCI_NUM_2 2</p><p>  void SCIInit(uint8 SCINo,uint8 sysclk,uint16 baud);</p><p>  void SCISend1(ui

89、nt8 SCINo,uint8 ch);</p><p>  void SCISendN(uint8 SCINo,uint16 n,uint8 ch[]);</p><p>  uint8 SCIRe1(uint8 SCINo,uint8 *p);</p><p>  uint8 SCIReN(uint8 SCINo,uint16 n,uint8 ch[]);<

90、;/p><p>  void SCISendString(uint8 SCINo,char *p);</p><p><b>  #endif</b></p><p>  3.1.2 LCD子程序</p><p><b>  LCD.c</b></p><p>  #includ

91、e "LCD.h"</p><p>  #include "GPIO.h"</p><p>  void LCDinit(void) {</p><p><b>  uint16 i;</b></p><p>  LCDdataD = 0b11111111;</p>

92、<p>  LCDctrlD1 |= (1 << LcdRS);</p><p>  LCDctrlD1 |= (1 << LcdRW);</p><p>  LCDctrl1 &=~(1 << LcdRS);</p><p>  LCDctrl1 &=~(1 << LcdRW);</p

93、><p>  LCDctrlD2 |= (1 << LcdE);</p><p>  LCDctrl2 |= (1 << LcdE);</p><p>  LCDcommand (0b00111000);</p><p>  LCDcommand (0b00001000);</p><p>  LC

94、Dcommand (0b00000001);</p><p>  for(i=0;i<4000;i++)</p><p>  asm("NOP");</p><p>  LCDcommand (0b00000110);</p><p>  LCDcommand (0b00010100);</p><

95、;p>  LCDcommand (0b00001100);</p><p>  GPIO_Init(LCD_Run_PORT,0,0,0);</p><p><b>  }</b></p><p>  void LCDcommand(uint8 cmd){</p><p><b>  uint16 i;&

96、lt;/b></p><p>  for(i=0;i<1000;i++)</p><p>  asm("NOP");</p><p>  LCDdata=cmd;</p><p>  LCDctrl2 |= (1<<LcdE);</p><p>  asm("NOP

97、");</p><p>  asm("NOP");</p><p>  asm("NOP");</p><p>  LCDctrl2 &=~(1<<LcdE);</p><p>  for(i=0;i<1000;i++)</p><p>  a

98、sm("NOP");</p><p><b>  }</b></p><p>  void LCDshow(uint8 str[]) {</p><p><b>  uint8 i;</b></p><p>  LCDinit();</p><p>  L

99、CDctrl1 &=~(1<<LcdRS);</p><p>  LCDctrl1 &=~(1<<LcdRW);</p><p>  LCDcommand (0b10000000);</p><p>  LCDctrl1 |=1<<LcdRS;</p><p>  LCDctrl1 |=~(

100、1<<LcdRW);</p><p>  for(i=0;i<8;i++) {</p><p>  LCDcommand(str[i]);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  

101、LCD.h</b></p><p>  #ifndef LCD_H</p><p>  #define LCD_H</p><p>  #include "MC9S08AW60.h"</p><p>  #include "Type.h"</p><p>  #inc

102、lude "GeneralFun.h"</p><p>  #define LCDdata PTAD</p><p>  #define LCDdataD PTADD</p><p>  #define LCDctrl1 PTCD</p><p>  #define LCDctrlD1 PTCDD</p>&

103、lt;p>  #define LCDctrl2 PTFD</p><p>  #define LCDctrlD2 PTFDD</p><p>  #define LcdRS 4</p><p>  #define LcdRW 6</p><p>  #define LcdE 6</p><p>  #de

104、fine LCD_Run_PORT PORT_E</p><p>  #define LCD_Run 1</p><p>  void LCDinit(void);</p><p>  void LCDcommand(uint8 cmd);</p><p>  void LCDshow(uint8 str[]);</p>

105、<p>  void LCDshoww(uint8 str[]);</p><p><b>  #endif</b></p><p><b>  第四章 系統(tǒng)測(cè)試</b></p><p><b>  調(diào)試界面截圖:</b></p><p><b>  運(yùn)行界

106、面截圖:</b></p><p><b>  第五章 總結(jié)展望</b></p><p><b>  5.1 總結(jié)</b></p><p>  經(jīng)過(guò)了為期一周半的單片機(jī)課程設(shè)計(jì),首先是對(duì)與飛思卡爾的單片機(jī)系統(tǒng)有了一定的了解。由于之前就做過(guò)幾次的實(shí)驗(yàn),而且以前也上過(guò)C語(yǔ)言的課程。這次的課程設(shè)計(jì),思路很清晰。課程是做

107、一個(gè)基于LCD顯示的計(jì)數(shù)器。在原有LCD液晶程序和計(jì)數(shù)器程序修改的基礎(chǔ)上,經(jīng)過(guò)幾次修改和整理,在結(jié)束之前還是完成了此次的設(shè)計(jì)。LCD上能夠顯示計(jì)數(shù)。這次的課程設(shè)計(jì)不一樣。由于是在原有程序的基礎(chǔ)上修改整合,需要對(duì)原有的程序進(jìn)行一個(gè)整體的了解和深入。這對(duì)與實(shí)際的開(kāi)發(fā)很有幫助。能夠深入了解飛思卡爾的設(shè)計(jì)思路。拓展我們的思路。課程設(shè)計(jì)的內(nèi)容雖然沒(méi)有什么太大的實(shí)際意義。但是,我們能夠了解到實(shí)際開(kāi)發(fā)的一些步驟和思路。對(duì)于以后的工作也很有幫助的吧。每

108、一次的課程設(shè)計(jì),都是一次學(xué)習(xí),都是一次進(jìn)步。</p><p><b>  5.2 展望</b></p><p>  對(duì)于此次課程設(shè)計(jì),我們只是做了一些簡(jiǎn)單的工作。雖然有研究過(guò)飛思卡爾的單片機(jī)程序,但是畢竟自己的知識(shí)能力有限。不可能在短短的一周半時(shí)間太過(guò)于深入。這一周半的時(shí)間,了解了單片機(jī)的很多東西吧。對(duì)自己的要求是,要多動(dòng)手,自己動(dòng)手寫(xiě)代碼學(xué)習(xí)的才更快。對(duì)于編程,看別

109、人的百遍不及自己動(dòng)手寫(xiě)一遍。如果可能,希望完全自己動(dòng)手設(shè)計(jì)一個(gè)計(jì)數(shù)器的程序。</p><p><b>  參考文獻(xiàn)</b></p><p>  【1】王宜懷、張書(shū)奎、王林等著,嵌入式技術(shù)基礎(chǔ)與實(shí)踐,清華大學(xué)出版社</p><p>  【2】譚浩強(qiáng)著,C語(yǔ)言程序設(shè)計(jì)(第四版),北京:清華大學(xué)出版社</p><p>  【3

溫馨提示

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