




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上2012-2013學(xué)年 第一學(xué)期論文題目:單片機(jī)系統(tǒng)設(shè)計(jì)開發(fā)應(yīng)用智能儀器學(xué) 院:計(jì)算機(jī)科學(xué)與信息工程專 業(yè):軟件工程學(xué) 號:姓 名:高紅斌日 期:2013年12月1日單片機(jī)系統(tǒng)設(shè)計(jì)開發(fā)應(yīng)用智能儀器一、 設(shè)計(jì)要求及目的本實(shí)驗(yàn)通過一個(gè)單通道通用型智能儀器的軟硬件系統(tǒng)設(shè)計(jì),將這學(xué)期學(xué)過的單片機(jī)原理加以綜合運(yùn)用,以此掌握單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)要領(lǐng),本次試驗(yàn)設(shè)計(jì)的總體目標(biāo)是一路電壓信號輸入和兩路報(bào)警開關(guān)量輸出控制功能,其中信號電壓范圍05VDC,AD采樣分辨率8bit,數(shù)碼管顯示信息為:以為參數(shù)字符和三位十進(jìn)制采樣值,控制參數(shù)有兩個(gè),即下限報(bào)警值L和上線報(bào)警值H,當(dāng)采樣值大于H時(shí)
2、,高位報(bào)警繼電器接通(用LED狀態(tài)燈D1亮表示);當(dāng)采樣值小于L時(shí),下位報(bào)警繼電器接通(用D2表示);當(dāng)采樣值介于L和H之間時(shí),兩路報(bào)警器功能均被解除(D1和D2均熄滅表示)二、 實(shí)驗(yàn)環(huán)境微型計(jì)算機(jī)一臺,軟件,keilC編譯器。三、 元器件列表,圖表 1四、 實(shí)驗(yàn)原理本實(shí)驗(yàn)選用了一只六聯(lián)共陰極數(shù)碼管顯示器,按照動態(tài)顯示原理接線,其中段碼通過鎖存器74LS245驅(qū)動后接于P0口,位碼則有反相器74LS04驅(qū)動后接于P1.0-P1.5。A/D轉(zhuǎn)換器采用逐次逼近方式的芯片ADC0809,其并行數(shù)據(jù)輸出端直接連接于P2口,4個(gè)控制端CLOCK,START,EOC,和OE分別接于P3.2-P3.5,采用
3、查詢法等待轉(zhuǎn)換結(jié)束,轉(zhuǎn)換時(shí)鐘利用定時(shí)器中斷產(chǎn)生。四個(gè)面板按鍵通過8位串行輸入并行輸出移位寄存器74LS164與單片機(jī)接口,其移位時(shí)終端與單片機(jī)的TXD引腳相連,串行數(shù)據(jù)端(1和2腳)與單片機(jī)的RXD引腳相連,串口輸出功能采用匯編語言與C51語言混合編程實(shí)現(xiàn)。軟件系統(tǒng)采用一個(gè)有多個(gè)功能模塊構(gòu)成的程序,模塊之間相互依賴,他們之間的關(guān)系如圖,程序有主要的兩個(gè)功能模塊組成控制模塊和菜單模塊。這兩個(gè)模塊能夠同時(shí)運(yùn)行。這里,“同時(shí)”的意思是指用戶進(jìn)行菜單操作的時(shí)候,程序還能采集數(shù)據(jù)并進(jìn)行控制。圖表 2軟件系統(tǒng)結(jié)構(gòu)組成“控制”和“菜單”這兩個(gè)主要的模塊都是建立在其他小模塊的基礎(chǔ)上的,比如控制模塊建立在A/D
4、轉(zhuǎn)換和LED 顯示的基礎(chǔ)上,菜單建立在按鍵檢測和LED顯示的基礎(chǔ)上,而按鍵檢測又建立在串口輸出的基礎(chǔ)上。下表列出了各個(gè)模塊的主要函數(shù)。圖表 3各個(gè)模塊的主要函數(shù)和功能五、 程序源代碼/main.cvoid ad_init();void control_thread();void menu_thread();void main() ad_init();while (1)menu_thread();control_thread();/menu.c#define MENU_ON0#define MENU_OFF1#define MENU_NUM2#define MENU_MAX999#define
5、MENU_MIN0unsigned char param_value = 100, 150;unsigned char menu_status = MENU_OFF;char _menu_name = 'L','H' /參數(shù)名的符號unsigned char _menu_value = 0,0;/供顯示用的參數(shù)數(shù)組unsigned char _menu_idx = 0; /參數(shù)序號char get_key();void print(char name, unsigned int value);void menu_thread(void) char i = 0;c
6、har key = get_key(); if (menu_status = MENU_OFF) /當(dāng)前菜單為關(guān)閉狀態(tài)時(shí)if (key = 0)/若按鍵0已被按下menu_status = MENU_ON;/置當(dāng)前菜單為打開狀態(tài)_menu_idx = 0;/設(shè)置參數(shù)序號0/將所有參數(shù)當(dāng)前值取出,送入供顯示的參數(shù)數(shù)組中for (i = 0 ; i < MENU_NUM ; i+) _menu_valuei = param_valuei; else /如果當(dāng)前菜單為打開狀態(tài),則進(jìn)行以下操作:if (key = 0) /若按鍵0按下,則不保存鍵值,僅切換到下一個(gè)參數(shù)if (+_menu_idx
7、 = MENU_NUM) /判斷是否所有參數(shù)都循環(huán)到了menu_status = MENU_OFF; /若已循環(huán)完成,設(shè)置菜單關(guān)閉狀態(tài) else if (key = 1) /若按鍵1按下,則保存鍵值,并切換到下一個(gè)參數(shù)param_value_menu_idx = _menu_value_menu_idx;if (+_menu_idx = MENU_NUM) menu_status = MENU_OFF; else if (key = 2) /若按鍵2按下,則參數(shù)值加10_menu_value_menu_idx += 10;if (_menu_value_menu_idx > MENU_M
8、AX) _menu_value_menu_idx = MENU_MAX; else if (key = 3) /若按鍵3按下,則參數(shù)值減10_menu_value_menu_idx -= 10;if (_menu_value_menu_idx < MENU_MIN) _menu_value_menu_idx = MENU_MIN;if (menu_status = MENU_ON) /菜單狀態(tài)為開時(shí),顯示參數(shù)值print(_menu_name_menu_idx, _menu_value_menu_idx); /ad.c#include <reg51.h>sbit P32 =
9、P32;sbit P33 = P33;sbit P34 = P34;sbit P35 = P35;sbit P37 = P37;unsigned char ad() P33 = 0;P33 = 1;P33 = 0;while(!P34);P35 = 1;return P2;void ad_init() TMOD = 0x02;TH0 = 0;TL0 = 0;ET0 = 1;TR0 = 1;EA = 1;void _ad_clock(void) interrupt 1 P32 = P32;/control.c#include<reg51.h>sbit P16=P16;sbit P17
10、=P17;unsigned char ad();void print(char name, unsigned int value);extern unsigned char param_value2;extern char menu_status;void control_thread() /第1步:A/D轉(zhuǎn)換unsigned char value = ad();/第2步:根據(jù)采樣值控制LED燈if (value > param_value1) P16 = 0;P17 = 1; else if (value <= param_value1 && value >
11、= param_value0) P16 = 0;P17 = 0; else P16 = 1; P17 = 0;/第3步:如果菜單是關(guān)閉的,顯示采集到的數(shù)值if (menu_status = 1) print(' ', value);/keyboard.c#include <reg51.h>#define CHECK_KEY_DOWN 0 /處在檢測按鍵壓下階段標(biāo)志#define CHECK_KEY_UP 1 /處在檢測按鍵抬起階段標(biāo)志#define KEY_UP0 /按鍵抬起標(biāo)志#define KEY_DOWN1 /按鍵壓下標(biāo)志sbit _p33 = P33;sbi
12、t _p34 = P34;sbit _p35 = P35;sbit _p36 = P36;char _key_status = CHECK_KEY_DOWN; /按鍵檢測狀態(tài)(初值為檢測壓下階段)char _key_idx = 0; /按鍵序號void serial(char byte);char _check_key(unsigned char _key_idx) /檢查按鍵狀態(tài)serial(0x01<<_key_idx); /將待查按鍵鍵碼轉(zhuǎn)換成掃描碼后輸出if (_p36 = 0) /根據(jù)P36狀態(tài)決定返回值return KEY_DOWN; else return KEY_U
13、P;char get_key(void) char result = -1; /無鍵按下時(shí)鍵值為-1if (_key_status = CHECK_KEY_DOWN) /如果當(dāng)前處于檢查壓下階段,進(jìn)行以下操作if (_check_key(_key_idx) = KEY_DOWN) /判斷當(dāng)前掃描鍵的狀態(tài),若為壓下標(biāo)志則_key_status = CHECK_KEY_UP; /將檢查階段標(biāo)志設(shè)置為抬起 else /否則,將檢查階段標(biāo)志設(shè)置為壓下if (+_key_idx = 4) /判斷是否4個(gè)按鍵已經(jīng)輪流掃描一遍_key_idx = 0;/是,則將待掃描按鍵號設(shè)為0 else if (_key
14、_status = CHECK_KEY_UP) /如果當(dāng)前處于檢查抬起階段,進(jìn)行以下操作if (_check_key(_key_idx) = KEY_UP) /判斷當(dāng)前掃描鍵的狀態(tài),若為抬起標(biāo)志則result = _key_idx;/鍵值輸出_key_status = CHECK_KEY_DOWN;/按鍵檢查階段標(biāo)志改為壓下if (+_key_idx = 4) /判斷是否4個(gè)按鍵已經(jīng)輪流掃描一遍_key_idx = 0;/是,則將待掃描按鍵號設(shè)為0return result;/led.c#include<reg51.h>char code map1=0x3F,0x06,0x5B,0
15、x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;char code map2=0x00,0x76,0x38;char _convert(char c)if(c=' ')return map20;else if(c='H')return map21;else if(c='L')return map22;else if(c>='0'&&c<='9')return map1c-'0'return 0;void _delay()int i=0,j=0;for(
16、i=0;i<10;i+)for(j=0;j<10;j+)void print(char name, unsigned int value) char buf6;char i = 5; for (i = 5 ; i > 1 ; i-) bufi = '0' + value % 10;value /= 10;if (value = 0) break;i-;for ( ; i >= 1 ; i-) bufi = ' 'buf0 = name; for (i = 0 ;i < 6 ;i+) P1 &= 0xC0;P1 |= (1 &
17、lt;< i);P0 = _convert(bufi);delay();/serial.asmPUBLIC_SERIALDESEGMENT CODERSEGDE_SERIAL:MOVSCON, #0MOVSBUF, R7JNB TI, $CLRTI RETEND六、 實(shí)驗(yàn)結(jié)果圖表 4程序通過編譯,并且沒有錯誤系統(tǒng)運(yùn)行效果如圖所示,參數(shù)設(shè)置狀態(tài)效果如圖所示。實(shí)際運(yùn)行情況表明,測控與參數(shù)設(shè)置著兩個(gè)環(huán)節(jié)的確是“同時(shí)”進(jìn)行的。具體表現(xiàn)為,若參數(shù)L設(shè)置為100,某一時(shí)刻的采樣值為60,那么在參數(shù)設(shè)置過程中,處于后臺運(yùn)行的控制程序還會使報(bào)警器D1在此時(shí)點(diǎn)亮。若將參數(shù)L修改為30,只要確認(rèn)保存參數(shù)后,
18、不等關(guān)閉菜單顯示,D1就會熄滅了。采用并行結(jié)構(gòu)編程是一種非常有用的設(shè)計(jì)思想,其要點(diǎn)在于可是多個(gè)程序“同時(shí)”擁有運(yùn)行權(quán)限,對外表現(xiàn)出實(shí)時(shí)多任務(wù)的效果。這類程序的關(guān)鍵在于每個(gè)程序都不能這多的占用機(jī)時(shí),因此必須設(shè)法將長時(shí)運(yùn)行改為短時(shí)運(yùn)行。本實(shí)驗(yàn)采用的運(yùn)行標(biāo)記設(shè)置的做法就是一個(gè)具體的體現(xiàn)。圖表 5測控狀態(tài)運(yùn)行效果圖表 6參數(shù)設(shè)置狀態(tài)運(yùn)行效果七、 總結(jié)通過本次試驗(yàn),我發(fā)現(xiàn)了自己對學(xué)習(xí)單片機(jī)和做實(shí)驗(yàn)中存在兩個(gè)主要缺點(diǎn):一是依賴性很大,剛開始編程序時(shí)喜歡套用書上的語句,希望從書上找到源代碼,但是當(dāng)我從別處找來源代碼時(shí),卻很難讀懂別人寫的代碼,也就是對語句的理解不夠。于是當(dāng)我在調(diào)試程序控制protues仿真軟件時(shí)出現(xiàn)了很多
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 制式勞動合同樣本
- 鄉(xiāng)鎮(zhèn)土地流轉(zhuǎn)合同樣本
- 分銷員合同標(biāo)準(zhǔn)文本
- 農(nóng)村山房買賣合同樣本
- 養(yǎng)生館客戶滿意度調(diào)查與接待流程
- 高一化學(xué)課程評價(jià)體系建設(shè)計(jì)劃
- 人教版九年級英語教學(xué)計(jì)劃國際交流項(xiàng)目
- 工業(yè)廠房改造工程的施工管理措施
- 中學(xué)英語寫作工作坊活動計(jì)劃
- RMMM計(jì)劃助力企業(yè)數(shù)字化轉(zhuǎn)型
- 青島市李滄區(qū)教育系統(tǒng)招聘中小學(xué)教師筆試真題2024
- 福建省部分地市2025屆高中畢業(yè)班4月診斷性質(zhì)量檢測英語試題(含答案無聽力音頻無聽力原文)
- 急診護(hù)理人文關(guān)懷成效匯報(bào)
- 2024北京中學(xué)高二(下)期中數(shù)學(xué)試題及答案
- 電力技術(shù)監(jiān)督專責(zé)人員上崗資格考試題庫汽輪機(jī)技術(shù)監(jiān)督分冊
- 榜樣的力量有一種力量叫榜樣的力量課件
- 防控醫(yī)療糾紛課件
- 攪拌站的施工方案
- 陜西省扶風(fēng)縣法門小學(xué)-小學(xué)班主任帶班方略【課件】
- 2024年司法考試完整真題及答案
- 雷雨-劇本原文-高中語文雷雨劇本原文
評論
0/150
提交評論