飛思卡爾單片機(jī)電子鐘課程設(shè)計(jì)_第1頁(yè)
飛思卡爾單片機(jī)電子鐘課程設(shè)計(jì)_第2頁(yè)
飛思卡爾單片機(jī)電子鐘課程設(shè)計(jì)_第3頁(yè)
飛思卡爾單片機(jī)電子鐘課程設(shè)計(jì)_第4頁(yè)
飛思卡爾單片機(jī)電子鐘課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(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、第一章系統(tǒng)概要21.1 系統(tǒng)背景21.2 系統(tǒng)功能3第二章系統(tǒng)硬件設(shè)計(jì)32.1 系統(tǒng)原理圖32.2 單片機(jī)(MCU)模塊42.2.1 MC9S08AW60單片機(jī)性能概述42.2.2 內(nèi)部結(jié)構(gòu)簡(jiǎn)圖52.3 串行通信模塊52.3.1 MAX232引腳圖52.3.2 串行通信的電路原理72.4 液晶顯示模塊8第三章系統(tǒng)軟件設(shè)計(jì)93.1 MCU方(C)程序9串行通信子程序163.1.2 LCD子程序19第四章系統(tǒng)測(cè)試22第五章總結(jié)展望225.1 總結(jié)225.2 展望22參考文獻(xiàn)22第一章 系統(tǒng)概要1.1 系統(tǒng)背景數(shù)字時(shí)鐘,當(dāng)我們聽(tīng)到這幾個(gè)字時(shí),第一反應(yīng)就是我們所說(shuō)的數(shù)字,不錯(cuò)數(shù)字鐘就是以數(shù)字顯示取代模

2、擬表盤(pán)的鐘表,在顯示上它用數(shù)字反應(yīng)出此時(shí)的時(shí)間,相比模擬鐘能給人一種一目了然的感覺(jué),不僅如此它還能同時(shí)顯示時(shí)、分、秒。而且能對(duì)時(shí)、分、秒準(zhǔn)確校時(shí),這是普通鐘所不及的。由于單片機(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)域。1.2 系統(tǒng)功能在實(shí)驗(yàn)箱上有一個(gè)啟動(dòng)鍵,當(dāng)按下啟動(dòng)鍵給以一個(gè)低電平,電子時(shí)鐘從當(dāng)前設(shè)定值開(kāi)始走時(shí)。按秒刷新,要求在LCD屏上顯示。若按啟動(dòng)鍵給以

3、高電平,則時(shí)間暫停,再按,時(shí)間繼續(xù)按秒刷新。第二章 系統(tǒng)硬件設(shè)計(jì)2.1 系統(tǒng)原理圖該系統(tǒng)由AW60最小系統(tǒng)電路為主要結(jié)構(gòu),利用串口進(jìn)行數(shù)據(jù)的控制與采集。首先將開(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)定電流。2.2 單

4、片機(jī)(MCU)模塊MC9S08AW60單片機(jī)性能概述(1)最高達(dá)40MHz的CPU工作頻率和20Hz的內(nèi)部總線工作頻率表;時(shí)鐘源選項(xiàng)包括晶振、諧振器、外部時(shí)鐘或內(nèi)部產(chǎn)生的時(shí)鐘。(2)相比HC08 CPU指令集,S08 CPU增加了BGND指令。(3)單線后臺(tái)調(diào)試模式接口;增強(qiáng)的斷點(diǎn)能力,允許單一的斷點(diǎn)設(shè)置在線調(diào)試(在片內(nèi)調(diào)試的模塊增加了多于兩個(gè)的斷點(diǎn))。(4)內(nèi)含32個(gè)中斷/復(fù)位源;內(nèi)含2KB的片內(nèi)RAM;內(nèi)含60KB的片內(nèi)在線可編程Flash存儲(chǔ)器,帶有塊保護(hù)和安全選項(xiàng)。(5)可選的計(jì)算機(jī)正常操作(COP)復(fù)位;低電壓檢測(cè)和復(fù)位或中斷;非法操作碼檢測(cè)與復(fù)位;非法地址檢測(cè)與復(fù)位。(6)ADC:

5、多達(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模塊。(7)Timers:1個(gè)2通道和1個(gè)6通道16位定時(shí)器/脈沖寬度調(diào)制器模板。具有輸入、捕捉、輸出比較、脈寬調(diào)制功能。 內(nèi)部結(jié)構(gòu)簡(jiǎn)圖1. 內(nèi)部結(jié)構(gòu)簡(jiǎn)圖如圖所示,給出了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的基本原理。從內(nèi)部結(jié)構(gòu)圖可以看出,AW60主要有以下幾個(gè)部分:S08 C

6、PU、存儲(chǔ)器、定時(shí)器接口模塊、定時(shí)器模塊、看門(mén)狗模塊、通用IO模塊、串口通信模塊(SCI)、串行外設(shè)接口(SPI)模塊、I2C(IIC)模塊、A/D轉(zhuǎn)換模塊、鍵盤(pán)中斷模塊、時(shí)鐘發(fā)生模塊、復(fù)位與中斷模塊等。2.3 串行通信模塊 MAX232引腳圖在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)換。如圖所示,給出了MAX2

7、32的引腳說(shuō)明。各引腳含義簡(jiǎn)要說(shuō)明如下:Vcc(16腳):正電源端,一般接+5V。 GND(15腳):地。VS+(2腳):VS+=2VCC-1.5V=8.5V。 VS-(6腳):VS-=-2VCC-1.5V=-11.5V。 C2+、C2-(4、5腳):一般接1F的電解電容。表 MAX232芯片輸入輸出引腳分類(lèi)與基本接法組別TTL電平引腳方向典型接口232電平引腳方向典型接口111(T1IN)12(R1OUT)輸入輸出接MCU的TxD接MCU的RxD1314輸入輸出連接到接口,與其它設(shè)備通過(guò)232相接210(T2IN)9(R2OUT)輸入輸出接MCU的TxD接MCU的RxD87輸入輸出連接到接口

8、,與其它設(shè)備通過(guò)232相接 C1+、C1-(1、3腳):一般接1F的電解電容。在正常情況下,(1)T1IN=5V,則T1OUT=-9V;T1IN=0V,則T1OUT=9V。(2)將R1IN與T1OUT相連,令T1IN=5V,則R1OUT=5V;令T1IN=0V,則R1OUT=0V。 MAX232芯片進(jìn)行電平轉(zhuǎn)換的基本原理:(1)發(fā)送過(guò)程: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電

9、平被“降低”為T(mén)TL電平,經(jīng)過(guò)12腳(R1OUT送到MCU的RxD,進(jìn)入MCU內(nèi)部。2.3.2 串行通信的電路原理從基本原理的角度看,串行通信接口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è)。而SCI數(shù)據(jù)寄存器存放要發(fā)送的數(shù)據(jù),也存放接受的數(shù)據(jù),這并不沖突,因?yàn)榘l(fā)

