




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上2012-2013學年 第一學期論文題目:單片機系統設計開發應用智能儀器學 院:計算機科學與信息工程專 業:軟件工程學 號:姓 名:高紅斌日 期:2013年12月1日單片機系統設計開發應用智能儀器一、 設計要求及目的本實驗通過一個單通道通用型智能儀器的軟硬件系統設計,將這學期學過的單片機原理加以綜合運用,以此掌握單片機應用系統的設計要領,本次試驗設計的總體目標是一路電壓信號輸入和兩路報警開關量輸出控制功能,其中信號電壓范圍05VDC,AD采樣分辨率8bit,數碼管顯示信息為:以為參數字符和三位十進制采樣值,控制參數有兩個,即下限報警值L和上線報警值H,當采樣值大于H時
2、,高位報警繼電器接通(用LED狀態燈D1亮表示);當采樣值小于L時,下位報警繼電器接通(用D2表示);當采樣值介于L和H之間時,兩路報警器功能均被解除(D1和D2均熄滅表示)二、 實驗環境微型計算機一臺,軟件,keilC編譯器。三、 元器件列表,圖表 1四、 實驗原理本實驗選用了一只六聯共陰極數碼管顯示器,按照動態顯示原理接線,其中段碼通過鎖存器74LS245驅動后接于P0口,位碼則有反相器74LS04驅動后接于P1.0-P1.5。A/D轉換器采用逐次逼近方式的芯片ADC0809,其并行數據輸出端直接連接于P2口,4個控制端CLOCK,START,EOC,和OE分別接于P3.2-P3.5,采用
3、查詢法等待轉換結束,轉換時鐘利用定時器中斷產生。四個面板按鍵通過8位串行輸入并行輸出移位寄存器74LS164與單片機接口,其移位時終端與單片機的TXD引腳相連,串行數據端(1和2腳)與單片機的RXD引腳相連,串口輸出功能采用匯編語言與C51語言混合編程實現。軟件系統采用一個有多個功能模塊構成的程序,模塊之間相互依賴,他們之間的關系如圖,程序有主要的兩個功能模塊組成控制模塊和菜單模塊。這兩個模塊能夠同時運行。這里,“同時”的意思是指用戶進行菜單操作的時候,程序還能采集數據并進行控制。圖表 2軟件系統結構組成“控制”和“菜單”這兩個主要的模塊都是建立在其他小模塊的基礎上的,比如控制模塊建立在A/D
4、轉換和LED 顯示的基礎上,菜單建立在按鍵檢測和LED顯示的基礎上,而按鍵檢測又建立在串口輸出的基礎上。下表列出了各個模塊的主要函數。圖表 3各個模塊的主要函數和功能五、 程序源代碼/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' /參數名的符號unsigned char _menu_value = 0,0;/供顯示用的參數數組unsigned char _menu_idx = 0; /參數序號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) /當前菜單為關閉狀態時if (key = 0)/若按鍵0已被按下menu_status = MENU_ON;/置當前菜單為打開狀態_menu_idx = 0;/設置參數序號0/將所有參數當前值取出,送入供顯示的參數數組中for (i = 0 ; i < MENU_NUM ; i+) _menu_valuei = param_valuei; else /如果當前菜單為打開狀態,則進行以下操作:if (key = 0) /若按鍵0按下,則不保存鍵值,僅切換到下一個參數if (+_menu_idx
7、 = MENU_NUM) /判斷是否所有參數都循環到了menu_status = MENU_OFF; /若已循環完成,設置菜單關閉狀態 else if (key = 1) /若按鍵1按下,則保存鍵值,并切換到下一個參數param_value_menu_idx = _menu_value_menu_idx;if (+_menu_idx = MENU_NUM) menu_status = MENU_OFF; else if (key = 2) /若按鍵2按下,則參數值加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按下,則參數值減10_menu_value_menu_idx -= 10;if (_menu_value_menu_idx < MENU_MIN) _menu_value_menu_idx = MENU_MIN;if (menu_status = MENU_ON) /菜單狀態為開時,顯示參數值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轉換unsigned char value = ad();/第2步:根據采樣值控制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步:如果菜單是關閉的,顯示采集到的數值if (menu_status = 1) print(' ', value);/keyboard.c#include <reg51.h>#define CHECK_KEY_DOWN 0 /處在檢測按鍵壓下階段標志#define CHECK_KEY_UP 1 /處在檢測按鍵抬起階段標志#define KEY_UP0 /按鍵抬起標志#define KEY_DOWN1 /按鍵壓下標志sbit _p33 = P33;sbi
12、t _p34 = P34;sbit _p35 = P35;sbit _p36 = P36;char _key_status = CHECK_KEY_DOWN; /按鍵檢測狀態(初值為檢測壓下階段)char _key_idx = 0; /按鍵序號void serial(char byte);char _check_key(unsigned char _key_idx) /檢查按鍵狀態serial(0x01<<_key_idx); /將待查按鍵鍵碼轉換成掃描碼后輸出if (_p36 = 0) /根據P36狀態決定返回值return KEY_DOWN; else return KEY_U
13、P;char get_key(void) char result = -1; /無鍵按下時鍵值為-1if (_key_status = CHECK_KEY_DOWN) /如果當前處于檢查壓下階段,進行以下操作if (_check_key(_key_idx) = KEY_DOWN) /判斷當前掃描鍵的狀態,若為壓下標志則_key_status = CHECK_KEY_UP; /將檢查階段標志設置為抬起 else /否則,將檢查階段標志設置為壓下if (+_key_idx = 4) /判斷是否4個按鍵已經輪流掃描一遍_key_idx = 0;/是,則將待掃描按鍵號設為0 else if (_key
14、_status = CHECK_KEY_UP) /如果當前處于檢查抬起階段,進行以下操作if (_check_key(_key_idx) = KEY_UP) /判斷當前掃描鍵的狀態,若為抬起標志則result = _key_idx;/鍵值輸出_key_status = CHECK_KEY_DOWN;/按鍵檢查階段標志改為壓下if (+_key_idx = 4) /判斷是否4個按鍵已經輪流掃描一遍_key_idx = 0;/是,則將待掃描按鍵號設為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六、 實驗結果圖表 4程序通過編譯,并且沒有錯誤系統運行效果如圖所示,參數設置狀態效果如圖所示。實際運行情況表明,測控與參數設置著兩個環節的確是“同時”進行的。具體表現為,若參數L設置為100,某一時刻的采樣值為60,那么在參數設置過程中,處于后臺運行的控制程序還會使報警器D1在此時點亮。若將參數L修改為30,只要確認保存參數后,
18、不等關閉菜單顯示,D1就會熄滅了。采用并行結構編程是一種非常有用的設計思想,其要點在于可是多個程序“同時”擁有運行權限,對外表現出實時多任務的效果。這類程序的關鍵在于每個程序都不能這多的占用機時,因此必須設法將長時運行改為短時運行。本實驗采用的運行標記設置的做法就是一個具體的體現。圖表 5測控狀態運行效果圖表 6參數設置狀態運行效果七、 總結通過本次試驗,我發現了自己對學習單片機和做實驗中存在兩個主要缺點:一是依賴性很大,剛開始編程序時喜歡套用書上的語句,希望從書上找到源代碼,但是當我從別處找來源代碼時,卻很難讀懂別人寫的代碼,也就是對語句的理解不夠。于是當我在調試程序控制protues仿真軟件時出現了很多
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CECS 10200-2022內襯聚乙烯錨固板鋼筋混凝土排水管
- T/CCS 035-2023煤礦固定場所巡檢機器人技術規范
- T/CCMSA 40839-2023全自錨柔性接口鋼管及管件
- T/CCMA 0183-2024推土機排氣污染物車載測量方法
- T/CCMA 0155-2023流動式起重機排氣煙度汽車起重機和全地面起重機測量方法
- T/CCMA 0093-2020濕混凝土處理系統
- T/CCAS 013.1-2020水泥企業潤滑管理第1部分:水泥企業潤滑管理導則
- T/CATCM 024-2023中藥農業固體廢棄物循環利用指導原則
- T/CAQI 59-2018污(廢)水生物處理移動床生物膜反應器系統工程技術規范
- T/CAQI 54-2018波輪式免污洗衣機
- 水電站擴建工程砂石加工系統施工組織設計
- 蒙牛冰淇淋經銷商管理制度
- 2022年湛江市中考聯考物理試題含解析
- 振動測量評價標準介紹
- 配方法練習題
- 外協出入庫流程
- 復習:金屬的化學性質
- 公路隧道斜井與正洞交叉口施工方法
- 出庫單樣本12623
- 衛生保潔檢查表
- 年產10萬噸氯乙烯工藝設計(共53頁)
評論
0/150
提交評論