《微計算機與單片機原理及應(yīng)用》第12章 單片機應(yīng)用系統(tǒng)設(shè)計_第1頁
《微計算機與單片機原理及應(yīng)用》第12章 單片機應(yīng)用系統(tǒng)設(shè)計_第2頁
《微計算機與單片機原理及應(yīng)用》第12章 單片機應(yīng)用系統(tǒng)設(shè)計_第3頁
《微計算機與單片機原理及應(yīng)用》第12章 單片機應(yīng)用系統(tǒng)設(shè)計_第4頁
《微計算機與單片機原理及應(yīng)用》第12章 單片機應(yīng)用系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第12章單片機應(yīng)用系統(tǒng)設(shè)計

本章重點:單片機應(yīng)用系統(tǒng)的一般設(shè)計流程;數(shù)顯定時器和數(shù)字溫度計的設(shè)計與實現(xiàn)。本章難點:單片機應(yīng)用系統(tǒng)的可靠性設(shè)計。12.1單片機應(yīng)用系統(tǒng)設(shè)計方法

12.1.1單片機應(yīng)用系統(tǒng)的結(jié)構(gòu)特點單片機應(yīng)用系統(tǒng)的一般結(jié)構(gòu)

12.1.2應(yīng)用系統(tǒng)設(shè)計的基本原則不論單片機應(yīng)用系統(tǒng)具體如何實現(xiàn),都必須完全達到設(shè)計目標規(guī)定的各項要求。設(shè)計目標來自用戶需求,其中既包括功能需求,也包括使用環(huán)境、可靠性、安全性、實時性、體積、成本、功耗等諸多方面的具體要求。開發(fā)人員必須認真領(lǐng)會用戶需求,反復(fù)推敲設(shè)計方案,方案確定后,盡快展開硬件、軟件的具體設(shè)計與系統(tǒng)調(diào)試,務(wù)求在規(guī)定的期限內(nèi),開發(fā)出滿足各項要求的目標系統(tǒng)。12.1.3應(yīng)用系統(tǒng)設(shè)計的一般流程

1.需求分析設(shè)計任何一個應(yīng)用系統(tǒng),首先必須對設(shè)計目標(用戶需求)進行認真分析,明確各項具體要求,不允許出現(xiàn)任何偏差和遺漏,否則,就可能造成難以彌補的損失。

2.總體設(shè)計總體設(shè)計的任務(wù)是根據(jù)設(shè)計目標的要求,確定一套最優(yōu)的、合理的、切實可行的實現(xiàn)方案。

(1)軟硬件功能劃分硬件實現(xiàn)的好處是速度快,可簡化軟件設(shè)計,減少存儲器開銷,但硬件接線復(fù)雜,批量成本較高。用軟件實現(xiàn)則剛好相反。(2)單片機選型單片機選型是否合理、恰當,對整個系統(tǒng)的成本和各項指標的實現(xiàn)有很大影響。單片機選型的主要考慮包括:

①片內(nèi)資源的種類、數(shù)量和性能應(yīng)與設(shè)計目標要求相匹配。

②單片機本身的性價比要高,以提高整個系統(tǒng)的性價比。

③貨源要穩(wěn)定,以利于批量生產(chǎn)和售后服務(wù)。

④有較完善的開發(fā)工具支持。

⑤選用加密性能相對較好的單片機,以利于保護自有知識產(chǎn)權(quán)。

⑥盡量選用熟悉的單片機型號或系列,以縮短研制周期,降低開發(fā)風(fēng)險。

