基于msp430的安保系統(tǒng)設(shè)計與實現(xiàn)_第1頁
已閱讀1頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  1 概述</b></p><p><b>  1.1 技術(shù)背景</b></p><p>  近年來盜竊、入室搶劫財物的現(xiàn)象日益嚴(yán)重,社會治安涉及到每個人的切身利益,現(xiàn)階段民居和樓宇的安全現(xiàn)狀不容樂觀,樓宇安檢領(lǐng)域產(chǎn)品的需求日益增加。目前市場上生產(chǎn)企業(yè)的智能安檢電子產(chǎn)品的產(chǎn)品種類繁多,它們的特點是功能強大,但是價格

2、昂貴、體積大、操作維護(hù)復(fù)雜。所以,目前在國內(nèi)大多數(shù)家庭都沒有配置實用的樓宇安檢設(shè)備。</p><p><b>  1.2 選題意義</b></p><p>  針對上述原因,我們設(shè)計了一種基于MSP430單片機的智能樓宇安檢系統(tǒng)。其原理是:利用紅外傳感器現(xiàn)場監(jiān)控,并通過異常數(shù)據(jù)信號無線傳輸,送至MSP430單片機進(jìn)行數(shù)據(jù)處理、分析及存儲。對檢測到的異常信號發(fā)出報警,

3、提醒用戶進(jìn)行處理。它采用無線遙傳技術(shù),安裝操作也極為方便。本設(shè)計定位是小型應(yīng)用領(lǐng)域,非常適合家庭安保應(yīng)用。設(shè)計實現(xiàn)了多路實時監(jiān)測功能、異常記錄及回放功能以及人性化的人機對話方式、液晶顯示和語音提示。</p><p>  基于目前普通家庭對安全技術(shù)的迫切需求,其市場需求將十分龐大。如果對其進(jìn)行商業(yè)化運作,必定能夠產(chǎn)生巨大的社會效益和經(jīng)濟(jì)效益。</p><p><b>  1.3

4、功能</b></p><p>  多路巡回、實時監(jiān)測功能。</p><p>  異常事件顯示、提示功能。</p><p>  異常事件時間、次數(shù)記錄及回放功能。</p><p>  精密時鐘及時鐘調(diào)整功能。</p><p>  紅外檢測及信號調(diào)理功能。</p><p>  數(shù)據(jù)編碼、

5、調(diào)制、無線遙傳及解碼功能。</p><p>  語音提示及音量鍵控功能。</p><p><b>  2 方案設(shè)計</b></p><p>  2.1 信號流程圖</p><p>  圖2-1 信號流程圖</p><p>  原理說明:信號采集單元是將有紅外傳感器感應(yīng)到的模擬信號經(jīng)過信號處理

6、單元將模擬信號轉(zhuǎn)換為主控單元需要的矩形脈沖,主控單元對信號進(jìn)行計算等處理,再將結(jié)果顯示出來。</p><p>  2.2 整體結(jié)構(gòu)框圖</p><p>  圖2-2 檢測、編碼及發(fā)射單元</p><p>  圖2-3 接收、解碼及主控單元</p><p><b>  原理說明:</b></p><p

7、>  本系統(tǒng)由兩部分組成:檢測、編碼、發(fā)射單元和接收、解碼、主控單元。</p><p>  圖2-2中,分布在多個監(jiān)測點的熱釋電傳感器,檢測人體信號,經(jīng)信號調(diào)理、整形、數(shù)據(jù)編碼,而后通過射頻調(diào)制并發(fā)送,實現(xiàn)數(shù)據(jù)遙測、遙傳。</p><p>  圖2-3中,接收模塊接收各監(jiān)測點的遙傳數(shù)據(jù)信號,經(jīng)放大、整形后,送至PT2272解碼模塊,解碼后的數(shù)據(jù)信號送至主控單元,MCU掃描、分析各測點

8、狀態(tài),并對異常事件進(jìn)行處理,包括:狀態(tài)漢顯、語音提示、事件時間、次數(shù)記錄等功能。</p><p>  本系統(tǒng)人機對話采用TI公司的微功耗16位單片機—MSP430系列芯片,其它大部分外圍電路,如電源模塊、放大器、基準(zhǔn)電源、通訊模塊(485)等也采用TI公司產(chǎn)品,另外,還有其它外圍電路,如LCD、時鐘、語音、功放等模塊,構(gòu)成主控單元,實現(xiàn)強大的工業(yè)測控功能。</p><p>  本機人機對話

9、采用鍵盤、LCD漢字顯示和語音提示方式,方便且極具人性化。</p><p>  2.3 主控單元連接圖</p><p>  我所完成的是主控單元的軟件設(shè)計,其連接圖如下:</p><p>  圖2-4 主控單元框圖</p><p><b>  原理說明:</b></p><p>  主控單元的

10、核心部件是MSP430F247單片機。由硬件電路處理好的矩形脈沖信號從MSP430F247單片機的端口輸入,MSP430F247單片機對矩形脈沖信號進(jìn)行處理。所完成的功能有:</p><p>  檢測異常信號,顯示發(fā)生的時間和次數(shù),發(fā)出語音提示報警,并存儲在單片機的FLASH內(nèi)。</p><p>  通過鍵盤操作,可以查看異常信號發(fā)生的時間和次數(shù),還可以清除這些信息,并且能設(shè)置時間和更改音

11、量的大小。</p><p>  MSP430F2XX介紹</p><p>  MSP430F2XX的時鐘模塊</p><p><b>  時鐘輸入源:</b></p><p>  MSP430F157基礎(chǔ)時鐘模塊有3個時鐘輸入源:</p><p> ?。?)LFXT1CLK:低頻/高頻時鐘源。&l