10、送與接收的實(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ù)寄存器”中就可以了,剩下的工作由MCU自動(dòng)完成:將數(shù)據(jù)從“SCI數(shù)據(jù)寄存器”送到“發(fā)送移位寄存器”,硬件驅(qū)動(dòng)將“發(fā)送移位寄存器”的數(shù)據(jù)一位一位地按照規(guī)定的波特率移到發(fā)送引腳TxD,供對(duì)方接收。接收時(shí),數(shù)據(jù)一位一位地從接收引腳RxD進(jìn)入“接收移位寄存器”

11、,當(dāng)收到一個(gè)完成字節(jié)時(shí),MCU會(huì)自動(dòng)將數(shù)據(jù)送入“SCI數(shù)據(jù)寄存器”,并將狀態(tài)寄存器的相應(yīng)位改變,供程序員判定并取出數(shù)據(jù)。2.4 液晶顯示模塊LCD(YM1602C)16151413121110090807060504030201Core2LCD_D7LCD_D6LCD_D5LCD_D4LCD_D3LCD_D2LCD_D1LCD_D0LCD_ELCD_RWLCD_RSVccGNDPTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0PTF6PTC6PTC4AW60MCU控制液晶顯示接口接線圖點(diǎn)陣字符型LCD是專門(mén)用于顯示數(shù)字、字母、圖形符號(hào)及少量自定義符號(hào)的液晶顯示器。這類(lèi)顯示器把LC

12、D控制器、點(diǎn)陣驅(qū)動(dòng)器、字符存儲(chǔ)器、顯示體及少量的阻容元件等集成一個(gè)液晶顯示模塊。鑒于字符型液晶顯示模塊目前在國(guó)際上已經(jīng)規(guī)范化,其電特性及接口特性是統(tǒng)一的,因此,只要設(shè)計(jì)出一種型號(hào)的接口電路,在指令上稍加修改即可使用各種規(guī)格的字符型液晶顯示模塊。 點(diǎn)陣字符型液晶顯示模塊的控制器大多數(shù)為日立公司生產(chǎn)的HD44780及其兼容的控制電路,如SED1278(SEIKO EPSON)、KS0066(SAMSUNG)、NJU6408(NER JAPANRADIO)等。字符型液晶顯示模塊的主要特點(diǎn)如下:1. 液晶顯示屏是以若干5*8或5*11點(diǎn)陣塊組成的顯示字符群。每個(gè)點(diǎn)陣塊為一個(gè)字符位,字符間距和行距都為一