(3)確定系統(tǒng)總體結(jié)構(gòu)總體設(shè)計的結(jié)果通常包括硬件結(jié)構(gòu)框圖、軟件結(jié)構(gòu)框圖、狀態(tài)轉(zhuǎn)換圖和相應(yīng)的文字說明。3.硬件設(shè)計(1)單片機最小系統(tǒng)設(shè)計最小系統(tǒng)是保證單片機程序運行的基本硬件條件。(2)單片機外圍電路設(shè)計(3)PCB設(shè)計(4)可靠性設(shè)計4.軟件設(shè)計(1)基于模塊的功能分解根據(jù)總體設(shè)計階段確定的軟件總體框架,將軟件系統(tǒng)向下分解為不同層次的支持模塊,明確各模塊的輸入、輸出及相互調(diào)用關(guān)系。(2)定義數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)是程序代碼的操作對象。軟件系統(tǒng)中的數(shù)據(jù)有些是局部的,可以封裝在模塊內(nèi)部,還有一些是全局性的,可為不同模塊共享。(3)流程圖設(shè)計對于復(fù)雜且又難以分解的模塊,應(yīng)當用流程圖進一步表示其程序結(jié)構(gòu),特別是使用匯編語言時。(4)編寫源程序單片機程序設(shè)計可使用匯編語言或C語言。C語言還可以通過嵌入?yún)R編語句進一步提高執(zhí)行效率。目前,使用C語言開發(fā)單片機程序已成為一種趨勢。(5)可靠性設(shè)計相對通用的可靠性措施包括開機自檢、看門狗、軟件陷阱、數(shù)字濾波、越界報警、超時退出、數(shù)據(jù)緩沖、校驗、備份與自動恢復(fù)等。5.系統(tǒng)調(diào)試系統(tǒng)調(diào)試需借助必要的開發(fā)、測試儀器,其中以萬用表最為常用。近年來,單片機廣泛采用在線編程(有ISP和IAP兩種方式)和在線調(diào)試(ICD)技術(shù),將單片機1~4根相關(guān)口線通過信號轉(zhuǎn)換、驅(qū)動電路連接到PC機的串口或并口,便可進行在線下載或仿真調(diào)試,省去了昂貴的仿真器和編程器,大大降低了開發(fā)門檻。單片機應(yīng)用系統(tǒng)的調(diào)試包括硬件調(diào)試、軟件調(diào)試和軟硬件聯(lián)合調(diào)試。軟件調(diào)試是在沒有實際硬件支持下借助PC軟件環(huán)境(如KeilC51、Proteus等)模擬運行單片機應(yīng)用程序,以排除可能存在的邏輯錯誤。聯(lián)合調(diào)試就是將完整的應(yīng)用程序加載到單片機(包括支持在線調(diào)試的單片機)或仿真器,以連續(xù)、單步、斷點等方式控制程序運行,通過人機交互和外設(shè)動作的狀況,找出軟件或硬件方面存在的問題,直到系統(tǒng)工作正常為止。6.現(xiàn)場測試所設(shè)計的目標系統(tǒng)最終需要在用戶規(guī)定的環(huán)境條件下運行,因此,必須將實驗室調(diào)好的樣機拿到現(xiàn)場進行測試,驗證其運行效果。另外,某些性能指標(如抗靜電、抗脈沖干擾)還必須通過認證測試。從整體方案到具體設(shè)計(硬件、軟件),所有可以提升和優(yōu)化的地方都要認真考慮,加以改進,以求最終實現(xiàn)各項功能和性能指標。7.文檔整理規(guī)范、完整的技術(shù)文檔(方案論證報告、原理圖、流程圖、帶注釋的源程序清單、測試報告、設(shè)計總結(jié)、操作手冊等)不僅有利于系統(tǒng)的維護與升級,為以后的設(shè)計工作提供借鑒,也是系統(tǒng)驗收、成果鑒定、專利申請、軟件登記等工作的重要支撐材料。單片機應(yīng)用系統(tǒng)設(shè)計的一般流程

12.2數(shù)顯定時器的設(shè)計