12、t;/p><p>  可以外接32768Hz的時鐘芯片或頻率為450kHz~8MHz的標(biāo)準(zhǔn)晶體或共振器。</p><p> ?。?)XT2CLK: 高頻時鐘源。</p><p>  需要外接兩個震蕩電容器??梢酝饨宇l率為450kHz~8MHz的標(biāo)準(zhǔn)晶體、共振器和外部時鐘輸入。較常用的晶體振蕩器是8MHz的。</p><p> ?。?)DCOCL

13、K: 內(nèi)部數(shù)字可控制的RC振蕩器。</p><p><b>  時鐘信號:</b></p><p>  MSP430單片機時鐘模塊提供3個時鐘信號以供給片內(nèi)各部電路使用,這3個時鐘信號分別是:</p><p> ?。?)ACLK: 輔助時鐘信號。</p><p>  ACLK是從LFXT1CLK信號由1/2/4/8分

14、頻器分頻后所得到的。有BCSCTL1寄存器設(shè)置DIVA相應(yīng)位來決定分頻因子。ACLK可提供給CPU外圍功能模塊作時鐘信號使用。</p><p> ?。?)MCLK: 主時鐘信號。</p><p>  MCLK是由3個時鐘源所提供的。它們分別是:LFXT1CLK、XT2CLK和DCO時鐘源信號。MCLK主要用于MCU和相關(guān)系統(tǒng)模塊作時鐘。同樣可設(shè)置相關(guān)寄存器來決定分頻因子及相關(guān)的設(shè)置。&l

15、t;/p><p>  (3)SMCLK: 子系統(tǒng)時鐘。</p><p>  SMCLK由2個時鐘源信號提供,它們分別是XT2CLK和DCO。同樣可設(shè)置相關(guān)寄存器來決定分頻因子及相關(guān)的設(shè)置。</p><p>  當(dāng)微處理器發(fā)生PUC復(fù)位后,MCLK和SMCLK配置為DCO時鐘模塊(默認(rèn)值為800kHz),ACLK配置為LFXT1時鐘模塊,并且為低頻模式。修改DCOCTL

16、、BCSCTL1和BCSCTL2寄存器的值,可以對系統(tǒng)和各個模塊的時鐘進(jìn)行設(shè)置。</p><p><b>  基本定時器</b></p><p>  所有的MSP430F2XX系列都有一個基本定時器,它由兩個8位的計數(shù)器組成。這兩個8為的計數(shù)器也可以級聯(lián)成一個16位的計數(shù)器?;径〞r器不僅可以向液晶模塊提供分時信號,還可以產(chǎn)生低頻時間間隔中斷。由于基本定時器沒有默認(rèn)狀

17、態(tài),所以在使用之前必需正確設(shè)置基本定時器的控制寄存器BTCTL以及計數(shù)器1和計數(shù)器2,才能保證基本定時器的正常工作。</p><p><b>  定時器A工作原理</b></p><p>  TIMER_A寄存器</p><p> ?。?)TACTL 控制寄存器。</p><p>  TACTL各位的定義如下:</

18、p><p>  SSEL1,SSEL0:選擇定時器進(jìn)入輸入分頻器的時鐘源。</p><p>  00 輸入時鐘源為TACLK,用特定的外部引腳信號;</p><p>  01 輸入時鐘源為ACLK,用輔助時鐘;</p><p>  10 輸入時鐘源為MCLK,用系統(tǒng)時鐘;</p><p>  11 輸入時鐘

19、源為INCLK。</p><p>  ID1,ID0:輸入分頻選擇。</p><p><b>  00 不分頻;</b></p><p><b>  01 2分頻;</b></p><p><b>  10 4分頻;</b></p><p>

20、<b>  11 8分頻。</b></p><p>  MC1,MC0:計數(shù)模式控制位。</p><p><b>  00 停止模式;</b></p><p>  01 增計數(shù)模式;</p><p>  10 連續(xù)計數(shù)模式;</p><p>  11 增/減計數(shù)模

21、式。</p><p> ?。?)TAR 16為計數(shù)器。</p><p> ?。?)CCTLx 捕獲/比較控制寄存器。</p><p>  該寄存器各位定義如下:</p><p>  CM1~0:選擇捕獲模式。</p><p><b>  00禁止捕獲模式;</b></p>&l

22、t;p><b>  01上升沿捕獲;</b></p><p><b>  10下降沿捕獲;</b></p><p>  11上升沿與下降沿都捕獲。</p><p>  CCIS1~0:在捕獲模式中用來定義提供捕獲事件的輸入源。</p><p><b>  選擇CCIxA;</b

23、></p><p><b>  選擇CCIxB;</b></p><p><b>  選擇GND;</b></p><p><b>  選擇Vcc。</b></p><p>  SCS:選擇捕獲信號與定時時鐘同步、異步關(guān)系。</p><p><

24、;b>  異步捕獲;</b></p><p><b>  同步捕獲。</b></p><p>  CAP:選擇捕獲模式還是比較模式。</p><p><b>  比較模式;</b></p><p><b>  捕獲模式。</b></p><

25、p>  CCIEx:捕獲/比較模塊中斷允許位。</p><p><b>  禁止中斷;</b></p><p><b>  允許中斷。</b></p><p>  CCIFGx:捕獲比較中斷標(biāo)志。</p><p>  捕獲模式:寄存器CCRx捕獲了定時器TAR值時置位。</p>