13、個(gè)點(diǎn)的寬度。2. 主控制電路為HD44780(HITACHI)及其他公司的兼容電路。從程序員的角度來(lái)說(shuō),LCD的顯示接口與編程是面向HD44780的,只要了解HD44780的編程結(jié)構(gòu)即可進(jìn)行LCD的顯示編程。3. 內(nèi)部具有字符發(fā)生器ROM,可顯示192種字符(160個(gè)5*7點(diǎn)陣字符和32個(gè)5*10點(diǎn)陣字符)。4. 具有64字節(jié)的字符發(fā)生器RAM,可以定義8個(gè)5*8點(diǎn)陣字符或4個(gè)5*11點(diǎn)陣字符。5. 具有64字節(jié)的數(shù)據(jù)顯示RAM,供顯示編程時(shí)使用6. 標(biāo)準(zhǔn)接口特性,與MC9S08系列MCU容易接口。7. 模塊結(jié)構(gòu)緊湊、輕巧、裝配容易。8. 單+5V電源供電(寬溫型需要加-7V驅(qū)動(dòng)電源)。9.

14、低功耗、高可靠性。第三章 系統(tǒng)軟件設(shè)計(jì)3.1 MCU方(C)程序#include Includes.h#include LCD.h#include SCI.h#include timer.h#include GPIO.h/在此添加全局變量定義 uint8 g_time8; void main(void) uint8 g_DispalyInit=00:00:00; uint8 remember; uint32 mRuncount=0; uint8 i; uint8 m; int n=1;/1 關(guān)總中斷 DisableInterrupt(); /禁止總中斷 /2 芯片初始化 MCUInit();/

15、3 模塊初始化 Light_Init(Light_Run_PORT,Light_Run,Light_OFF); LCDinit(); TPMinit(TPM_NUM_1); SCIInit(SCI_NUM_1,SYSTEM_CLOCK,9600);/定時(shí)器/內(nèi)存初始化 g_time0=0; g_time1=0; g_time2=:; g_time3=0; g_time4=0; g_time5=:; g_time6=0; g_time7=0; remember=g_time7;/開(kāi)放中斷/LCD LCDshow(g_DispalyInit); while(n) if(GPIO_Get(LCD_R

16、un_PORT,0)=LCD_Run) remember = g_time7; n = 0; EnableSCIReInt(); EnableInterrupt(); EnabletimerInt(TPM_NUM_1); /4 主循環(huán) while (!n) if(g_time7!=remember) for(i=0;i 2) TPMNo = 2; else if(TPMNo =10) *(p+7) = 0; *(p+6)+=1; if(*(p+6)=6) *(p+6) = 0; *(p+4)+=1; if(*(p+4)=10) *(p+4) = 0; *(p+3)+=1; if(*(p+3)=

17、6) *(p+3) = 0; *(p+1)+=1; if(*(p+1)=9) *(p+1) = 0; *p+=1; if(*p*10+*(p+1)=24) *p = 0; *(p+1) = 0; #ifndef timeR_H#define timeR_H#include MC9S08AW60.h#include Type.h#define TPM_CSTR(x)(*(vuint8 *)(0x00000020+(x-1)*64)#define TPM_CNTH(x)(*(vuint8 *)(0x00000021+(x-1)*64)#define TPM_CNTL(x)(*(vuint8 *)(

18、0x00000022+(x-1)*64)#define TPM_MODH(x)(*(vuint8 *)(0x00000023+(x-1)*64)#define TPM_MODL(x)(*(vuint8 *)(0x00000024+(x-1)*64)#define EnabletimerInt(x) TPM_CSTR(x) |= TPM1SC_TOIE_MASK#define DisabletimerInt(x) TPM_CSTR(x) &=TPM1SC_TOIE_MASK#define TPM_NUM_1 1#define TPM_NUM_2 2#define TPM1_CH_0 0#defi

