版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育行業(yè)軟文投放白皮書:品牌企業(yè)策略與渠道優(yōu)化指南(傳聲港定制版)
- 2025年漳州質(zhì)檢道法試卷及答案
- 2025年初中音樂試卷試題及答案
- 2025年導(dǎo)游才藝技能試題及答案
- 2025年女性出軌率測試題及答案
- 膩子涂料施工合同范本
- 機電精裝合同范本
- 個人租房合同范本模板
- 安置房房產(chǎn)合同范本
- 口腔護理牙刷的選購指南
- 醫(yī)療糾紛預(yù)防的平臺
- GB/T 46571-2025日期和時間詞匯
- 2025中國長壽醫(yī)學(xué)與抗衰展望
- 羊水穿刺醫(yī)學(xué)科普
- 2025年影像科工作總結(jié)
- 注塑件測量培訓(xùn)講義
- 珠寶店面安全應(yīng)急預(yù)案
- 2025年國家開放大學(xué)(電大)《民法學(xué)》期末考試復(fù)習(xí)試題及答案解析
- 集成電路芯片設(shè)計企業(yè)組織架構(gòu)詳解
- DB1303∕T381-2024 神經(jīng)外科圍手術(shù)期護理指南
- 靜脈血栓的評估與處理
評論
0/150
提交評論