26、<p>  比較模式:定時器TAR值等于寄存器CCRx值時置位。</p><p> ?。?)CCRx 捕獲/比較寄存器</p><p>  在捕獲方式,當(dāng)滿足捕獲條件,硬件自動將計數(shù)器TAR數(shù)據(jù)寫入該寄存器。其中CCR0經(jīng)常用作周期寄存器。</p><p><b>  捕獲/比較模塊</b></p><p> 

27、 TIMER_A有多個相同的捕獲/比較模塊,為實時處理提供靈活的手段,每個模塊都可用于捕獲事件發(fā)生的時間或產(chǎn)生定時間隔。當(dāng)捕獲/比較模塊共有兩種模式:捕獲模式和比較模式。本系統(tǒng)主要用捕獲模式。當(dāng)CCTLx中的CAPx=1,該模塊工作在捕獲模式。這時如果在選定的引腳上發(fā)生設(shè)定的脈沖觸發(fā)沿(上升沿、下降沿或任意跳變),則MSP430會通過硬件自動將計數(shù)器TAR中的值寫入到CCRx中。每個捕獲/比較寄存器都能被軟件用于時間標(biāo)記,可用于各種目的

28、。如果是周期信號,則兩次上升沿或者兩次下降沿之間的時間即為信號的周期,上升沿和下降沿之間的時間則為信號的脈寬(高電平或者低電平的時間長度)。還可以測量軟件程序所用時間、測量硬件事件之間的時間、測量系統(tǒng)頻率。當(dāng)捕獲完成后,中斷標(biāo)志位CCIFGx被置位。如果總的中斷允許位GIE允許,相應(yīng)的中斷允許位CCIEx也允許,則將產(chǎn)生中斷請求。</p><p>  3 各功能模塊程序設(shè)計</p><p&g

29、t;  3.1 總體程序流程圖及原理說明</p><p>  圖3-1 總體程序流程圖</p><p>  系統(tǒng)接通電源后就進(jìn)行系統(tǒng)初始化,包括關(guān)閉看門狗,系統(tǒng)時鐘初始化、端口初始化、LCD初始化,外設(shè)時鐘初始化。初始化完成后進(jìn)入主環(huán)路延時,當(dāng)接到上位機的開始信號時,時鐘、AD開始工作,AD采樣頻率由時鐘決定,每到一個時鐘中斷,AD采一個點,將采到的數(shù)據(jù)發(fā)送到單片機內(nèi),系統(tǒng)開始逐步檢測

30、4路信號是否異常。當(dāng)有異常信號出現(xiàn),系統(tǒng)把每路異常信號發(fā)生的時間、次數(shù)記錄到單片機的FLASH內(nèi)。完成后可以進(jìn)行模式操作、功能操作、增值減值操作等。各操作都有對應(yīng)的子程序及其流程圖。當(dāng)接收到上位機的結(jié)束信號時,時鐘、AD停止工作。</p><p>  3.2 初始化模塊 </p><p>  3.2.1 初始化總體流程及說明</p><p>  3-2 初始

31、化流程圖</p><p><b>  初始化原理說明:</b></p><p>  系統(tǒng)接通電源后就進(jìn)行系統(tǒng)初始化,包括關(guān)閉看門狗,系統(tǒng)時鐘初始化、端口初始化、FLASH初始化,外設(shè)時鐘初始化。</p><p><b>  初始化程序:</b></p><p>  void main(void)&l

