LED表單片機自身異步數據傳輸電路組件清單7-5序號名稱規格數量所屬類所屬子類個

1AT89C5124MHz1MicroprocessorICs8051Family個———2CRYSTAL12MHz1Miscellaneous個

3CAP30pF2CapacitorsGenericm\/個4CAP-ELEC0.1F25V1CapacitorsGenericW個5RES100k1ResistorsGeneric按鈕個6BUTTON1Switches&RelaysSwitchesW個7RES2208ResistorsGenericW個8RES10k8ResistorsGeneric燈個9LED-REDLED8OptoelectronicsLEDs隻

10DIPSW-81Switches&RelaysSwitches圖單片機自身異步數據傳輸電路7-15項目七單片機串行口的應用·119·單片機自身異步數據傳輸———顯示自身開關狀態程序:LEDDIP\/程序———單片機自身異步數據傳輸程序\/*704.c*\/\/包含檔#includereg51.h\/\/定義位置#defineLEDP1LED_\/\/定義指撥開關位置#defineDIPSWP2()\/\/主程式開始main{;\/\/將設定為:內部軟件啟動、定時器、TMOD|=0x20T1MODE2模式,由決定串行口速率T1;\/\/將設定為PCON&=0x7fSMOD0;\/\/波特率設定約為()TH1=TL1=0xfd9600bps12MHz;\/\/軟件啟動,在中TR1=1T1TR1TC0N;\/\/串行口設定為SCON=0x50MODE1\/\/====b7===b6===b5===b4===b3===b2===b1===b0===\/\/===SM0==SM1==SM2==REN==TB8==RB8===TI===RI===\/\/=====0====1====0====1====0====0====0====0===()\/\/循環開始while1while{_;\/\/先恢複端,最終值還是由開關決定DIPSW=0xffP2P2DIP_;\/\/將指撥開關狀態,放入發送立即發出SBUF=DIPSWSBUF();\/\/等待接收whileRI==0;\/\/時(接收完成),清除RI=0RI=1RI;\/\/將所接收的信息輸出到LED=SBUFLED;\/\/清除TI=0TI}\/\/循環結束while}\/\/主程式結束在桌麵上新建“單片機自身異步數據傳輸”文件夾,同樣參考“項目三\/典型任務一\/做中學”通過軟件經過“項目管理\/參數選項\/源程序的創建、輸入、保存\/添加源程KeilμVision3序到項目\/編譯源程序\/開啟調試會話\/運行目標程序並觀察結果”等七步驟將“程序”編704.c譯產生“程序”文件,參數設置時項目名可取“項目”,文件名取“程序”,結果如704.hex704704圖所示。

7-16·120·單片機控製設備安裝與調試圖中程序調試界麵7-16KeilμVision3704.c打開軟件仿真,按表組件清單經過“拾取元件\/布局ProteusISIS7Professional7-5元件\/修改元件參數\/畫線連接\/為單片機添加程序\/設置動畫\/運行仿真”等七步驟仿真電路運行,結果如圖所示。

7-17圖單片機自身異步數據傳輸電路7-17ISIS7Professional項目七單片機串行口的應用·121·學中記需要記住的單片機串行口後三種工作模式為、、,均采用全雙工、異步發MODE1MODE2MODE3送\/接收方式,端口專門用於接收數據,端口專門用於發送數據。

RxDTxD異步發送\/接收方式信號本身帶了起始位和停止位,發送端可隨時發送,接收端可根據起始位和停止位知道信號開始和結束,工作時不需要同步時鍾,但發送方和接收方工作時鍾相差要小於。

2.5%單片機串行口在工作模式時,數據傳輸波特率是固定的,為f\/,如fMODE0osc12osc=12則數據傳輸波特率固定為\/。

MHz1Mbits串行口在工作模式時,數據傳輸波特率是相對固定的,有兩種,公式為:MODE2SMOD波特率2f=×osc64在、下數據傳輸速率是可變的,可由定時器的計數值確定速率,波MODE1MODE3T1SMODfSMODf特率2osc2osc=×計數值=×().

3212×3212×256-TH1需要掌握的電源寄存器、串行口寄存器的使用。

PCONSCON發送端和接收端的使用。

SBUFSBUF串行口工作在和模式時,通過設置的值設定內部軟件啟MODE1MODE3TMODT1動、定時器狀態、模式,再由的值查表確定串行口速率。

MODE2T17-3需要弄懂和理解的逐句弄懂和理解程序單片機與單片機相互異步數據傳輸———相互顯示對方703.c-LED開關狀態程序,程序單片機自身異步數據傳輸程序。

DIP704.c-練與評回答問題或完成操作問題占分學生作答情況實際得分單片機串行口四種工作模式、、MODE0MODE1MODE、,哪些采用同步數據傳輸方式,哪些采用異步2MODE32數據傳輸方式·122·單片機控製設備安裝與調試回答問題或完成操作問題占分學生作答情況實際得分單片機端口、端口哪個是發送端,哪個是接RxDTxD收端2;;分別代表的含義PCON|=0x80SCON=0x902;

TMOD|=0x20PCON&=0x7f;分別代表的含義3TH1=TL1=0xfd_;SBUF=DIPSWLED=SBUF哪個代表發送端?哪個代表接收端2SBUFSBUF總分11實際得分典型任務三單片機多處理器數據傳輸教中學多處理器通信的係統結構多處理器通信采用主\/從結構,一個主處理器與多個從處理器采用主從相連方式,如圖所示。主處理器的端與所有從處理器的端相連,主處理器的端與所有7-18TxDRxDRxD從處理器的端相連。

TxD圖多處理器通信的主\/從係統結構7-18多處理器數據傳輸串行口寄存器的設置SCON多處理器數據傳輸串行口一般采用或工作模式,他們都是位異步數MODE2MODE39據傳輸方式。如圖所示。

SCON7-1發送處理器設置:首先、設置為()或();SCONSM0SM110MODE211MODE3SM2=,為多處理器通信方式;,為接收使能(發送端不用);為發送的第位(接收端不1REN=1TB89用),為發送地址,為發送數據;為接收的第位(發送端不用);發送TB8=1TB8=0RB89TI項目七單片機串行口的應用·123·完成中斷標誌;接收完成中斷標誌(接收時用)。

RI接收處理器設置為:、設置為()或()要與發送端SCONSM0SM110MODE211MODE3同;時,隻接收地址,不接收數據,時,接收數據;為接收使能;為SM2=1SM2=0REN=1TB8發送的第位(接收端不用);為接收的第位,為接收的地址,接收的為9RB89RB8=1RB8=0數據;發送完成中斷標誌(發送時用);接收完成中斷標誌。

TIRI多處理器數據傳輸地址的自動識別多處理器數據發送之前,首先發送地址,接收端將接收到的地址與自己的地址相比較,如果與自己的地址相同,則,接收數據;否則不接收數據。

SM2=0SM2=1做中學電路要達到的效果:電路在圖的基礎上除去開關相應電路,再增加兩個單片7-12DIP機從係統,主處理器的端與其他三個從處理器的端相連,主處理器的端與其TxDRxDRxD他三個從處理器的端相連。主處理器不斷讓端的全亮或全暗;並不斷地向從處TxDP1LED理器發送地址和數據。第一個從處理器地址為,數據為(即,最後一盞燈亮);020100000001B第二個從處理器地址為,數據為(即,最後兩盞燈亮);第三個從處理器地址為030300000011B,數據為(即,最後三盞燈亮)。

040700000111B表多處理器通信電路組件清單7-6序號名稱規格數量\/個所屬類所屬子類1AT89C5124MHz4MicroprocessorICs8051Family———2CRYSTAL12MHz4Miscellaneous3CAP30pF8CapacitorsGenericm\/4CAP-ELEC0.1F25V4CapacitorsGenericW

5RES100k4ResistorsGeneric按鈕6BUTTON4Switches&RelaysSwitchesW

7RES22032ResistorsGeneric燈

8LED-REDLED32OptoelectronicsLEDs多處理器通信———主係統串行口模式程序:MODE3\/程序———主係統串行口模式———多處理器通信程序\/*705.cMODE3*\/\/包含文檔#includereg51.h\/\/定義燈位置#defineLEDP1LED\/\/函數======================_();\/\/聲明串行口初始化函數voidINITserialvoid·124·單片機控製設備安裝與調試_();\/\/發送信息函數voidsendcharchar();\/\/聲明延遲函數voiddelay1msint\/\/函數======================;\/\/我的地址unsignedcharmyAddress=0x01[]{,,};\/\/三個從係統的地址unsignedcharaddr3=0x020x030x04SLAVE[]{,,};\/\/發傳的初值unsignedcharsdata3=0x010x030x07\/\/主程序===============()\/\/主程序開始main{,;\/\/聲明變量unsignedcharij_();\/\/串行口初始化INITserial;\/\/先關閉LED=0xffLED()while1{;\/\/切換,點亮全部LED=~LEDLEDLED(;;)\/\/對三個通訊fori=0i<3i++slave{;\/\/傳送地址模式,在中TB8=1TB8SCON_([]);\/\/傳送地址sendcharaddri;\/\/傳送數據模式TB8=0[];\/\/取出數據j=sdatai_();\/\/傳送數據sendcharj();\/\/延遲delay1ms1000.1s;\/\/傳送數據模式TB8=0_();\/\/傳送反相資料sendchar~j();\/\/延遲秒delay1ms1000.1}\/\/回圈結束for}\/\/回圈結束while}\/\/主程式結束\/\/串行口初始化函數======_()voidINITserialvoid{;\/\/將設定為PCON|=0x80SMOD1;\/\/設定串行口為,多處理器通訊SCON=0xf0MODE3SM2=1;\/\/設定采用內部軟件啟動、定時器、TMOD|=0x20T1MODE2模式;\/\/()TH1=TL1=0xf34800bps12MHz;\/\/啟動TR1=1T1}\/\/結束初始化函數項目七單片機串行口的應用·125·\/\/發送數據函數======================_(_)voidsendcharcharschar{;\/\/清除TI=0TI_;\/\/發傳數據SBUF=schar(!);\/\/等待完成發傳whileTI}

\/\/延遲函數(產生個延遲)============x1ms==========()voiddelay1msintx{,;\/\/聲明變量charij(;;)\/\/計數次fori=0i

多處理器通信—從係統串行口模式程序:MODE3\/程序———多處理器通信———從係統模式程序\/*705-1.cMODE3*\/\/包含文檔#includereg51.h\/\/定義位置#defineLEDP1LED_();\/\/聲明串行口初始化函數voidINITserialvoid;\/\/我的地址,其他從處理器程序分別為unsignedcharmyAddress=0x0203.04\/\/主程序===============()\/\/主程序開始main{_();\/\/串行口初始化設定INITserial();\/\/無窮循環等待while1}\/\/主程序結束\/\/串行口初始化函數======_()voidINITserialvoid{;\/\/將設定為PCON|=0x80SMOD1;\/\/設定串行口為,多處理器通訊SCON=0xf0MODE3SM2=1;\/\/設定采用:內部軟件啟動、定時器、TMOD|=0x20T1MODE2模式;\/\/()TH1=TL1=0xf34800bps12MHz;\/\/設定串行口中斷,中斷使能寄存器中,中EA=ES=1IEEA斷總開關,串行口中斷分開關ES;\/\/啟動TR1=1T1}\/\/結束初始化函數\/\/串行口中斷子程序(中斷向量為、中斷編號為)===0x234===_()voidserialINTvoidinterrupt4{()\/\/判斷是否發生發送中斷ifTI==1;\/\/清除,準備下次的發送TI=0TI·126·單片機控製設備安裝與調試()\/\/判斷是否發生接收中斷ifRI==1{;\/\/清除,準備下次的接收RI=0RI()\/\/為地址接收ifRB8RB8=1();\/\/進入接收數據模式ifSBUF==myAddressSM2=0;\/\/非我的地址elseSM2=1;\/\/讀取接收到的數據,並輸出到elseLED=SBUFLED}\/\/結束接收程序}\/\/結束中斷子程序其他兩個從處理器程序隻要修改程序名為:程序和程序705-2.c705-3.c地址分別改為:和0x030x04在桌麵上新建“多處理器異步通信”文件夾,同樣參考“項目三\/典型任務一\/做中學”通過軟件經過“項目管理\/參數選項\/源程序的創建、輸入、保存\/添加源程序到KeilμVision3項目\/編譯源程序\/開啟調試會話\/運行目標程序並觀察結果”等七步驟將“程序”編譯產705.c生“程序”文件,參數設置時項目名可取“項目”,文件名取“程序”,結果如圖705.hex705705所示。

7-19圖中程序調試界麵7-19KeilμVision3705.c新建“程序”,輸入並保存程序。之後,鼠標右擊左側窗口中的“程序705-1.cProject”,彈出快捷菜單,選擇“‘程序’”,單擊選擇選項卡,修改“705.cRemoveFile705c.OutputNameof”框中程序名為“程序”,同樣添加“程序”到左側窗口中進行編譯,Executable705-1705-1.cProject成功後如圖所示,同樣完成“程序”和“程序”的編譯。

7-20705-2c.705-3c.

項目七單片機串行口的應用·127·圖中程序調試界麵7-20KeilμVision3705-1.c打開軟件仿真,按表組件清單經過“拾取元件\/布局元ProteusISIS7Professional7-6件\/修改元件參數\/畫線連接\/為單片機添加程序\/設置動畫\/運行仿真”等七步驟仿真電路運行,從係統可采用“塊複製”方式進行複製以保證元件標識符號的唯一性,結果如圖所示。

7-21圖多處理器異步數據傳輸電路7-21ISIS7Professional·128·單片機控製設備安裝與調試學中記需要記住的多處理器通信采用主\/從結構,主處理器的端與所有從處理器的端相連,主處TxDRxD理器的端與所有從處理器的端相連。

RxDTxD發送處理器設置:首先、設置為()或();SCONSM0SM110MODE211MODE3SM2=,為多處理器通信方式;,為接收使能(發送端不用);為發送的第位(接收端不1REN=1TB89用),為發送地址,為發送數據;為接收的第位(發送端不用);發送TB8=1TB8=0RB89TI完成中斷標誌;接收完成中斷標誌(接收時用)。

RI接收處理器設置:、設置為()或()與發送端同;SCONSM0SM110MODE211MODE3時,隻接收地址,不接收數據,時,接收數據;為接收使能;為發SM2=1SM2=0REN=1TB8送的第位(接收端不用);為接收的第位,接收的為地址,接收的為數9RB89RB8=1RB8=0據;發送完成中斷標誌(發送時用);接收完成中斷標誌。

TIRI需要掌握的通過軟件編譯多個不同的程序的方法。

KeilμVision3在仿真軟件中,會使用係統中“塊複製”方式進行複製以保持ProteusISIS7Professional元件標識符號的唯一性。

需要弄懂和理解的逐句弄懂和理解“程序———主係統串行口模式———多處理器通信程序”和705.cMODE3“程序———多處理器通信———從係統模式程序”。

705-1.cMODE3項目七單片機串行口的應用·129·練與評回答問題或完成操作問題占分學生作答情況實際得分發送處理器設置時,哪位決定發地址或數據SCON2接收處理器設置時,哪位決定接收地址或數據,SCON哪位打開地址接收和打開數據接收2發送端:;;PCON|=0x80SCON=0xf0;;4TMOD|=0x20TH1=TL1=0xf3含義是什麼接收端:();ifSBUF==myAddressSM2=0;2elseSM2=1含義是什麼接收端:;;EA=ES=1TR1=1含義是什麼2總分12實際得分第二篇課程設計與畢業設計篇單片機課程設計·131·MCS-51MCS-51單片機課程設計課程設計一般是在課程教學結尾時進行,是對學生課程教學內容掌握的進一步提高並加以綜合應用,是課程教學中的一個重要的環節。那麼如何做好課程設計工作呢?

組織單片機技術應用課程設計的步驟首先,要確定研究課題和研究隊伍。一般來說,一個課題不宜一個人做,應該由人組3~4隊完成,相互協作,相互鼓勵,容易達到好的效果。另外,課題選擇既不能太簡單,也不能太複雜,要能滿足單片機應用係統設計的一般性要求。比如,單片機控製係統要有輸入部分、處理部分和輸出部分。輸入部分一般采用鍵盤輸入或模數轉換輸入;輸出部分一般采用數ADC據顯示(包括燈顯示、數碼管顯示、點陣顯示及液晶顯示等)和電機運動等;處理部分則要LED根據係統的具體要求進行設計。

其次,分析課題任務要求,確定任務分工。任何一個課題都有若幹個任務要求。比如,鍵控多樣彩燈,我們可以采用:()可用鍵盤控製其運行及停止;()可用鍵盤控製彩燈的花樣變12化;()可用鍵盤控製彩燈的速度(加速或減速)。明確任務要求後,就要開始進行課題項目人3

員的分工。具體來說,有人側重電路設計,有人側重軟件設計,有人側重資料收集和疑難問題答案搜索,有人側重調試等。

最後,根據分工不同,認真做好設計工作。課程設計的主要工作分成三大部分:硬件電路設計、軟件設計和仿真調試。()硬件電路設計要求條理清楚,單片機的選型、最小工作電路設1

計、應用電路設計等,並附電路原理圖和所有的元件清單列表;()軟件設計要求層次清楚,軟2

件整體結構及主程序設計(附:層次模塊圖、功能性程序流程圖及相關程序代碼),輸入部分設計、應用處理部分設計、輸出部分設計(附:詳細流程圖和相關的程序代碼);()調試工作要求3

步驟清楚,硬件調試(檢查硬件存在的故障)、軟件調試(調試為主)、係統聯調(軟件與硬Keil件是否按要求完成任務),對調試中出現的問題給出合理的解決方法。

為了讓學生更好地完成課程設計工作,我們將給出一個完整的課程設計報告的範文(鍵控多樣彩燈)、三個課題設計大綱(四路智能搶答題、可控步進電機、點陣屏顯)。

16×16·132·單片機控製設備安裝與調試單片機技術應用畢業設計論文參考範文學校(學院)名稱課題名:鍵控多樣彩燈(範文)學科專業:××班級:××姓名:××學號:××指導老師:××設計時間:××單片機課程設計·133·MCS-51設計目的及設計任務要求一、設計目的學習和掌握係列單片機接口電路的設計和應用;1.51學習和掌握運用語言編製軟件;2.C51掌握單片機應用係統的設計方法、過程及實現,將理論知識與應用相結合,提高係統開3.

發能力。

二、設計任務可以通過按鍵控製其運行與否;1.

可以通過按鍵實現向左流水、向右流水、全亮全滅和交叉亮滅等四種不同模式的彩燈2.

顯示;可以通過按鍵控製彩燈顯示速度的加快或減慢;3.

可以通過七段數碼管顯示當前彩燈顯示的模式號。

4.

三、項目成員及分工要求:負責這次課程設計的總體設計、規劃,分派組員設計任務,最後調試任務,達到任務××要求;:協助項目組長完成軟件的設計,包括功能模塊圖和流程圖的繪製,然後分析流程圖,××寫出相關的程序代碼;:進行硬件的設計,使用軟件畫出仿真原理圖,列出電路設計所需的元件××Protues清單;:進行資料的搜集、整理和歸檔,完成設計報告的最終排版。

××·134·單片機控製設備安裝與調試目錄鍵控多樣彩燈係統的電路設計……………………………………………………………1135單片機選型…………………………………………………………………………1.1135最小工作電路設計…………………………………………………………………1.2136應用電路設計………………………………………………………………………1.3138鍵控多樣彩燈係統的軟件設計……………………………………………………………2141按鍵檢測模塊(輸入部分)設計……………………………………………………2.1141顯示輸出模塊(輸出部分)設計……………………………………………………2.2143定時模塊設計………………………………………………………………………2.3144鍵值處理模塊設計…………………………………………………………………2.4145主控模塊設計………………………………………………………………………2.5146鍵控多樣彩燈係統的仿真調試……………………………………………………………3149硬件調試……………………………………………………………………………3.1149軟件調試……………………………………………………………………………3.2150係統聯調……………………………………………………………………………3.3152設計體會…………………………………………………………………………………………153參考文獻…………………………………………………………………………………………154附件硬件原理圖和元件清單……………………………………………………………A155附件完整程序代碼…………………………………………………………………………B156單片機課程設計·135·MCS-511鍵控多樣彩燈係統的電路設計任何一個單片機應用係統電路都應包括有單片機選型、最小工作電路設計和應用電路設計三大部分。鍵控多彩燈電路的總體框架如圖所示:1-1圖鍵控多樣彩燈電路的概念框圖1-11.1單片機選型單片機種類很多,由於在我們教學過程中,采用的是公司生產的係ATMELAT89S51列,性能指標簡單說明如下:係列單片機的字長為位,最高支持頻率為,采用的是繁雜指令AT89S51833MHzCISC係統;存儲結構采用的是哈佛結構(程序和數據是分開存放的),片內具有字節的數據存儲256器和字節的程序存儲器(支持),同時支持片外擴展數據存儲器和4KFLASHISP64K64K程序存儲器;片內還具有個位定時器\/計數器,支持個中斷源,具有全雙工串行2165UART串行通信。

係列單片機工作電壓範圍為,具備看門狗()及雙數據指針,具AT89S514.0~5.5VWDT備低功耗空閑和掉電工作模式,中斷可從空閑模式喚醒係統,價格便宜,設計簡單,是中小型單片機應用係統開發的首選。其引腳封裝圖示如圖所示。

1-2·136·單片機控製設備安裝與調試圖單片機引腳的封裝形式1-2AT89S511.2最小工作電路設計單片機應用係統中最小工作電路包括電源電路、複位電路和時鍾電路。分別說明如下:()電源電路設計1

可以選擇直接用幹電池供電,也可以通過線從電腦中取電,但最好的方法是單獨設USB計穩壓電源,由交流取電係統供電,設計圖樣如圖所示。

220V1-3單片機課程設計·137·MCS-51圖直流穩壓電路設計1-3功能簡述:先通過變壓器將交流電轉換為交流電;再通過整流橋將交流電轉220V12V換為直流電;然後通過電容濾波,消除幹擾;然後通過穩壓器將電壓穩定在;最後設計好5V電源接口,為係統供電。

USB()複位電路設計2

係列單片機的電源跟大部分數字的電源引腳類似,右上角接V、左下角接。

51ICCCGND故此,腳為V引腳,連接;腳為引腳,必須接地,複位引腳在第腳上,複位電40CC5V20GND9路設計常用以下三種方法,如圖所示。

1-4()上電複位()按鍵脈衝複位()按鍵電平複位abc圖單片機的複位電路設計1-451功能簡述:這三種複位電路相比較,相同點是都必須保證為高電平的時間大於個RST2機器周期,便能正常複位。不同之處在於,上電複位方式在係統運行出現故障時,隻能進行斷電重啟,頻繁操作會對硬件有所損害;而按鍵脈衝複位電路和按鍵電平複位電路這兩種方式可以在係統不斷電情況下,通過按鍵複位,使係統重新恢複正常。隻不過,前者采用的是電容充放電原理,後者采用的是電阻分壓原理。

()時鍾電路設計3

為了控製單片機各部分電路嚴格按照時序工作,電路中要有統一的時鍾信號作為單片機的工作時間基準。在係列單片機芯片內部有一個高增益反相放大器構成的振蕩電AT89S51路,隻要在外部加上振蕩,就可以產生工作時序信號。此外,在多機係統中,也可以采用外部時·138·單片機控製設備安裝與調試鍾信號,實現係統同步。

故此,常用的時鍾電路連接方式有兩種,時序信號可以由內部時鍾或外部時鍾兩種方式產生,如圖所示。

1-5()外部時鍾方式電源()外部時鍾方式電源ab圖時鍾電路的不同接法1-5功能簡述:采用內部時鍾方式時,在和引腳上接石英晶體和微調電容,XTAL1XTAL2可以構成振蕩器。一般晶體震蕩的頻率可在之間選擇,電容和一般在1.2~33MHzC1C230左右。采用外部時鍾方式時,信號源通過反相器增益放大後,通過引腳送入係統,pFXTAL2而接地。

XTAL11.3應用電路設計鍵控多樣彩燈係統的應用電路包括按鍵檢測輸入,七段數碼管輸出和路彩燈顯示輸出8

三個部分,分別進行相關說明。

()按鍵檢測輸入電路1

鍵盤可分為編碼鍵盤和非編碼鍵盤兩種,在單片機係統中,使用的都是非編碼鍵盤。由於本係統中按鍵數量不多,隻有四個,故采用的是獨立按鍵,即:直接用\/口線構成的單個按IO鍵電路,每個按鍵單獨占有一根\/口線,各個按鍵的工作狀態相互獨立,是最簡單實用的按IO鍵結構,按鍵電路如圖所示:1-6圖獨立式按鍵電路1-6單片機課程設計·139·MCS-51功能簡介:當按下按鍵時,相當於開關的閉合;當按鍵鬆開時,相當於開關的斷開;按鍵一按一鬆之後,將執行其所對應的功能。由於機械觸點彈性作用,按鍵在閉合和斷開瞬間的電接觸不穩定,會造成電壓信號的抖動,然後其觸點才穩定下來,俗稱“機械抖動”,會造成係統的不穩定。

為了更好地克服“機械抖動”給係統帶來的影響,按鍵輸入電路采用中斷方式處理,可以提高係統效率。如圖所示:1-7圖按鍵輸入的中斷處理電路1-7()路顯示電路28LED發光二極管簡稱為,是一種把電能轉換成光能的半導體器件。它由結組成,在LEDPN正向偏置的條件下導通,會發射出一定波長的光。其電路連接如圖所示。

1-8圖路顯示電路1-88LED功能簡介:常用的燈有紅、綠、藍、白等幾種顏色,不同顏色的光,其波長也不同,決定LED燈的工作電壓也不相同,一般是在之間,工作電流一般在之間。

LED1.6~2.8V4~10mA燈導通之後,隨著其兩端電壓的增加,電流急劇增加,必須給它串聯一個限流電阻,否則LED容易燒壞。

()七段數碼管輸出電路3

數碼管()是由多個發光二極管封裝在一起組成“”字形的器LEDLEDSegmentDisplays8件,顏色有紅、綠、藍、黃等幾種,廣泛用於儀表、時鍾、家電等電子設備上,分為共陰極和共陽極兩種結構,各段(由右至左分別為、)內部電路原理如圖所示。

a~gdp4-2圖共陰及共陽數碼管內部電路原理圖1-9·140·單片機控製設備安裝與調試本係統采用的是共陽極數碼管,電路如圖所示。

1-10圖七段數碼管的顯示電路1-10功能簡介:個發光二極管的陽極(二極管正端)連接在一起,接高電平(一般接電源),稱8

為公共陽極;其他二極管腳接驅動電路輸出端,此處依次連接單片機的端,同時加上限流P0電阻,以免係統過流燒壞。

當某段驅動電路的輸出端為低電平時,則該端所連接的字段導通並點亮,根據發光字段的不同組合可顯示出各種數字或字符,選用時要注意產品尺寸、顏色、功耗、亮度、波長等。

單片機課程設計·141·MCS-512鍵控多樣彩燈係統的軟件設計首先,我們根據任務要求確定係統的軟件框架,合理的軟件框架是實現程序設計模塊化的基礎。我們設計的係統框架如圖所示。

2-1圖鍵控多樣彩燈的軟件層次模塊框圖2-1我們的設計思路是通過按鍵檢測模塊獲知有沒有按鍵,到底按了何鍵,給出相關的按鍵標誌位和鍵值;然後,根據不同的按鍵值所對應的功能要求,進行相應的鍵值處理,為顯示輸出模塊做相應的處理工作;最後,通過定時模塊來設定顯示速度,通過顯示輸出模塊來決定燈LED的狀態,即流水狀態、閃爍狀態或無顯示狀態等。下麵將具體進行相關程序的設計工作。

2.1按鍵檢測模塊(輸入部分)設計一個完善的鍵盤控製程序應具備以下功能:()檢測有無按鍵按下,並采取硬件或軟件措1

施,消除鍵盤按鍵機械觸點抖動的影響;()有可靠的邏輯處理辦法。每次隻處理一個按鍵,其2

間任何按鍵的操作對係統都不產生影響,且無論一次按鍵時間有多長,係統僅執行第一次按鍵功能程序;()準確輸出按鍵值(或鍵號),以滿足後續程序的處理要求。

3按照係統設計的要求,按鍵檢測模塊將采用“中斷檢測”來獲得相應的按鍵標誌和鍵值。

即主控程序先要進行中斷初始化設置,當按下或鬆開某個按鍵時,係統的引腳將向係統INT1申請中斷,係統響應該中斷請求,並執行相關操作,其程序流程如圖所示。

2-2·142·單片機控製設備安裝與調試圖按鍵檢測模塊流程圖2-2我們將上圖中所涉及的按鍵標誌變量命名為“”,按鍵鍵值變量命名為keyFlag“”;當按下的是“模式開關”鍵時,其鍵值設為“”;當按下的是“加速”鍵時,其鍵值設keyValue0為“”;當按下的是“減速”鍵時,其鍵值設為“”;當按下的是“結束”鍵時,其鍵值設為“”。相123關的程序代碼如圖所示。

2-3圖按鍵檢測模塊程序代碼2-3由於機械按鍵“鍵按下”和“鍵鬆開”存在著機械抖動,都會造成係統“多次中斷”,導致錯誤操作。故此,在按鍵檢測模塊中,我們還調用一個延時消抖模塊,用來消除機械抖動的不良影響。其程序流程較為簡單,隻需雙層循環就可以實現,內循環實現延時,外循環接受調用1ms參數,其值大小決定延時時間,一般將其設為之間即可。程序代碼如圖x10ms~20ms2-4所示。

單片機課程設計·143·MCS-51圖延時消抖模塊程序代碼2-42.2顯示輸出模塊(輸出部分)設計在係統任務中,我們知道燈有“向左流水、向右流水、全亮全滅和交叉亮滅”四種不同LED顯示模式。但在某一時刻,燈隻能是某一種狀態,如何對其控製呢?同樣,離不開流程分LED析,如圖所示。

2-5圖顯示輸出模塊流程圖2-5“某一時刻”的設計將由定時模塊來決定,但“某一狀態”的實現由流程圖可知,離不開三個邏輯標誌和一個狀態值。我們分開用位變量“”、“”和“”來代表ledFlowledFlowDirectledFlash“是流水?”、“是向左流?”和“是閃爍?”,其中“”和“”不能同時為真;由路ledFlowledFlash8顯示電路可知,燈的亮滅由控製,為了更好理解程序,我們給取名字為“”。如LEDP2P2LED何實現流水呢?我們打算用庫函數__()和__()來實現左、右移動,但一定要記住,在crolcror程序開頭導入頭文件“”。如何實現閃爍呢?無論是全閃爍,還是交叉閃爍,都是將燈intrins.h的狀態值取反即可。相關程序代碼如圖所示。

2-6·144·單片機控製設備安裝與調試圖顯示輸出模塊程序代碼2-62.3定時模塊設計在係統任務中,我們知道顯示速度是能進行快慢調整的,我們還知道芯片LEDAT89S51工作於時,其內部最大定時時間約為,太快了,根本滿足不了對顯示速度的要12MHz65ms求。怎麼辦呢?首先,在主控程序中設置的中斷設置,係統響應中斷之後,定時模塊的50ms設計思路如圖所示。

2-7圖定時模塊流程圖2-7設計的關鍵點在於判斷定時速度,置位速度標誌與否?假設定時,則需要定時中斷1s20次,那麼判定語句的終值就是,就要設置一個定時中斷計數變量“”,從開始,每次20tCount0定時中斷發生後自動增,與比較,等於,就到了定時時間了,就可以置位速度標誌12020“”了。但由於速度是變化的,所以需要一個速度變量“”作為終值,達到速度變timeFlagSpeed量的要求,就可以置位速度標誌,在主控程序中就應該調用顯示輸出模塊了。相關程序代碼如下:單片機課程設計·145·MCS-51圖定時模塊程序代碼2-82.4鍵值處理模塊設計當設計任務進行到目前,按鍵檢測模塊、定時模塊和顯示輸出模塊之間是沒有任何關聯,每個按鍵作用的發揮、定時器能不能運行,顯示哪種模式,段數碼管給出相應的模式號,LED7都必須在此處進行實現。鍵值處理模塊是重中之重,決定設計成敗!在主控程序中,檢測到按鍵標誌“”為,則執行以下鍵值處理流程。如圖所示。

keyFlag12-9圖鍵值處理模塊流程圖2-9我們先解釋“關閉係統”,它要做的事情包括關閉數碼管顯示、關閉顯示、顯示模式3LED號清和關閉定時器。

0我們再解釋“增速控製”和“減速控製”,簡單的理解就是改變“”變量的值,為了12Speed更好地進行控製,在函數外部設置了速度等級,指定數組的中間位置為“”缺省值,向左變Speed化,則為增速;向右變化,則為減速。如圖所示。

2-10·146·單片機控製設備安裝與調試圖速度等級數組2-10最後,我們解釋“顯示模式選擇”。首先解決顯示模式號的問題,有四種,是“模式——012—”依次變化的,通過設置“”變量自增,再通過“段數碼管的段碼表”(見下圖示),34ModeNo7獲取“段碼值”,送數碼管顯示“模式號”。

圖七段數碼管的段碼值數組2-11有了“顯示模式號”後,根據不同的顯示模式,設置相應的邏輯標誌和狀態值。如:模LED式向左流動狀態,則設置“”置,“”置,“”清,狀態值1ledFlow1ledFlowDirect1ledFlash0LED為“”;其餘模式類推即可。剩下的工作就是啟動定時器了,無非是賦初值和置啟動位0xfe“”為而已。

TRO1鍵值處理模塊的相關程序代碼如圖所示。

2-12圖鍵值處理模塊程序代碼2-122.5主控模塊設計主控模塊的工作之一就是定義各個模塊用到的變量、常量和庫函數,如:,__(),P2crol等等,即導入相關頭文件和寫定義語句。代碼如圖所示。

timeFlag2-13單片機課程設計·147·MCS-51圖係統初始化中的參數定義2-13主控模塊還要為各個模塊中用到的參數進行初始化設置,以及把各個模塊有機聯係起來,如圖所示。

2-14圖主控模塊流程圖2-14說明,由於按鍵檢測模塊和定時模塊采用的是“中斷形式”,故在流程圖沒有反映,它們是在“循環調用”過程不期而至的。相關的程序代碼如圖所示。

2-15·148·單片機控製設備安裝與調試圖主控模塊程序代碼2-15單片機課程設計·149·MCS-513鍵控多樣彩燈係統的仿真調試由於課程設計時間緊,我們就不需要實際製作硬件電路。係統調試采用軟件PROTUES和軟件仿真實現。這兩種軟件可以大大加快係統設計速度,其仿真效果在業界獲得一致Keil好評。雖然是仿真,但調試步驟仍然分為硬件調試、軟件調試和係統聯調。

3.1硬件調試硬件調試是利用開發係統、基本測試儀器(萬用表、示波器等),通過執行開發係統有關命令或運行適當的測試程序(也可以是與硬件有關的部分用戶程序段),檢查用戶係統硬件中存在的故障。

首先,我們按係統任務要求製作出相關的硬件仿真電路,如圖所示:3-1圖硬件電路仿真設計3-1·150·單片機控製設備安裝與調試其次,進行電路檢查。即:電源與地之間是否短路;檢查電路是否有斷線;電路連接順序有無錯亂;元器件引腳有無接反;元器件過電參數是否合格等等。

最後,用測試代碼測試相關的輸入、輸出設備有無正常工作。

圖硬件電路測試用代碼3-2經過測試,數碼管能顯示“”;當“”時,路全部都能顯示;當“”時,路8key=08LEDkey=18全部不能顯示,當按下按鍵時,對應的會亮。說明硬件電路能正常工作,就過關了。

LEDLED3.2軟件調試軟件調試就是測試我們所編製的軟件能不能正常工作。具體來說,就是測試獨立於硬件的程序模塊能不能正常工作,將它們組合在一起能不能正常工作,和硬件相關的程序模塊能不能正常工作。

首先,我們將在軟件中打開我們的軟件,並設置調試工具為仿真調試,如圖KeilKeil3-所示:3

圖軟件仿真調試設置3-3Keil然後,我們進入單步調試狀態,調試“定時模塊”,來檢測該模塊是否能正常運行,達到設計要求。如圖所示。

3-4單片機課程設計·151·MCS-51圖利用調試工具調試定時模塊3-4如果是調試按鍵檢測模塊和鍵值處理模塊,則利用下列調試工具,對話框如圖所示。

3-5圖利用調試工具調試按鍵檢測模塊和鍵值處理模塊3-5如果是調試顯示輸出模塊,要檢測輸出效果,最好做一個測試工程,隻需要改變主控程序,程序代碼如圖所示。

3-6·152·單片機控製設備安裝與調試圖修改後的主控程序3-6然後,生成目標代碼放入軟件中實際運行即可。這裏要注意,上圖是模式PROTUES1的效果;改變注釋,可選擇其他模式,檢測運行效果。

3.3係統聯調係統聯調的任務是排除軟、硬件中的殘留錯誤,使整個係統能夠完成預定的工作任務,達到要求的性能指標。

我們預先接受的設計任務要求有:可以通過按鍵控製係統運行與否;可以通過按鍵實現向左流水、向右流水、全亮全滅和交叉亮滅等四種不同模式的彩燈顯示;可以通過按鍵控製彩燈顯示速度加快或減慢;可以通過七段數碼管顯示當前彩燈顯示的模式號。

我們要在仿真中,實際按不同的鍵,檢測工作效果能不能達到預期目標。大PROTUES多數錯誤應該還是在軟件設計上,比如:條件語句或循環語句漏了大花括號,程序意思就變了,達不到係統要求,是經常發生的錯誤。又比如:定時初值的賦值位置不應該放在主控程序中,而要放在鍵值處理程序對“模式選擇”按鍵的處理中。這樣,顯示輸出模塊就不會出現異LED樣顯示。又比如:每次按了“關閉”鍵,都應該對“顯示模式號”做清處理,否則,再按ModeNo0“模式選擇”鍵,七段數碼管的模式號顯示是不對的。這些錯誤,都必須在係統聯調中,才會發現。

單片機課程設計·153·MCS-51設計體會為期一周的單片機課程設計讓我們受益匪淺,學到了很多東西。此次課程設計將軟Keil件與軟件相結合,檢驗了我們對單片機應用係統的動手設計能力。對於我們機電PROTEUS一體化專業學生來說,仿真電路設計比較順利,但到了軟件設計編程時出現PROTUESKeil了很大的障礙。但是,我們團隊積極應對,查資料的查資料,寫代碼的寫代碼,最大限度發揮團隊協作精神,無論是操作能力還是獨立思考能力,都得到了很好的提升。經過幾天的奮戰,在老師的指導下,終於完成了這任務。享受勝利成果之餘,不得不感慨單片機的重要性和高難度性。

最後感謝老師給我們這樣的實習機會,讓我們懂得了許多,學會了許多,我們將會拿明天證明自己。

·154·單片機控製設備安裝與調試參考文獻[]萬長征,謝麗華,魏洪昌,等單片機技術教學做一體化教程[]北京:人民郵電出版1.M.

社,2013.

[]周堅單片機項目教程[]北京:北京航空航天大學出版社,2.M.2008.

[]張迎新,等單片機應用設計培訓教程:理論篇[]北京:北京航空航天大學出版3.M.

社,2008.

[]程繼興,楊光永,李泰單片機原理及應用[]北京:中國傳媒大學出版社,4.M.2010.

[]彭偉單片機語言程序設計實訓例:基於仿真[]北京:電子工5.C100PIC+ProteusM.

業出版社,2011.

[]楊欣,等單片機應用從零開始[]北京:清華大學出版社,6.51M.2008.

單片機課程設計·155·MCS-51附件A硬件原理圖和元件清單圖硬件原理圖A1表元件清單A

序號元件類型規格名數量\/個控製芯片1AT89S511晶振212MHz1電解電容310uF1電容422pF2電阻5220Ω8電阻610kΩ1電阻排7220Ω1按鍵機械式84段數碼管適用971適用10LED8與門1174LS211·156·單片機控製設備安裝與調試附件B完整程序代碼\/\/----------------------------------------------------\/\/名稱:鍵控多樣彩燈\/\/----------------------------------------------------\/\/說明:單擊模式按鍵可在號模式中選擇,加速和減速鍵1~4\/\/可以調整燈速度,停止鍵關閉係統。

LED\/\/----------------------------------------------------#include#include#defineucharunsignedchar#defineuintunsignedint#defineLEDP2;

ucharModeNo;\/\/速度值設定ucharSpeed;\/\/定時器計數值uchartCount=0;\/\/速度取值索引ucharIdx;\/\/鍵值ucharkeyValue;\/\/按鍵標誌bitbdatakeyFlag=0;\/\/速度標誌bitbdatatimeFlag=0;\/\/流水燈標誌bitbdataledFlow=0;\/\/流水方向標誌bitbdataledFlowDirect=1;\/\/閃爍燈標誌bitbdataledFlash=0\/\/段數碼管的段碼表7

_[]{,,,,,,,,,ucharcodeDSYCODE=0xc00xf90xa40xb00x990x920x820xf80x80};0x90\/\/調速表[]{,,,,,,,,,,,,,};ucharcodesTable=1246891012141516171820\/\/-------------------------------------單片機課程設計·157·MCS-51-------------------------\/\/延時\/\/--------------------------------------------------------------()voidDelayucharx{

uchari()whilex--(;;);fori=0i<120i++}

\/\/--------------------------------------------------------------\/\/中斷方式檢測按鍵\/\/--------------------------------------------------------------_()voidmyINT1voidinterrupt2{

();Delay20();ifP1==0xffreturn;

keyFlag=1()switchP1{

:;;case0xfekeyValue=0break:;;case0xfdkeyValue=1break:;;case0xfbkeyValue=2break:;;case0xf7keyValue=3break}

}\/\/--------------------------------------------------------------\/\/定時時間到,狀態變化LED\/\/--------------------------------------------------------------()voidLedChangevoid{

()ifledFlow{

·158·單片機控製設備安裝與調試()ifledFlowDirect__(,);LED=crolLED1else__(,);LED=crorLED1}

()ifledFlash;

LED=~LED}

\/\/--------------------------------------------------------------\/\/定時時間設置\/\/--------------------------------------------------------------()voidtimer0voidinterrupt1using1{

();TL0=65536-50000%256()\/;TH0=65536-50000256();if++tCount

tCount=0;

timeFlag=1}

\/\/--------------------------------------------------------------\/\/鍵值處理程序\/\/--------------------------------------------------------------()voidKeyProcessvoid{

()switchkeyValue{

:();case0ModeNo=ModeNo+1%5();ifModeNo==0ModeNo=1_[];P0=DSYCODEModeNo()switchModeNo{

單片機課程設計·159·MCS-51:;;;;case1ledFlow=1ledFlowDirect=1ledFlash=0LED=0xfe;

break:;;;;case2ledFlow=1ledFlowDirect=0ledFlash=0LED=0x7f;

break:;;;;case3ledFlow=0LED=0xffledFlash=1break:;;;;case4ledFlow=0LED=0x55ledFlash=1break}

();TL0=65536-50000%256()\/;TH0=65536-50000256;\/\/啟動定時器TR0=1;

break:()[];;case1ifIdx>1Speed=sTable--Idxbreak:()[];;case2ifIdx<13Speed=sTable++Idxbreak:;;;;;\/\/關閉定時器,case3LED=0XffTR0=0P0=0xffModeNo=0break關燈}

}\/\/--------------------------------------------------------------\/\/主控程序\/\/--------------------------------------------------------------()voidmainvoid{

P0=P1=P2=P3=0xff;;ModeNo=0Idx=6[];Speed=sTableIdx;\/\/允許定時器和外部中斷中斷IE=0x8601;\/\/設置外部中斷負跳變觸發中斷TCON=0x041;\/\/定時器工作於定時和方式TMOD=0x011()while1{

(){;();}ifkeyFlagkeyFlag=0KeyProcess(){;();}iftimeFlagtimeFlag=0LedChange}

}·160·單片機控製設備安裝與調試單片機技術應用課程設計報告參考大綱一學校(學院)名稱課題名:四路智能搶答器(大綱)學科專業:××班級:××姓名:××學號:××指導老師:××設計時間:××單片機課程設計·161·MCS-51相關事項說明一、設計目的詳細說明參見鍵控多樣彩燈。

二、設計任務主持人按鍵進行複位,控製每個組別是否可以搶答;1.

任何一組按鍵搶答成功,數碼管將顯示相應組號,同時蜂鳴器發出提示音,其他人的搶2.

答則被屏蔽;時間到了,如果無任何一組搶答,數碼管將顯示組號“”,同時蜂鳴器發出提示音,3.10s0屏蔽各小組的搶答信號;重複上述三個步驟過程,控製下一輪搶答是否進行。

4.

三、項目成員及分工要求詳細說明參見鍵控多樣彩燈。

·162·單片機控製設備安裝與調試目錄四路智能搶答器係統的電路設計…………………………………………………………1163單片機選型…………………………………………………………………………1.1163最小工作電路設計…………………………………………………………………1.2163應用電路設計………………………………………………………………………1.3163四路智能搶答器係統的軟件設計…………………………………………………………2165主持按鍵檢測模塊及其子模塊設計………………………………………………2.1165各組按鍵檢測模塊及其子模塊設計………………………………………………2.2167定時模塊設計………………………………………………………………………2.3168聲音提示模塊設計…………………………………………………………………2.4169主控模塊設計………………………………………………………………………2.5170四路智能搶答器係統的仿真調試…………………………………………………………3172硬件調試……………………………………………………………………………3.1172軟件調試……………………………………………………………………………3.2173係統聯調……………………………………………………………………………3.3175設計體會…………………………………………………………………………………………176參考文獻…………………………………………………………………………………………176附件硬件原理圖和元件清單……………………………………………………………A177附件完整程序代碼…………………………………………………………………………B178單片機課程設計·163·MCS-511四路智能搶答器係統的電路設計任何一個單片機應用係統電路都應包括有單片機選型、最小工作電路設計和應用電路設計三大部分。四路智能搶答器電路的總體框架如圖所示。

1-1圖四路智能搶答器電路的概念框圖1-11.1單片機選型詳細說明參見鍵控多樣彩燈。

1.2最小工作電路設計詳細說明參見鍵控多樣彩燈。

1.3應用電路設計鍵控多樣彩燈係統的應用電路包括按鍵檢測輸入,七段數碼管輸出和聲音提示輸出等三個部分,分別進行相關說明。

()按鍵檢測輸入電路1

按鍵檢測輸入電路分為兩部分:主持人負責的“係統複位”按鍵和各小組負責的“搶答按鍵”。如圖所示。

1-2·164·單片機控製設備安裝與調試圖按鍵輸入的中斷處理電路1-2詳細說明參見鍵控多樣彩燈。

()聲音提示電路2

單片機的聲音是通過蜂鳴器來實現的,單片機上一般使用電磁式無源蜂鳴器(“源”特指振蕩源)。有源蜂鳴器直接加電就可以響起,無源蜂鳴器需要我們給它提供振蕩源。理想的振蕩源為一定頻率(以內)的方波,以免人耳聽不見。而且電磁式蜂鳴器的工作電流一般比500Hz較大,以至於單片機的\/口是無法直接驅動的,所以要利用放大電路來驅動,一般使用三極IO管來放大電流就可以了,要注意電阻參數設置和防止蜂鳴器產生反向電動勢,如圖所示。

1-3圖聲音提示電路1-3()七段數碼管輸出電路3

詳細說明參見鍵控多樣彩燈。

單片機課程設計·165·MCS-512四路智能搶答器係統的軟件設計首先,我們根據任務要求確定係統的軟件框架,合理的軟件框架是實現程序設計模塊化的基礎。我們設計的係統框架如圖所示。

2-1圖四路智能搶答器係統的軟件層次模塊框圖2-1我們的設計思路是如果主持不按鍵,各組不能搶答,定時器也不能工作;通過主持按鍵來啟動新一輪搶答。即允許定時模塊和各組按鍵檢測模塊工作;在內,各組按鍵檢測模塊10s搶答有效,某一組搶答後數碼管會顯示組號,聲音輸出模塊輸出提示音,同時各組按鍵檢測模塊被屏蔽,中止定時模塊的工作;如果定時器定時時間到,數碼管會顯示,聲音輸出模塊10s0輸出提示音,同時各組按鍵檢測模塊被屏蔽,中止定時模塊的工作。下一輪的搶答開始與否,再次由主持按鍵檢測模塊決定。下麵將具體進行相關程序的設計工作。

2.1主持按鍵檢測模塊及其子模塊設計該設計包括兩個部分:主持按鍵檢測模塊和定時器初始化模塊。主持按鍵檢測如圖0

所示。

2-2·166·單片機控製設備安裝與調試圖主持按鍵檢測模塊流程圖2-2相關的程序代碼如圖所示。

2-3圖主持按鍵檢測模塊程序代碼2-3定時器初始化模塊程序流程如圖所示。

02-4圖定時器初始化模塊流程圖2-40單片機課程設計·167·MCS-51相關的程序代碼如圖所示。

2-5圖定時器初始化模塊程序代碼2-502.2各組按鍵檢測模塊及其子模塊設計該設計包括兩個部分:各組按鍵檢測模塊和延時消抖模塊。各組按鍵檢測模塊流程如圖所示。

2-6圖各組按鍵檢測模塊流程圖2-6·168·單片機控製設備安裝與調試相關的程序代碼如圖所示。

2-7圖各組按鍵檢測模塊程序代碼2-7由於在本模塊中,輸出部分較簡單,所以不需要進行相關鍵值處理,直接給出輸出參數“”和“”的值。其調用的延時消抖模塊為標準化程序,相關的程序代碼如圖dispValueringFlag所示。

2-8圖延時消抖模塊程序代碼2-82.3定時模塊設計在主控程序中允許定時中斷設置,在主持按鍵檢測模塊調用定時器初始化模塊,啟動定時,係統響應中斷之後,定時模塊的設計思路如圖所示。

50ms2-9單片機課程設計·169·MCS-51圖定時模塊流程圖2-9設計的關鍵點在於判斷定時時間,設置“_”和“_”兩個參數,分別作為和sec1sec101s10s的判斷依據。其相關程序代碼如圖所示。

2-10圖定時模塊程序代碼2-102.4聲音提示模塊設計當響鈴標誌時,主控程序將調用聲音提示模塊。由於硬件是無源電磁式蜂鳴器,設計=1重點是產生一定頻率方波信號作為振蕩源,並振蕩一定次數。如圖所示。

2-11·170·單片機控製設備安裝與調試圖聲音提示模塊流程圖2-11需要說明的是,蜂鳴器每響一次,需要一定波長的高負電位相互作用才能產生。故高低電位波長和的倒數即為頻率,在本模塊中,頻率設為,響鈴次數為參數“”值的一半。其相10Hzx關程序代碼如圖所示。

2-12圖聲音提示模塊程序代碼2-122.5主控模塊設計主控模塊對係統中相關參數的設置,即導入相關頭文件和定義語句。代碼如圖2-13所示。

圖係統初始化中的參數定義2-13單片機課程設計·171·MCS-51主控模塊還要對各個模塊中用到的參數進行初始化設置,把各個模塊有機聯係起來,流程如圖所示。

2-14圖主控模塊流程圖2-14說明,由於按鍵檢測模塊和定時模塊采用的是“中斷形式”,故在流程圖中沒有反映,它們是在“循環調用”過程中不期而至的。主控模塊相關的程序代碼如圖所示。

2-15圖主控模塊程序代碼2-15·172·單片機控製設備安裝與調試3四路智能搶答器係統的仿真調試調試步驟仍然分為硬件調試、軟件調試和係統聯調。

3.1硬件調試首先,我們按係統任務要求製作出相關的硬件仿真電路,如圖所示。

3-1圖硬件電路仿真設計3-1其次,進行電路檢查。

最後,用測試代碼測試相關的輸入、輸出設備有無正常工作。

單片機課程設計·173·MCS-51圖硬件電路測試用代碼3-2經過測試,數碼管能顯示“”,蜂鳴器會響;當按下按鍵時,對應的數碼管段會亮,說明硬件8

電路能正常工作,檢測合格。

3.2軟件調試首先,我們將在軟件中打開我們的軟件,並設置調試工具為仿真調試,如圖KeilKeil3-所示。

3圖軟件仿真調試設置3-3Keil然後,我們進入單步調試狀態,調試“定時模塊”,檢測該模塊是否能正常運行,達到設計要求。如圖所示。

3-4·174·單片機控製設備安裝與調試圖利用調試工具調試定時模塊3-4如果是調試按鍵檢測模塊,則利用下列調試工具,對話框如圖所示。

3-5圖利用調試工具調試按鍵檢測模塊3-5單片機課程設計·175·MCS-51如果是調試聲音顯示和數碼管顯示模塊,要檢測輸出效果,最好做一個測試工程,隻需要改變主控程序,程序代碼如圖所示。

3-6圖修改後的主控程序3-6然後,生成目標代碼導入軟件中實際運行即可。

Proutues3.3係統聯調比如:去掉下列代碼中的注釋會怎樣?定時器的初始化為什麼不放在主控模塊?

比如:去掉代碼“”行會怎樣?

071~072詳細說明參見鍵控多樣彩燈。

·176·單片機控製設備安裝與調試設計體會詳細說明參見鍵控多樣彩燈。

參考文獻詳細說明參見鍵控多樣彩燈。

單片機課程設計·177·MCS-51附件A硬件原理圖和元件清單圖附硬件原理圖A

表附元件清單A1序號元件類型規格名數量\/個控製芯片1AT89S511晶振212MHz1電解電容310μF1電容422pF2電阻51kΩ1電阻610kΩ2電阻排7220Ω1按鍵機械式85段數碼管適用9t1二極管適用101與門1174LS211三極管型12PNP1蜂鳴器適用131·178·單片機控製設備安裝與調試附件B完整程序代碼\/\/-----------------------------------------------------\/\/-----------------------------------------------------\/\/名稱:四路智能搶答器\/\/-----------------------------------------------------\/\/說明:人員由主持人和四位選手組成。主持人按鍵控製每輪\/\/搶答開始,選手在時間內按鍵搶答。

10s\/\/-----------------------------------------------------#include#defineucharunsignedchar#defineuintunsignedint\/\/數碼管不顯示#defineHIDDEN10_;\/\/定時器計數值ucharsec11s_;\/\/定時器計數值ucharsec1010s;\/\/選手號uchardispValue;

sbitp10=P1^0;

sbitp32=P3^2;\/\/響鈴標誌bitbdataringFlag=0\/\/段數碼管的段碼表7

_[]{,,,,,,,,,,ucharcodeDSYCODE=0xc00xf90xa40xb00x990x920x820xf80x800x90};0xff\/\/-----------------------------------------------------\/\/延時\/\/-------------------------------------單片機課程設計·179·MCS-51----------------()voidDelayuintx{

uchari()whilex--(;;);fori=0i<120i++}

\/\/-----------------------------------------------------\/\/聲音報警\/\/-----------------------------------------------------()voidRingucharx{

()whilex--{

();;ifp10p10=0elsep10=1();Delay50}

}\/\/-----------------------------------------------------\/\/定時器初始化\/\/-----------------------------------------------------_()voidTimer0INIT{

_;sec1=20_;sec10=10();TL0=65536-50000%256()\/;TH0=65536-50000256;\/\/啟動定時器TR0=1}