




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、華東師范大學(xué)計(jì)算機(jī)科學(xué)技術(shù)系實(shí)驗(yàn)報(bào)告華東師范大學(xué)計(jì)算機(jī)科學(xué)技術(shù)系上機(jī)實(shí)踐報(bào)告課程名稱(chēng):年級(jí):上機(jī)實(shí)踐成績(jī):指導(dǎo)教師:姓名:創(chuàng)新實(shí)踐成績(jī):上機(jī)實(shí)踐名稱(chēng):綜合實(shí)驗(yàn)學(xué)號(hào):上機(jī)實(shí)踐日期:2009/6/9上機(jī)實(shí)踐編號(hào):No.6組號(hào):1上機(jī)實(shí)踐時(shí)間:2學(xué)時(shí)一、 實(shí)驗(yàn)?zāi)康睦肕SP430的基本結(jié)構(gòu)和外圍模塊來(lái)設(shè)計(jì)一個(gè)較為完整的作品二、 實(shí)驗(yàn)設(shè)備1. 硬件:PC機(jī)2. 軟件:IAR Embedded Workbench IDE 集成開(kāi)發(fā)環(huán)境,Windows XP。三、 實(shí)驗(yàn)原理這次實(shí)驗(yàn)設(shè)計(jì)了一個(gè)帶校時(shí)和鬧鐘的時(shí)鐘系統(tǒng)。通過(guò)K1K4四個(gè)按鍵,LED3LED4兩個(gè)LED,外接蜂鳴器,和MSP430 來(lái)實(shí)現(xiàn)整個(gè)系統(tǒng)
2、。這個(gè)軟件一上電就開(kāi)始從00:00:00記時(shí),可以通過(guò)鍵操作set_alarm,和set_time,當(dāng)time到達(dá)和alarm中的預(yù)設(shè)值相同時(shí),蜂鳴器響2s后停止(time還是在不斷累加)。1.硬件部分: K1K4四個(gè)按鍵和LED3(P1.0),LED4(P5.1)都是開(kāi)發(fā)板上已經(jīng)連接好的。因?yàn)閷?shí)驗(yàn)板上沒(méi)有提供蜂鳴器,所以外接了一個(gè)蜂鳴器。參考實(shí)驗(yàn)原理圖(圖1)上的DVSS2 端口99接蜂鳴器的GND,并插上開(kāi)發(fā)板上提供的一個(gè)VCC,來(lái)為蜂鳴器提供電源。然后再用(圖2)P1.1作為蜂鳴器的信號(hào)來(lái)控制其發(fā)聲。 圖1 圖2實(shí)際物理連接如下圖(圖3),黃色的線為P1.1,給蜂鳴器提供信號(hào),紅色的線接
3、到開(kāi)發(fā)板上露出的VCC上,絳紅色的線接到DVSS1上,為地。 圖3蜂鳴器部分如下圖,就是用了某個(gè)板上的蜂鳴器部分。 圖4LED3和LED4,Keyboard部分如下圖(圖5) 圖5八位數(shù)碼管部分如下圖(圖6) 圖62.軟件部分:定義LED3 作為時(shí)間指示器,每一秒鐘改變一次狀態(tài)(亮->滅 / 滅->亮)。定義LED4 作為set time或者set alarm的指示器,若亮則表示在set time狀態(tài),若滅則表示在設(shè)置alarm狀態(tài)。開(kāi)機(jī)默認(rèn)狀態(tài)是set alarm狀態(tài)。 定義K1 作為改變成set time 狀態(tài)的鍵,按下K1后,進(jìn)入set time 狀態(tài)。定義K2 作為改變成s
4、et alarm 狀態(tài)的鍵,按下K2后,進(jìn)入set alarm 狀態(tài)。定義K3 作為改變?cè)O(shè)置第幾個(gè)數(shù)定義K4 作為改變?cè)O(shè)置數(shù)的value 使用WDT的普通定時(shí)器功能,為時(shí)鐘和蜂鳴器來(lái)提供時(shí)鐘信號(hào)。因?yàn)闀r(shí)鐘需要的頻率為1HZ,蜂鳴器在低頻率下無(wú)法出聲。則在WDT的中斷函數(shù)中有如下處理: 設(shè)置WDTCTL = WDT_MDLY_0_5,即2KHZ,然后設(shè)置static second_cnt = 0,當(dāng)它到達(dá)2000,即1s,再修改全局變量time_1s_ok,當(dāng)主程序讀到time_1s_ok這個(gè)標(biāo)志,就對(duì)時(shí)間進(jìn)行更新(在數(shù)碼管上增加1s)。當(dāng)alarm_ok = 1(即鬧鐘設(shè)定的時(shí)間和當(dāng)前時(shí)間相等
5、時(shí))就按照2KHZ的頻率來(lái)讓蜂鳴器發(fā)聲,并通過(guò)alarm_cnt = 4000來(lái)控制蜂鳴器只響2s。#pragma vector = WDT_VECTOR _interrupt void WDT_Interrupt(void) static int second_cnt = 0;static int alarm_cnt = 0;if(alarm_ok)P1OUT = 0x02; / P1.1 output Toggle alarm_cnt+;if(alarm_cnt=4000) alarm_ok = 0;second_cnt+;if(second_cnt=2000)time_1s_ok = 1
6、;second_cnt = 0;P1OUT = 0x01; 讀取鍵值部分就參照例程KB12,通過(guò)延時(shí)來(lái)消除抖動(dòng)。進(jìn)行實(shí)驗(yàn),了解有中斷和輪詢(xún)兩種方式來(lái)讀取鍵值。/* key_Event(),檢測(cè)鍵盤(pán)是否有鍵按下,如果有獲取鍵值*/void key_Event(void) unsigned char tmp; P1OUT &= 0x01; / 設(shè)置P1OUT輸出值 tmp = P1IN; / 獲取p1IN if (key_Pressed =0x00)&&(tmp & 0xf0) < 0xf0) /是否有鍵按下 key_Pressed = 1; / 如果有按鍵按
7、下,設(shè)置key_Pressed標(biāo)識(shí) delay(); /消除抖動(dòng) check_Key(); / 調(diào)用check_Key(),獲取鍵值 else if (key_Pressed =1)&&(tmp & 0xf0) = 0xf0) /是否按鍵已經(jīng)釋放 key_Pressed = 0; / 清除key_Pressed標(biāo)識(shí) key_Flag = 1; / 設(shè)置key_Flag標(biāo)識(shí) 在數(shù)碼管顯示部分也參照例程,在自己的main函數(shù)中只需要修改led_Buf的內(nèi)容,再在while循環(huán)中的末尾加一個(gè)led_Display(),因?yàn)閣hile循環(huán)的速度很快,所以通過(guò)led_Displa
8、y()可以實(shí)現(xiàn)動(dòng)態(tài)刷新。/* LED 顯示 ,該函數(shù)可以放到定時(shí)器中斷中*/void led_Display() unsigned tmp ; tmp = 0x01; P3OUT = NUM_LEDled_Bufled_Ctrl; / 設(shè)置顯示值 P4OUT |= 0x02; / 打開(kāi)數(shù)據(jù)鎖存器 P4OUT &= 0XFD; / 關(guān)閉數(shù)據(jù)鎖存 P3OUT = (tmp<<led_Ctrl); / 設(shè)置那只LED顯示 P4OUT |= 0x01; / 打開(kāi)控制鎖存 P4OUT &= 0XFE; / 關(guān)閉控制鎖存 led_Ctrl= (led_Ctrl +1) % LE
9、D_IN_USE; / 設(shè)置下一個(gè)要顯示的LED 四、 實(shí)驗(yàn)內(nèi)容在MSP430的資源和外接蜂鳴器的基礎(chǔ)上,編寫(xiě)一個(gè)帶校時(shí)和鬧鐘的時(shí)鐘系統(tǒng)軟件。主要的流程的偽代碼是while(1)if(time_1s_ok)修改time中數(shù)據(jù),并修改led8中的數(shù)據(jù)判斷如果time中的值和alarm中的值數(shù)據(jù)一樣,set alarm_ok 標(biāo)志位key_Event(); /讀取鍵值switch(key_value)/處理鍵值的子模塊case key_set_time:case key_set_alarm:case key_change_state:case key_change_value:在程序中增加一個(gè)re
10、turn_time的變量,設(shè)置目的是在設(shè)置time或者alarm過(guò)程中,如果20s沒(méi)有按鍵事件發(fā)生,則返回顯示時(shí)間狀態(tài)。狀態(tài)轉(zhuǎn)換圖如下圖:秒低位設(shè)置秒低位設(shè)置時(shí)鐘顯示秒高位設(shè)置分低位設(shè)置分高位設(shè)置時(shí)低位設(shè)置時(shí)高位設(shè)置秒高位設(shè)置分低位設(shè)置分高位設(shè)置時(shí)低位設(shè)置時(shí)高位設(shè)置鬧鐘時(shí)間五、 實(shí)驗(yàn)步驟1. 配置好硬件環(huán)境,外接上蜂鳴器。 2. 設(shè)計(jì)軟件,上機(jī)調(diào)試運(yùn)行。六、 調(diào)試過(guò)程、結(jié)果和分析1. 因?yàn)檫@個(gè)實(shí)驗(yàn)實(shí)際是綜合以前的LED數(shù)碼管,Keyboard,WDT的部分,遇到的問(wèn)題不是特別多,在開(kāi)始在調(diào)試的時(shí)候發(fā)現(xiàn)無(wú)論怎樣修改程序,在實(shí)驗(yàn)板上跑出的結(jié)果都是一樣的(不是我修改的程序的正確結(jié)果)。因?yàn)橐郧芭龅竭^(guò)
11、類(lèi)似情況,是通過(guò)Project à clean 清除以前生成的Object代碼,再重新生成就可以了。但是這次沒(méi)有效果。經(jīng)過(guò)很長(zhǎng)時(shí)間的查錯(cuò)才發(fā)現(xiàn)是在項(xiàng)目的設(shè)置里面,選擇的是Simulator,而不是Flash Online Debug。所以程序一直沒(méi)有下載到目標(biāo)板上,目標(biāo)板上跑的是以前固化在上面的程序。2. 在最初Key_board讀取鍵值時(shí)沒(méi)有參考例程采用消除抖動(dòng),就自己直接寫(xiě)的一個(gè)讀取鍵值。盡管以前原理課上也講過(guò)需要消除抖動(dòng),但是自己沒(méi)有一個(gè)直觀印象。通過(guò)實(shí)驗(yàn)發(fā)現(xiàn)得到的結(jié)果一直不對(duì),問(wèn)題就是出在按下一次鍵會(huì)讀出幾次鍵值。這種硬件部分的問(wèn)題只有通過(guò)真正的實(shí)踐才會(huì)了解,否則光看看原理脫
12、離硬件,自己推測(cè)的結(jié)果往往是不正確的。然后結(jié)合硬件和原理,了解讀鍵值可以通過(guò)中斷和輪詢(xún)兩種方法來(lái)進(jìn)行。在這次寫(xiě)的程序里面直接采用例程的void key_Event(void) ,通過(guò)輪詢(xún)來(lái)讀取鍵值。實(shí)際操作時(shí)可以對(duì)其中通過(guò)delay來(lái)消抖進(jìn)行優(yōu)化,使用一個(gè)Timer來(lái)控制Press, Release之類(lèi)的狀態(tài)轉(zhuǎn)換。七、 總結(jié)八、 附件#define MSP430F449_H 0#include <msp430x44x.h>#ifndef LED_IN_USE#include "././led/led.c"#endif#ifndef KEY_BOARD#inclu
13、de "keyboard12.c"#endif#define key_set_time 1#define key_set_alarm 2#define key_change_state 3#define key_change_value 10unsigned char time_1_alarm_2;unsigned char time3,time_set3,alarm_set3;unsigned char dis_buff6;unsigned char time_1s_ok,alarm_ok;unsigned char clock_state = 6,return_time
14、=0;void setWDT(int mode)unsigned int tmp;if(mode=1) / 定時(shí)器模式WDTCTL = WDT_MDLY_0_5; / 1000ms中斷間隔IE1 |= WDTIE; / 使能WDT 中斷P1DIR |= 0x01; / P1.0 output mode P1DIR |= 0x02; / P1.1 output mode P5DIR |= 0x02; / P5.1 output mode _EINT(); / 開(kāi)中斷 else if(mode=0) /看門(mén)狗模式WDTCTL = WDT_ARST_250; /設(shè)置看門(mén)狗時(shí)間間隔為ms/在系統(tǒng)加電后
15、,默認(rèn)子系統(tǒng)時(shí)鐘頻率是M for(tmp=0x7fff;tmp>0;tmp-);/延遲P1DIR |= 0x01; /P5.1 output mode P1OUT |= 0x01; /light LED4 for(tmp=0x7fff;tmp>0;tmp-); /延遲,執(zhí)行一次tmp-至少要用個(gè)指令 void time_to_disbuffer(unsigned char *time) /時(shí)鐘顯示送顯示緩沖區(qū)函數(shù)unsigned char i,j=0;for(i=0;i<3;i+)led_Buf(5-(j+) = timei%10;led_Buf(5-(j+) = timei
16、/10;/* 函數(shù)說(shuō)明:* WDT中斷函數(shù)*/#pragma vector = WDT_VECTOR _interrupt void WDT_Interrupt(void) static int second_cnt = 0;static int alarm_cnt = 0;if(alarm_ok)P1OUT = 0x02; / P1.1 output Toggle alarm_cnt+;if(alarm_cnt=4000) alarm_ok = 0;second_cnt+;if(second_cnt=2000)time_1s_ok = 1;second_cnt = 0;P1OUT = 0x0
17、1; /* main()函數(shù)*/void main(void)int position = 0;int value = 0;int i;unsigned char tmp;setWDT(1); /設(shè)置程序運(yùn)行在看門(mén)狗模式time_1_alarm_2 = 1; /初始化開(kāi)始在設(shè)置什么clock_state = 6;P5OUT |= 0x02;time_1s_ok = 0;/ WDTCTL = WDTHOLD + WDTPW ; / 停止看門(mén)狗init_LED(); / 初始化LED init_Keyboard(); / 初始化鍵盤(pán) alarm_ok = 0; while(1)if(time_1s
18、_ok) /1s 到time_1s_ok = 0;/ point_on = point_on; /秒閃爍標(biāo)志if(+time0>=60) /秒加,以下為時(shí)間調(diào)整time0 = 0;/ if(!play_on) ;/ 時(shí)間到,播放音樂(lè)if(+time1>=60)time1 = 0;if(+time2>=24) time2 = 0;if(+return_time >= 20) && (clock_state != 6 ) clock_state = 6;if(clock_state = 6) time_to_disbuffer(time);/matchif(
19、 (alarm_set0 = time0) && (alarm_set1 = time1) && (alarm_set2 = time2) )alarm_ok = 1;/if(key_stime_ok)key_Event(); /檢測(cè)按鍵事件if (key_Flag = 1) / 檢測(cè)key_val里是否有鍵值可以讀取 key_Flag = 0; / 恢復(fù)鍵盤(pán)按鍵標(biāo)識(shí) switch(key_val)case key_set_time:/set timeclock_state = 6;time_1_alarm_2 = 1;/亮led4P5OUT |= 0x02;b
20、reak;case key_set_alarm:/set alarmclock_state = 6;time_1_alarm_2 = 2;/滅led4P5OUT &= (0x02);break;case key_change_state:if(time_1_alarm_2 = 1)return_time = 0;/響應(yīng)if(+clock_state>=7) clock_state = 0;if(clock_state = 0)for(i=0;i<3;i+)time_seti = 0;time_to_disbuffer(time_set);if(clock_state = 6
21、)for(i=0;i<3;i+)timei = time_seti;time_to_disbuffer(time);else /time_1_alarm_2 = 2return_time = 0;/響應(yīng)if(+clock_state>=7) clock_state = 0;if(clock_state = 0)for(i=0;i<3;i+)alarm_seti = 0;time_to_disbuffer(alarm_set);if(clock_state = 6)/for(i=0;i<3;i+)/timei = alarm_seti;time_to_disbuffer(time);break;case key_change_value:if(time_1_alarm_2 = 1)return_time = 0;/響應(yīng)if(clock_state!=6)if(clock_state%2) time_setcloc
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度河北滄州水務(wù)發(fā)展集團(tuán)有限責(zé)任公司公開(kāi)招聘員工15人筆試參考題庫(kù)附帶答案詳解
- Revision Module A (2)-教學(xué)設(shè)計(jì)2024-2025學(xué)年外研版英語(yǔ)九年級(jí)上冊(cè)
- 第五課 做守法的公民 教學(xué)設(shè)計(jì)-2024-2025學(xué)年統(tǒng)編版道德與法治八年級(jí)上冊(cè)
- 熱點(diǎn)主題作文寫(xiě)作指導(dǎo):自愛(ài)心(審題指導(dǎo)與例文)
- 2024年北京中水科工程集團(tuán)有限公司招聘1人工程設(shè)計(jì)研究中心筆試參考題庫(kù)附帶答案詳解
- 2024年12月四季重慶豐都事業(yè)單位公開(kāi)招聘143人筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 2024年6月浙江省普通高校招生選考高考信息技術(shù)真題及答案
- 2025年湖南國(guó)防工業(yè)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)完整版
- 第八單元 到實(shí)驗(yàn)室去:粗鹽中難溶性雜質(zhì)的去除教學(xué)設(shè)計(jì)-2023-2024學(xué)年九年級(jí)化學(xué)魯教版下冊(cè)
- 2024年12月2025山東威海市環(huán)翠區(qū)民兵訓(xùn)練基地公開(kāi)招聘事業(yè)單位工作人員1人筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 定制公司用工合同范本
- 《遙感地質(zhì)學(xué)》全冊(cè)配套完整教學(xué)課件
- 學(xué)科帶頭人工作計(jì)劃
- 城市更新暨老舊小區(qū)改造二期項(xiàng)目-初步設(shè)計(jì)說(shuō)明書(shū)
- 礦石買(mǎi)賣(mài)協(xié)議書(shū)
- 2024年岳陽(yáng)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案
- 2023新蘇教版六年級(jí)下冊(cè)科學(xué)學(xué)生活動(dòng)手冊(cè)答案
- 【老齡化背景下商業(yè)銀行養(yǎng)老金融發(fā)展探究文獻(xiàn)綜述3400字】
- 精神科護(hù)士進(jìn)修
- 《用戶(hù)側(cè)電化學(xué)儲(chǔ)能系統(tǒng)接入配電網(wǎng)技術(shù)規(guī)定》
- 2024年洛陽(yáng)市九年級(jí)語(yǔ)文中考第一次模擬考試卷附答案解析
評(píng)論
0/150
提交評(píng)論