19、ne TPM1_CH_1 1#define TPM1_CH_2 2#define TPM1_CH_3 3#define TPM1_CH_4 4#define TPM1_CH_5 5#define TPM2_CH_0 0#define TPM2_CH_1 1void TPMinit(uint8 TPMNo);void SecAdd1(uint8 *p);#endif串行通信子程序#include SCI.hvoid SCIInit(uint8 SCINo, uint8 sysclk, uint16 baud) uint16 ubgs; ubgs=0; if(SCINo2) SCINo=2; ub

20、gs=sysclk*(10000/(baud/100)/16; SCI_BDH(SCINo)=(uint8)(ubgs&0xFF00)8); SCI_BDL(SCINo)=(uint8)(ubgs&0x00FF); SCI_C1(SCINo)=0b00000000; SCI_C2(SCINo)=0b00001100;void SCISend1(uint8 SCINo, uint8 ch) if(SCINo2) SCINo=2; while(!(SCI_S1(SCINo)&0b1000000); SCI_D(SCINo)=ch;uint8 SCIRe1(uint8 SCINo, uint8 *p

21、) uint16 k; uint8 i; if(SCINo2) SCINo=2; for(k=0;k=0xfbbb) i=0xff; *p=0x01; return i;void SCISendN(uint8 SCINo, uint16 n, uint8 ch) uint16 i; if(SCINo2) SCINo=2; for(i=0;i2) SCINo=2; while(m2) SCINo=2; if(p=0) return; for(k=0;pk!=0;+k) SCISend1(SCINo,pk); #ifndef SCI_H #define SCI_H #include MC9S08A

22、W60.h #include Type.h #define SCI_BDH(x) (*(vuint8 *)(0x00000038+(x-1)*8) #define SCI_BDL(x) (*(vuint8 *)(0x00000039+(x-1)*8) #define SCI_C1(x) (*(vuint8 *)(0x0000003A+(x-1)*8) #define SCI_C2(x) (*(vuint8 *)(0x0000003B+(x-1)*8) #define SCI_S1(x) (*(vuint8 *)(0x0000003C+(x-1)*8)#define SCI_S2(x) (*(v

23、uint8 *)(0x0000003D+(x-1)*8)#define SCI_C3(x) (*(vuint8 *)(0x0000003E+(x-1)*8)#define SCI_D(x) (*(vuint8 *)(0x0000003F+(x-1)*8)#define EnableSCIReInt() SCI1C2 |=(SCI1C2_RIE_MASK)#define DisableSCIReInt() SCI1C2 &=(SCI1C2_RIE_MASK)#define SCI_NUM_1 1#define SCI_NUM_2 2void SCIInit(uint8 SCINo,uint8 s

24、ysclk,uint16 baud);void SCISend1(uint8 SCINo,uint8 ch);void SCISendN(uint8 SCINo,uint16 n,uint8 ch);uint8 SCIRe1(uint8 SCINo,uint8 *p);uint8 SCIReN(uint8 SCINo,uint16 n,uint8 ch);void SCISendString(uint8 SCINo,char *p);#endif LCD子程序#include LCD.h#include GPIO.h void LCDinit(void) uint16 i; LCDdataD

25、= 0b11111111; LCDctrlD1 |= (1 LcdRS); LCDctrlD1 |= (1 LcdRW); LCDctrl1 &=(1 LcdRS); LCDctrl1 &=(1 LcdRW); LCDctrlD2 |= (1 LcdE); LCDctrl2 |= (1 LcdE); LCDcommand (0b00111000); LCDcommand (0b00001000); LCDcommand (0b00000001); for(i=0;i4000;i+) asm(NOP); LCDcommand (0b00000110); LCDcommand (0b0001010

26、0); LCDcommand (0b00001100); GPIO_Init(LCD_Run_PORT,0,0,0); void LCDcommand(uint8 cmd) uint16 i; for(i=0;i1000;i+) asm(NOP); LCDdata=cmd; LCDctrl2 |= (1LcdE); asm(NOP); asm(NOP); asm(NOP); LCDctrl2 &=(1LcdE); for(i=0;i1000;i+) asm(NOP); void LCDshow(uint8 str) uint8 i; LCDinit(); LCDctrl1 &=(1LcdRS)

27、; LCDctrl1 &=(1LcdRW); LCDcommand (0b10000000); LCDctrl1 |=1LcdRS; LCDctrl1 |=(1LcdRW); for(i=0;i8;i+) LCDcommand(stri); #ifndef LCD_H#define LCD_H#include MC9S08AW60.h#include Type.h#include GeneralFun.h#define LCDdata PTAD#define LCDdataD PTADD#define LCDctrl1 PTCD#define LCDctrlD1 PTCDD#define LCDctrl2 PTFD#define LC

溫馨提示

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