12.2.1設(shè)計目標與要求設(shè)計一個最長為99分鐘的數(shù)顯可調(diào)定時器。具體功能如下:通電時兩位數(shù)碼管顯示為“99”,以后每分鐘自動減一,減到零時,蜂鳴器持續(xù)發(fā)出“嘀嘀…嘀嘀…”的鬧鈴聲,并通過I/O引腳輸出相應(yīng)的控制信號。按下兩個控制鍵中的任一個可停止鬧鈴及控制輸出,此后任何時刻再按任一鍵又重新開始新一輪定時??赏ㄟ^兩個控制鍵上下動態(tài)調(diào)整定時時間。12.2.2設(shè)計方案論證

數(shù)顯定時器總體結(jié)構(gòu)

12.2.3硬件設(shè)計數(shù)顯定時器硬件原理圖

串口電平轉(zhuǎn)換電路

12.2.4軟件設(shè)計

1.主控模塊主控模塊的流程

2.定時中斷處理模塊定時中斷處理模塊的流程

3.數(shù)碼顯示模塊數(shù)碼顯示模塊的流程

4.鍵盤掃描模塊鍵盤掃描模塊的流程

12.2.5系統(tǒng)調(diào)試首先按圖進行電路焊接與裝配,用萬用表進行檢測,確認連接無誤后,先分別編寫與數(shù)碼管、蜂鳴器、按鍵有關(guān)的測試程序,利用KeilC51集成開發(fā)軟件生成代碼并下載到單片機運行,以確認各硬件單元都能正常工作。接下來,編寫完整的數(shù)顯定時器程序,生成代碼后下載到單片機連續(xù)運行或在線調(diào)試。發(fā)現(xiàn)問題時,應(yīng)從多方面查找原因。每次修改源程序后,都必須重新生成代碼并下載到單片機,再次進行調(diào)試,直到系統(tǒng)完全正常工作。12.2.6數(shù)顯定時器的完整程序(C51)/***********************頭文件聲明*********************/#include<reg51.h>/*****************符號常量及口線分配聲明****************/#defineDISP_SEGP0sbitDISP_D1=P2^7;sbitDISP_D2=P2^6;sbitCTRL_OUT=P2^0;sbitBUZZ=P1^0;sbitKEY1=P1^2;sbitKEY2=P1^4;#defineKEY_NULL0#defineKEY1_PRESSED1#defineKEY2_PRESSED2/**********************函數(shù)原型聲明********************/voidInitTimer();unsignedcharScanKey();voidDisplayTime();voidDiDi();voidDelay(intms);voidDelay1ms();/****************常量數(shù)組(段碼表)聲明****************/unsignedcharcodeSegCode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};/********************全局變量聲明*********************/unsignedintCount50ms=0;unsignedcharMinute=99;void(*codeRESET)()=0x0000;//函數(shù)指針RESET指向復(fù)位入口/*******************中斷服務(wù)函數(shù)**********************/voidT0ISR(void)interrupt1{TH0=(65536-50000)>>8;//重裝T0定時初值(50ms@12Mhz)

TL0=(65536-50000)&0xFF;if(++Count50ms<1200)return;//未滿1分鐘的話直接返回

Count50ms=0;//1分鐘已到,Count50ms清0Minute--;//Minute減1}/**********************主函數(shù)*********************/voidmain(){unsignedchari,KeyPress;

InitTimer();//定時器初始化

while(1)//無限循環(huán)