32、t;/p><p>  { WDTCTL=WDTPW+WDTHOLD; //關(guān)狗 </p><p>  run_xt2(); //時鐘初始化 </p><p>  port_in

33、it(); //端口初始化</p><p>  LcdInit0(); //lcd初始化</p><p>  InitSys(); //FLASH初始化</p><p>  fflash_init();</p><p><b>  }</b>

34、</p><p>  3.2.2 系統(tǒng)時鐘初始化模塊程序及說明</p><p>  本系統(tǒng)選擇的時鐘源工作模式為:使用XT2振蕩器,MCLK選擇使用XT2CLK,SMCLK選擇使用XT2CLK </p><p>  根據(jù)本系統(tǒng)要求,設(shè)置相應(yīng)控制字,其時鐘初始化函數(shù)如下</p><p>  void run_xt2(void)</p&g

35、t;<p><b>  { </b></p><p>  unsigned char i; </p><p>  BCSCTL1 &= ~XT2OFF; //打開XT2振蕩器</p><p><b>  do </b></p><p><

36、;b>  {</b></p><p>  IFG1 &= ~OFIFG; //清除振蕩器失效標(biāo)志</p><p>  for (i = 0xFF; i > 0; i--); //延時,等待XT2起振 </p><p><b>  }</b></p>

37、;<p>  while ((IFG1 & OFIFG) != 0); //判斷XT2是否起振 </p><p>  BCSCTL2 |= SELM1+SELS; // MCLK = SMCLK = XT2 (safe)</p><p><b>  }</b></p><p><b> 

38、 端口初始化模塊程序</b></p><p>  端口初始化設(shè)置各端口是輸出還是輸入,輸出高電平還是低電平。</p><p>  void port_init(void)</p><p><b>  {</b></p><p>  P1DIR|=BIT1+BIT2+BIT3; </p><

39、p>  P1DIR&=~BIT4;</p><p>  P1DIR&=~BIT0;</p><p>  P1OUT|=BIT1+BIT2+BIT3;</p><p>  P2DIR&=0x40;//p2.0 p2.1 p2.2 p2.3,p2.4 p2.5 p2.7為輸出口</p><p>  P2OUT=0x0

40、0;</p><p>  P3DIR|=BIT1; </p><p>  P4DIR=0xFF; </p><p>  P4OUT=0x00;</p><p>  P5DIR|=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6;</p><p>  P5DIR&=~BIT7;</p

41、><p>  P5OUT=0x00;</p><p>  P6DIR|=BIT0+BIT3+BIT4+BIT5+BIT6+BIT7;</p><p>  P6DIR&=~BIT2;</p><p>  P6DIR&=~BIT1;</p><p>  P6OUT=0X00; </p><

42、p><b>  }</b></p><p>  FLASH初始化程序</p><p>  說明:讀OX10B8中的信息給ho,給FLASH賦初始值0</p><p><b>  程序代碼片段如下:</b></p><p>  void fflash_init(void)</p>

43、<p><b>  { </b></p><p>  unsigned char ho[7];</p><p>  read_SegA1( ho, 0X10b8);</p><p>  n1=ho[0]; n2=ho[1]; n3=ho[2]; n4=ho[3];</p><p>  if(n1==0xff

44、) n1=0;</p><p>  if(n2==0xff) n2=0;</p><p>  if(n3==0xff) n3=0;</p><p>  if(n4==0xff) n4=0;</p><p><b>  }</b></p><p>  定時器A初始化程序及說明</p>

45、<p>  說明:本系統(tǒng)采用TIMER_A中的捕獲/比較寄存器CCR0,需要設(shè)置的工作方式有:TIMER_A的輸入時鐘源選為輔助時鐘ACLK,計數(shù)模式選為連續(xù)計數(shù)模式。捕獲模式選為下降沿捕獲,提供捕獲事件的輸入源為CCI0B,同步捕獲,捕獲模式,允許中斷。按此要求設(shè)定TIMER_A中CCR0控制寄存器TACTL和捕獲/比較控制寄存器CCTL0,其初始化函數(shù)如下</p><p>  void timerA

46、_init(void)</p><p><b>  {</b></p><p>  TACTL = TASSEL1 + TACLR+ID_3; // SELECT MCLK, clear TAR 8分頻</p><p>  CCTL0 = CCIE; // CCR0 interrupt enabled&

47、lt;/p><p>  CCR0 = 50000; //中斷時間為50ms(TBCCR0/XT2) </p><p>  TACTL|= MC0; // Start Timer_A in continuous mode</p><p><b>  }</b></p>

48、<p>  3.3 異常檢測處理模塊流程圖及原理說明</p><p><b>  流程圖:</b></p><p>  圖3-3 異常檢測流程圖</p><p>  原理說明:當(dāng)有異常信號被檢測到,四路紅外傳感器就開始逐一檢測,并對檢測到的信號進(jìn)行處理。</p><p><b>  異常檢測程

49、序片段:</b></p><p>  { p2h_value=p2hReadKey(); //</p><p>  switch (p2h_value)</p><p>  {case p2_4SMW:WriteCommand(0x01);p_4way();//*****四路檢測

50、 break;</p><p>  case p2_5SMW:WriteCommand(0x01);p_3way();//*****三路檢測 break;</p><p>  case p2_7SMW:WriteCommand(0x01);p_1way();//***一路檢測 bre

51、ak; </p><p>  default: break;} </p><p>  p1h_value=p1hReadKey();</p><p>  if (p1h_value==p1_4SMW) {WriteCommand(0x01);p_2way();}</p><p>  } </p

52、><p>  3.4 主環(huán)路操作模塊流程圖及原理說明</p><p><b>  流程圖:</b></p><p>  說明:沒有異常信號被檢測到時</p><p>  就可以進(jìn)行模式、功能、增值、</p><p>  減值等操作,然后就會到正常檢測</p><p><

53、b>  程序片段:</b></p><p>  p2l_value=p2lReadKey(); //檢測,有鍵按下并松開,返回一個鍵值.</p><p>  switch (p2l_value) //對鍵值進(jìn)行處理.采switch語法結(jié)構(gòu)查詢</p><p><b>  {</b></p><p>  

54、case p2_0SMW:mod_op(); //p2.0 模式 鍵按下 </p><p><b>  break;</b></p><p>  case p2_1SMW:fun_op(); //p2.1 功能 鍵按下 </p><p><b>  break;<

55、/b></p><p>  case p2_2SMW:inc_op();//p2.2 “+” 鍵按下</p><p><b>  break;</b></p><p>  case p2_3SMW:dec_op();//p2.3 “—” 鍵按下</p><p><b>  break;</b&g

56、t;</p><p>  default:break;//調(diào)用默認(rèn)處理程序4</p><p><b>  }</b></p><p>  圖3-4 主環(huán)路操作流程圖</p><p>  3.5 模式操作模塊流程圖及原理說明</p><p><b>  操作模式流程圖:</b>

57、;</p><p>  圖3-5 操作模式流程圖</p><p><b>  操作模式原理說明:</b></p><p>  只要四路傳感器都沒有異常信號,可以進(jìn)行模式操作。經(jīng)過10MS的延時后,判斷P2.0是否為0,當(dāng)P2.0為0進(jìn)入下一步操作。首先置模式位,同時模式計數(shù)器加1,然后判斷模式計數(shù)器的值并根據(jù)其進(jìn)行相應(yīng)的操作。操作如下:<

58、;/p><p>  模式計數(shù)器計數(shù)值為1:置檢查位;檢查顯示;語音提示</p><p>  模式計數(shù)器計數(shù)值為2:清檢查位;置時鐘設(shè)置位;時鐘設(shè)置顯示;語音提示</p><p>  模式計數(shù)器計數(shù)值為3:清時鐘設(shè)置位;置音量設(shè)置位;音量設(shè)置顯示;語音提示</p><p>  模式計數(shù)器計數(shù)值為4:清音量位;置清除位;清記錄顯示;語音提示</

59、p><p>  模式計數(shù)器計數(shù)值為其它:清記錄位;清模式位;清模式計數(shù)器</p><p>  模式操作軟件設(shè)計可以分為4個主要功能模塊:檢查顯示模塊;時鐘設(shè)置顯示模塊;音量設(shè)置顯示模塊;清記錄顯示模塊。各功能模塊的程序如下:</p><p><b>  模式操作程序:</b></p><p>  void mod_op(vo

60、id)</p><p>  { switch(MODCNT) </p><p>  { case 1:{voice(0x00); //*****檢查顯示模塊程序*****//</p><p>  LineDisp(2,str1);LineDisp(3,str0);</p><p>  CHKSET=1;}<

61、/p><p><b>  break;</b></p><p>  case 2:{voice(0x00);</p><p>  LineDisp(2,str2);LineDisp(3,str0);//*****時鐘設(shè)置顯示模塊程序*****//</p><p><b>  CHKSET=0;</b>&

62、lt;/p><p>  CLKSET=1; }</p><p><b>  break;</b></p><p>  case 3:{voice(0x00);</p><p>  LineDisp(2,str3);LineDisp(3,str0);//*****音量設(shè)置顯示模塊程序*****//

63、</p><p><b>  CLKSET=0;</b></p><p><b>  VOLSET=1;</b></p><p><b>  } </b></p><p><b>  break;</b></p><p>  cas

64、e 4:{voice(0x00);</p><p>  LineDisp(2,str4);LineDisp(3,str0);//*****清記錄模顯示塊程序*****//</p><p><b>  VOLSET=0;</b></p><p><b>  EARSET=1;</b></p><p>

65、<b>  } </b></p><p><b>  break;</b></p><p>  default:{ROOL_OP=1;</p><p><b>  break;</b></p><p><b>  }}}</b></p>&

66、lt;p>  3.6 功能選擇程序流程圖及原理說明</p><p><b>  功能選擇流程圖:</b></p><p>  圖3-6 功能選擇流程圖</p><p><b>  功能操作原理說明:</b></p><p>  在模式操作的基礎(chǔ)上進(jìn)入功能子程序,也是先延時10MS。然后判斷

67、模式位是否為1(即判斷是否正在進(jìn)行模式操作),當(dāng)模式位為0才能進(jìn)入下一步。再判斷P2.1是否為0,當(dāng)P2.1為0進(jìn)行功能選擇操作,然后根據(jù)功能類型進(jìn)行相應(yīng)的操作。操作如下:</p><p>  檢查操作:檢查操作;語音提示</p><p>  時鐘設(shè)置:時鐘設(shè)置;語音提示</p><p>  音量調(diào)整:音量調(diào)整;語音提示</p><p>  

68、清除記錄:清除操作;語音提示 </p><p>  同樣,功能操作程序設(shè)計也可以分為四個功能模塊:檢查操作模塊;時鐘設(shè)置操作模塊;音量調(diào)整操作模塊;清除記錄操作模塊。各模塊程序段如下:</p><p><b>  功能操作程序:</b></p><p><b>  檢查操作模塊程序:</b></p><

69、p>  void check(void)</p><p>  { LineDisp(3,str02);</p><p>  WriteCommand(0x01);</p><p>  LineDisp(2,str);</p><p>  Delay(1000000);</p><p>  WriteComma

70、nd(0x01);</p><p>  LineDisp(3,str00);</p><p>  LineDisp(2,str01);</p><p><b>  return; </b></p><p><b>  }</b></p><p>  時鐘設(shè)置操作模塊程序:&l

71、t;/p><p>  void clock(void)</p><p>  { FUNCNT++;//*****功能計數(shù)器自加1*****//</p><p>  switch(FUNCNT%5)</p><p>  { case 1:LineDisp(2,str1);LineDisp(3,str00);//*****月調(diào)整操作*****//&

72、lt;/p><p><b>  MON_OP=1;</b></p><p><b>  break;</b></p><p>  case 2:LineDisp(2,str2);LineDisp(3,str02); //*****日調(diào)整操作*****//</p><p>  MON_OP=0; <

73、/p><p><b>  DAY_OP=1;</b></p><p><b>  break;</b></p><p>  case 3:LineDisp(2,str3);LineDisp(3,str03); //*****時調(diào)整操作*****//</p><p><b>  DAY_OP=0

74、;</b></p><p><b>  HOU_OP=1;</b></p><p><b>  break;</b></p><p>  case 4:LineDisp(2,str4);LineDisp(3,str04); //*****分調(diào)整操作*****//</p><p><

75、b>  HOU_OP=0;</b></p><p><b>  MIN_OP=1;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  音量調(diào)整操作模塊程序:</p><p&

76、gt;  void volume(void)</p><p><b>  { …………</b></p><p>  FUNCNT++; //*****功能計數(shù)器自加1*****//</p><p>  switch (FUNCNT%5) </p><p>  { case 1:lv_voi();Line

77、Disp(2,str4);voice(0x20);LineDisp(3,str00); //大音量調(diào)整操作//</p><p><b>  break;</b></p><p>  case 2:mv_voi();LineDisp(2,str3);voice(0x28);LineDisp(3,str00); //中音量調(diào)整操作//</p><p&g

78、t;<b>  break; </b></p><p>  case 3:sv_voi();LineDisp(2,str2);voice(0x30);LineDisp(3,str00); //小音量調(diào)整操作//</p><p><b>  break;</b></p><p>  case 4:nv_voi();LineD

79、isp(2,str1);voice(0x38);LineDisp(3,str00); //靜音調(diào)整操作//</p><p><b>  break;</b></p><p>  default:FUNCNT=0;LineDisp(2,str5);LineDisp(3,str01); </p><p><b>  break;</

80、b></p><p><b>  }</b></p><p><b>  }</b></p><p>  清除記錄操作模塊程序:</p><p>  void earse(void)</p><p><b>  {………… </b></p&g

81、t;<p>  if (DEL_OP>=2) {LineDisp(2,str1);//*****清除完畢提示****//</p><p>  Delay(2000000);</p><p>  else {LineDisp(2,str00);//*****確認(rèn)刪除?*****//</p><p>  LineDisp(3,str01);//***

82、**刪除提示*****//</p><p><b>  }</b></p><p><b>  }</b></p><p>  3.7 時鐘調(diào)整程序流程圖及原理說明</p><p>  時鐘增(減)值流程圖:</p><p>  圖3-7 操作模式流程圖</p>

83、;<p>  時鐘增減值原理說明:</p><p>  在功能操作的基礎(chǔ)上進(jìn)入時鐘增減值子程序。也是先延時10MS。然后判斷功能操作上是否時鐘調(diào)整,要進(jìn)行時鐘調(diào)整操作再判斷P2.2是否為0,P2.2為0經(jīng)過調(diào)整緩加1才能進(jìn)入時鐘的各項調(diào)整.調(diào)整操作如下:</p><p>  月調(diào)整:月調(diào)整操作;語音提示</p><p>  日調(diào)整:日調(diào)整操作;語音提示

84、</p><p>  時調(diào)整:時調(diào)整操作;語音提示</p><p>  分調(diào)整:分調(diào)整操作;語音提示</p><p>  時鐘增減值程序同樣可以分為四個功能模塊:月調(diào)整操作模塊;日調(diào)整操作模塊;時調(diào)整操作模塊;分調(diào)整操作模塊。各部分程序片段如下:</p><p><b>  時鐘增減值程序:</b></p>

85、<p>  月調(diào)整操作模塊程序:</p><p>  void setime1(void) </p><p>  { char *str=" 月調(diào)整: ";</p><p><b>  b++;</b></p><p>  if(b>12)

86、 //月份控制條件</p><p><b>  b=1; </b></p><p>  UpData[0] =((UpData1[b]&0x70)>>4)+0x30; //月份的十位</p><p>  UpData[1] = (UpData1[b]&0x0f)+0x30;

87、 //月份的個位</p><p>  WriteCommand(0x88);</p><p>  LineDisp( 2,str); </p><p>  WriteCommand(0x8D); //寫數(shù)據(jù)</p><p>  for(i=0;i<2;i++)

88、</p><p><b>  {</b></p><p>  WriteOperate(UpData[i],1); //寫數(shù)據(jù)</p><p><b>  } </b></p><p><b>  }</b></p><p>

89、;  日調(diào)整操作模塊程序:</p><p>  void setime2(void) </p><p>  { char *str="日期調(diào)整: ";</p><p><b>  b++;</b></p><p><b>  if(b>31)</b></p&

90、gt;<p><b>  b=1; </b></p><p>  UpData[0] =((UpData1[b]&0x70)>>4)+0x30; </p><p>  UpData[1] = (UpData1[b]&0x0f)+0x30;</p><p>  WriteCommand(0x88);&

91、lt;/p><p>  LineDisp( 2,str);</p><p>  WriteCommand(0x8D); //寫數(shù)據(jù)</p><p>  for(i=0;i<2;i++)</p><p>  WriteOperate(UpData[i],1); //寫數(shù)據(jù) </p><p><b>  

92、}</b></p><p>  時調(diào)整操作模塊程序:</p><p>  void setime3(void) </p><p>  { char *str=" 時調(diào)整: ";</p><p><b>  b++;</b></p><p><b&g

93、t;  if(b>23)</b></p><p>  b=0; </p><p>  UpData[0] =((UpData1[b]&0x70)>>4)+0x30; </p><p>  UpData[1] = (UpData1[b]&0x0f)+0x30;</p><p&g

94、t;  WriteCommand(0x88);</p><p>  LineDisp( 2,str);</p><p>  WriteCommand(0x8D); //寫數(shù)據(jù)</p><p>  for(i=0;i<2;i++)</p><p>  WriteOperate(UpData[i],1); //寫數(shù)據(jù)

95、 </p><p><b>  }</b></p><p>  分調(diào)整操作模塊程序:</p><p>  void setime4(void) </p><p><b>  { b++;</b></p><p><b>  if(b>59)

96、</b></p><p><b>  b=0; </b></p><p>  UpData[0] =((UpData1[b]&0x70)>>4)+0x30; </p><p>  UpData[1] = (UpData1[b]&0x0f)+0x30;</p><p>  Write

97、Command(0x88);</p><p>  LineDisp( 2,str);</p><p>  WriteCommand(0x8D); //寫數(shù)據(jù)</p><p>  for(i=0;i<2;i++)</p><p>  WriteOperate(UpData[i],1); //寫數(shù)據(jù)</p><p>

98、<b>  }</b></p><p>  3.8 音量鍵控程序流程圖及原理說明</p><p><b>  音量鍵控流程圖:</b></p><p>  圖3-8 音量鍵控流程圖</p><p><b>  音量鍵控原理說明:</b></p><p&g

99、t;  在功能操作基礎(chǔ)上進(jìn)入音量鍵控子程序。首先將音量計數(shù)器置1,然后逐步加1進(jìn)行各種音量操作。操作如下:</p><p>  音量計數(shù)器為1:大音量設(shè)置;語音提示</p><p>  音量計數(shù)器為2:中音量設(shè)置;語音提示</p><p>  音量計數(shù)器為3:小音量設(shè)置;語音提示</p><p>  音量計數(shù)器為4:靜音設(shè)置;語音提示<

100、/p><p>  音量鍵控程序同樣可以分為四個功能模塊:大音量設(shè)置模塊;中音量設(shè)置模塊;小音量設(shè)置模塊;靜音設(shè)置模塊。各模塊程序片段如下</p><p><b>  音量鍵控程序:</b></p><p>  小音量調(diào)理程序模塊:</p><p>  void sv_voi(void)</p><p>

101、;  { P6OUT|=BIT0;</p><p>  P5OUT&=~BIT4;</p><p><b>  }</b></p><p>  中音量調(diào)理模塊程序:</p><p>  void mv_voi(void)</p><p>  {P5OUT|=BIT4;</p>

102、<p>  P6OUT&=~BIT0;</p><p><b>  }</b></p><p>  大音量調(diào)理模塊程序:</p><p>  void lv_voi(void)</p><p>  { P5OUT&=~BIT4;</p><p>  P6OUT&

103、=~BIT0;</p><p><b>  }</b></p><p><b>  靜音調(diào)理模塊程序:</b></p><p>  void nv_voi(void)</p><p>  {P6OUT|=BIT0;</p><p>  P5OUT|=BIT4;</p&g

104、t;<p><b>  }</b></p><p><b>  4 程序設(shè)計調(diào)試</b></p><p>  4.1 開發(fā)工具介紹</p><p>  IAR公司成立于1983年,其編譯器已成為業(yè)界領(lǐng)先的嵌入式開發(fā)平臺,廣泛應(yīng)用于移動電話、GPS系統(tǒng),遠(yuǎn)程控制、游戲機等含有微處理器的系統(tǒng)的開發(fā)中。IAR公

105、司的編譯器可以支持超過30種不同的8位、16位、32位處理器。針對MSP430的開發(fā)平臺全稱為IAR Embedded Workbench EW430 ,簡稱EW430,其功能非常強大,而且仍然在以很快的速度更新版本。它的基本特點有:①支持ANSI C并包含對Embedded C++的支持②內(nèi)建MSP430特性擴(kuò)展優(yōu)化③代碼長度和速度有多級優(yōu)化④支持32位和64位浮點數(shù)⑤支持硬件乘法器⑥內(nèi)部函數(shù)支持低功耗模式⑦支持C和匯編語言混合編程。

106、基于這些優(yōu)點,本智能樓宇安檢系統(tǒng)采用EW430開發(fā)環(huán)境。</p><p>  4.2 按鍵操作調(diào)試</p><p>  通過調(diào)試,我知道了MSP430電路板上的液晶右邊有四個按鍵,從上到下他們的功能依次是:模式鍵,功能鍵,增值鍵,減值鍵。</p><p>  系統(tǒng)加電后就自動進(jìn)行初始化,然后逐一檢測4路紅外傳感器是否有異常信號。</p><p&

107、gt;  這個過程中可以按模式鍵進(jìn)行模式操作,每按一次就LCD上就顯示一種模式,依次顯示為:檢查顯示,時鐘設(shè)置,音量設(shè)置,清除記錄。</p><p>  當(dāng)LCD顯示“檢查顯示“時,按下功能鍵就能回放4路傳感器檢測到的異常信號的時間和次數(shù)。同時還有語音提示。</p><p>  當(dāng)LCD顯示“時鐘設(shè)置“,按一下功能鍵進(jìn)入時鐘設(shè)置界面,每按一次功能鍵依次能設(shè)置月調(diào)整,日調(diào)整,時調(diào)整,分調(diào)整,

108、同時月、日、時、分對應(yīng)的數(shù)字反色顯示,表示能調(diào)整了,再按增值鍵、減值鍵分別進(jìn)行月、日、時、分的增值或減值。</p><p>  同樣,當(dāng)LCD顯示“音量設(shè)置“時,按一下功能鍵進(jìn)入音量設(shè)置界面,每按一次能循環(huán)設(shè)置為大音量,中音量,小音量,靜音。</p><p><b>  出現(xiàn)問題及解決方法</b></p><p>  系統(tǒng)時鐘問題:系統(tǒng)默認(rèn)使用

109、DCO,使用外部高速晶振XT2時必須自己開啟XT2,并延時50us等待XT2起振,然后手工清除IFG1中的OFIFG位。 要注意操作順序:打開XT2->等待XT2穩(wěn)定->切換系統(tǒng)時鐘為XT2。 若后面兩步操作反了,在通常情況下不會出現(xiàn)問題,但是在電壓不穩(wěn)MCU頻繁復(fù)位的情況下,非常容易造成MCU死掉,只能掉電后重新上電才能可靠復(fù)位。</p><p>  在剛開始調(diào)試時,就遇到的問題,即程序執(zhí)行后,液晶

110、屏不能正常顯示漢字,在探討后,我們終于找到問題的所在,是因為端口上電壓變化也是有一定時間的,如果讀取太快,就有可能出錯。我們在讀取數(shù)據(jù)之前加了一句延時程序。這樣修改后,讀數(shù)據(jù)的問題就迎刃而解。這個延時問題在接下來的調(diào)試過程中還與到了不止一次,給了我們寶貴的經(jīng)驗,我想我們在以后的設(shè)計中肯定不會忽略這種硬件延時。</p><p>  通過調(diào)試,代碼方面的錯誤得到解決。在程序規(guī)范方面出現(xiàn)很多問題,如在頭文件中定義了變量

111、,結(jié)果導(dǎo)致編譯錯誤;由于代碼中變量非常多,變量命名時重復(fù)命名和未定義,導(dǎo)致編譯錯誤。</p><p>  通過基于MSP430的智能樓宇安檢系統(tǒng)的軟件設(shè)計,我懂得了單片機程序比PC程序簡單、規(guī)模小,因此,不能照搬開發(fā)PC程序所使用的規(guī)范,而是要進(jìn)行一些簡化和修改,使它更適合用語單片機程序的開發(fā)。我總結(jié)了按照編程規(guī)范寫MSP430程序的好處:</p><p><b>  增加程序的

112、可維護(hù)性</b></p><p>  當(dāng)需求發(fā)生變化時,比較易于修改</p><p>  可重用性好,便于將來再次使用代碼</p><p>  可移植性好,便于將代碼在其他類型的微處理器上使用</p><p>  可讀性好,不會導(dǎo)致過了很長時間后,沒人能夠理解程序的意思,或者非常難以理解</p><p>&

113、lt;b>  5 結(jié)論</b></p><p><b>  5.1 性能指標(biāo)</b></p><p><b>  主要技術(shù)指標(biāo):</b></p><p>  無線傳輸距離:20m</p><p><b>  電源電壓:5V</b></p>&

114、lt;p><b>  檢測路數(shù):4路</b></p><p>  記錄事件:24組(4點*6次)</p><p><b>  特點</b></p><p><b>  涉及的技術(shù)領(lǐng)域</b></p><p>  紅外(熱釋電)傳感技術(shù)</p><p&g

115、t;<b>  單片機控制技術(shù)</b></p><p><b>  LCD顯示技術(shù)。</b></p><p>  語音及音量鍵控技術(shù)。</p><p><b>  精密時鐘技術(shù)。</b></p><p>  FLASH數(shù)據(jù)存儲技術(shù)</p><p>  實

116、驗表明基于MSP430單片機的智能樓宇安檢系統(tǒng)具有液晶顯示、語音提示、體積小、功耗低、速度快等優(yōu)點,它是面向用戶,面向產(chǎn)品、面向應(yīng)用的。它用片內(nèi)的A/D轉(zhuǎn)換器與紅外線傳感器進(jìn)行連接,只要連接不同的傳感器就可以采集不同數(shù)據(jù)源的數(shù)據(jù),做到系統(tǒng)與數(shù)據(jù)源的無關(guān)性,具有一定得通用性。而且該系統(tǒng)具有良好的拓展性,不僅可以實現(xiàn)單通道顯示,而且可以通過修改軟件實現(xiàn)多通道數(shù)據(jù)采集系統(tǒng)在同一界面顯示,該系統(tǒng)的模型可以推廣到多種其他領(lǐng)域。</p>

117、<p><b>  5.3 后續(xù)設(shè)計</b></p><p><b>  現(xiàn)場錄像:</b></p><p>  本設(shè)計除了用紅外傳感器采集信號,還可以與攝像頭配合使用。當(dāng)紅外傳感器檢測到異常信號時,攝像頭立即啟動進(jìn)行錄像,并存儲錄像。然而這種后續(xù)設(shè)計需要大容量的存儲器,導(dǎo)致總體結(jié)構(gòu)會比較龐大,開發(fā)成本也會大大提高。</p&

118、gt;<p><b>  電話報警:</b></p><p>  同樣本系統(tǒng)還可以與電話相連接,檢測到異常信號的同時就自動接通了報警電話。這種設(shè)計結(jié)構(gòu)簡單,開發(fā)成本比較低,具有很強的實用性。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] Slau 049.pdf Texas Ins

119、truments incorporated,2006.</p><p>  [2] MSP430x13x,MSP430x14x1 MIXED SIGNAL MICROCONTROLLER.</p><p>  [3]胡大可.MSP430超低功耗16位單片機原理與應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2000.</p><p>  [4]秦龍.MSP430單片機應(yīng)

120、用系統(tǒng)開發(fā)實例[M].北京:電子工業(yè)出版社,2005.</p><p>  [5]秦龍.MSP430單片機C語言應(yīng)用程序設(shè)計實例精講[M].北京:電子工業(yè)出版社,2006.</p><p>  [6]何為民.低功耗單片微機系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,1994.</p><p>  [7]魏小龍.MSP430系列單片機接口技術(shù)及系統(tǒng)設(shè)計實例[M].北

121、京:北京航空航天大學(xué)出版社,2002.</p><p>  [8]胡大可.MSP430系列單片機C語言程序設(shè)計與開發(fā)[M].北京:北京航空航天大學(xué)出版社,2002.</p><p>  [9]IAR Company,MSP430 Windows WorkBench,TEXAS INSTRUMENTS.199972-83.</p><p>  [10]胡大可MSP43

122、0系列FLASH型超低功耗16位單片機[M].北京:北京航空航天大學(xué)出版社,2001.</p><p>  [11]周啟海.C語言程序設(shè)計教程[M].北京:機械工業(yè)出版社,2004.</p><p>  [12]李信.16位微型計算機原理與接口[M].天津:南開大學(xué)出版社,1995.</p><p>  [13]李維提,郭強.液晶顯示應(yīng)用技術(shù)[M].北京:電子工業(yè)出

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論