{

Delay(10);//延時10ms

DisplayTime();//顯示分鐘值

if(Minute==0)//分鐘值是否已減到0?

{TR0=0;//定時時間已到,T0停止

CTRL_OUT=0;//輸出控制信號

while(1){

DiDi();//蜂鳴器發(fā)聲

for(i=0;i<70;i++) { Delay(10);

if(ScanKey()!=KEY_NULL) {CTRL_OUT=1;//有鍵按下,關(guān)閉控制輸出

while(ScanKey()!=KEY_NULL);//等待按鍵釋放

while(ScanKey()==KEY_NULL);//等待有鍵按下

while(ScanKey()!=KEY_NULL);//等待按鍵釋放

(*RESET)();//重新啟動系統(tǒng)

} }} }

if((KeyPress=ScanKey())!=KEY_NULL)//是否有鍵按下

{

if(KeyPress==KEY1_PRESSED){

if(Minute<99)Minute++;//KEY1按下,分鐘值加1}elseif(KeyPress==KEY2_PRESSED){

if(Minute>1)Minute--;//KEY2按下,分鐘值減1 }

while(ScanKey()!=KEY_NULL)DisplayTime();//等待按鍵釋放

Count50ms=0;//Count50ms清0}}}/********************定時器初始化函*********************/voidInitTimer(){TMOD=0x01;//設(shè)T0為定時方式1(16位方式)

TH0=(65536-50000)>>8;//設(shè)T0定時初值(50ms@12Mhz)

TL0=(65536-50000)&0xFF;TR0=1;//啟動T0ET0=1;//允許T0中斷

EA=1;}/******************鍵盤掃描函數(shù)*********************/unsignedcharScanKey(){if(KEY1==1&&KEY2==1)returnKEY_NULL;//無鍵按下,返回KEY_NULLDelay(10);//消抖

if(KEY1==1&&KEY2==1)returnKEY_NULL;//無鍵按下,返回KEY_NULLif(KEY1==0)returnKEY1_PRESSED;//KEY1按下,返回KEY1_PRESSEDif(KEY2==0)returnKEY2_PRESSED;//KEY2按下,返回KEY2_PRESSEDreturnKEY_NULL;//無鍵按下,返回KEY_NULL}/******************時間顯示函數(shù)*********************/voidDisplayTime(){

DISP_SEG=SegCode[Minute/10];//輸出分鐘值十位的段碼

DISP_D1=0;//高位數(shù)碼管顯示

DISP_D2=1;//低位數(shù)碼管熄滅

Delay1ms();//延時1ms//DISP_SEG=SegCode[Minute%10];//輸出分鐘值個位的段碼

DISP_SEG=SegCode[Minute%10]&((Count50ms/10%2)==0?0x7f:0xff);DISP_D1=1;//高位數(shù)碼管熄滅

DISP_D2=0;//低位數(shù)碼管顯示

Delay1ms();//延時1msDISP_D2=1; //低位數(shù)碼管熄滅}/******************蜂鳴器發(fā)聲函數(shù)*******************/voidDiDi(){unsignedchari;

for(i=0;i<2;i++)//蜂鳴器響兩聲

{BUZZ=0;//蜂鳴器通電50msDelay(50);BUZZ=1;//蜂鳴器斷電100msDelay(100);}} /*******************延時函數(shù)*******************/voidDelay(intms){do{Delay1ms();}while(--ms);}/*****************延時1ms函數(shù)*******************/voidDelay1ms(){unsignedchari;

for(i=164;i;i--);}/********************程序結(jié)束*******************/12.3數(shù)字溫度計的設(shè)計

12.3.1設(shè)計目標與要求設(shè)計一個以單片機為核心的數(shù)字溫度計,可在數(shù)碼管上顯示出溫度傳感器采集的數(shù)據(jù),超過37.5℃時,由蜂鳴器給出報警提示。溫度測量范圍為0~99.9℃,誤差在±0.5℃以內(nèi)。

12.3.2設(shè)計方案論證數(shù)字溫度計的總體結(jié)構(gòu)

12.3.3硬件設(shè)計

數(shù)字溫度計硬件原理圖

12.3.4軟件設(shè)計主控模塊流程圖

溫度采集模塊的流程

12.3.5系統(tǒng)調(diào)試數(shù)碼管顯示器的調(diào)試:先編寫數(shù)碼管動態(tài)顯示的測試程序,利用KeilC51集成開發(fā)軟件生成代碼并加載到仿真器或直接下載到單片機觀察運行效果。如果不能正常顯示,可檢查數(shù)碼管是否用錯或接錯,驅(qū)動數(shù)碼管公共陽極的三極管是否損壞或有連接題。DS18B20的調(diào)試:DS18B20對工作時序有嚴格要求,程序中與DS18B20驅(qū)動有關(guān)的延時時間可能需要多次調(diào)整后,才能與單片機進行正常的通信。有條件的話,可使用數(shù)字示波器觀察延時時間是否達到要求。12.3.6數(shù)字溫度計的完整程序(C51)/*******************頭文件聲明******************/#include<REG51.h>/******************數(shù)據(jù)類型定義*****************/typedefunsignedcharuint8;typedefunsignedintuint16;/************符號常量及口線分配聲明**************/#defineDISP_SEGP0sbitDISP_D1=P2^2;sbitDISP_D2=P2^1;sbitDISP_D3=P2^0;sbitBUZZ=P1^7;sbitDS18B20_DATA=P1^0;/*******************函數(shù)原型聲明**********************/voidDS18B20Init();voidDS18B20BitWrite(bitBit);bitDS18B20BitRead();voidDS18B20ByteWrite(uint8Byte);uint8DS18B20ByteRead();voidGetTemperature();voidDispTemperature();voidCheckTemperature();voidDelay(uint16ms);voidDelay1ms();/****************常量數(shù)組(段碼表)聲明****************/uint8codeSegCode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};/*****************全局變量聲明*****************/intTemperature;/******************主函數(shù)*********************/voidmain(){while(1){

GetTemperature();//獲取當前溫度

DispTemperature();//顯示當前溫度

CheckTemperature();//超溫報警處理

}} /************DS18B20初始化函數(shù)****************/voidDS18B20Init(){uint8i;while(1){DS18B20_DATA=0;i=200;while(--i!=0);//延時800usDS18B20_DATA=1;i=15;while(--i!=0);//延時60usif(DS18B20_DATA==1)continue;//重發(fā)復(fù)位脈沖

i=30;while(--i!=0);//延時120usif(DS18B20_DATA==1)break;//復(fù)位成功

}i=75;while(--i!=0);//延時300us}/*************DS18B20位寫操作函數(shù)**************/voidDS18B20BitWrite(bitBit){uint8i;DS18B20_DATA=0;i=1;while(--i!=0);//延時4usDS18B20_DATA=Bit;//發(fā)送1位數(shù)到DS18B20i=14;while(--i!=0);//延時56usDS18B20_DATA=1;}/************DS18B20位讀操作函數(shù)***************/bitDS18B20BitRead(){bittemp;uint8i;DS18B20_DATA=0;i=3;while(--i!=0);//延時12usDS18B20_DATA=1;temp=DS18B20_DATA;//讀來自DS18B20的1位數(shù)

i=12;while(--i!=0);//延時48usreturntemp;}/****************DS18B20字節(jié)寫操作函數(shù)***************/voidDS18B20ByteWrite(uint8Byte){uint8count;

for(count=0;count<8;count++)//一共發(fā)送8位

{

if((Byte&0x01)==0x01)//先發(fā)最低位

DS18B20BitWrite(1);//發(fā)送1elseDS18B20BitWrite(0);//發(fā)送0Byte>>=1;}}/************DS18B20字節(jié)讀操作函數(shù)*************/uint8DS18B20ByteRead(){uint8count,temp;temp=0;

for(count=0;count<8;count++)//一共讀8位

{

temp>>=1;//字節(jié)變量右移

if(DS18B20BitRead()==1)//讀取1位數(shù)據(jù)并存入臨時變量temp中

temp|=0x80;//temp最高位置1}returntemp;//返回讀到的8位數(shù)}/*****************溫度獲取函數(shù)*****************/voidGetTemperature(){

uint8ADResult[2];DS18B20Init();DS18B20ByteWrite(0xcc);//跳過ROM(只有一個DS18B20)

DS18B20ByteWrite(0x44);//啟動溫度采集(轉(zhuǎn)換)

while(DS18B20BitRead()==0)DispTemperature();//等待轉(zhuǎn)換結(jié)束,期間不斷刷新顯示

DS18B20Init();//溫度轉(zhuǎn)換結(jié)束,再次初始化

DS18B20By

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論