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

下載本文檔

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

文檔簡介

7.1匯編源程序的建立與編譯

7.2Proteus與單片機(jī)電路的交互式仿真與調(diào)試

7.3I/O口應(yīng)用

7.44×4矩陣式鍵盤識別技術(shù)

7.5動態(tài)掃描顯示

7.68×8點陣LED顯示

7.7I/O口的擴(kuò)展

第七章單片機(jī)應(yīng)用系統(tǒng)開發(fā)設(shè)計實例7.8定時/計數(shù)器實驗

7.9外部數(shù)據(jù)存儲器擴(kuò)展

7.10外部中斷實驗

7.11單片機(jī)與PC機(jī)間的串行通信

7.12單片機(jī)與步進(jìn)電機(jī)的接口技術(shù)

7.13單片機(jī)與直流電動機(jī)的接口技術(shù)

7.14基于DAC0832數(shù)/模轉(zhuǎn)換器的數(shù)控電源

7.15基于ADC0808模/數(shù)轉(zhuǎn)換器的數(shù)字電壓表7.1.1Proteus中的源程序設(shè)計與編譯

1.建立源程序文件

在ProteusISIS界面中單擊菜單Soure(源程序),在彈出的下拉菜單中單擊“Add/Remove

SourceFiles…”(添加/移開源程序)選項,彈出如圖7-1所示對話框。單擊“CodeGenerationTool”(目標(biāo)代碼生成工具)下方框中按鈕,彈出下拉菜單,根據(jù)需要選擇相應(yīng)的編譯器,例如“ASEM51”(51系列單片機(jī)編譯器)。

7.1匯編源程序的建立與編譯圖7-1Add/RemoveSourceCodeFiles對話框在圖7-1中單擊“New”按鈕,彈出如圖7-2所示的對話框,在文件名框中輸入新建源程序文件名“mydesign”,單擊“打開”按鈕,彈出圖7-2中所示的小對話框,選擇“是”按鈕,新建的源程序文件就添加到圖7-1中的“SourceCodeFilename”方框中,如圖7-3所示。同時在ISIS界面的“Source”菜單中也加入了源程序文件名“mydesign.asm”,如圖7-4所示。圖7-2新建源程序文件對話框圖7-3源程序添加結(jié)果圖7-4菜單Source中加載的源程序文件

2.編寫源程序代碼

單擊菜單【Source】→【mydesign.asm】,彈出圖7-5所示的源程序編輯窗口。編寫源程序后存盤退出。圖7-5源程序編輯窗口

3.源程序編譯

(1)編譯器設(shè)置。第一次使用編譯器時需進(jìn)行相關(guān)的設(shè)置,單擊菜單【Source】→【DefineCodeGenerationTools】,出現(xiàn)圖7-6所示界面,本例中實際設(shè)置結(jié)果如圖7-6所示。

(2)編譯源程序,生成目標(biāo)代碼文件。單擊【Source】→【BuildAll】,編譯結(jié)果在彈出的編譯日志對話框中。如果沒有錯誤,便成功生成目標(biāo)代碼“.hex”文件。本例中生成的目標(biāo)代碼文件為“mydesign.hex”。圖7-6編譯器設(shè)置界面7.1.2KeilμVision中的源程序設(shè)計與編譯

1.新建項目

(1)雙擊桌面快捷圖標(biāo)即可進(jìn)入如圖7-7所示的集成開發(fā)環(huán)境編輯操作界面,主要包括三個窗口:工程項目窗口、編輯窗口和輸出窗口。

(2)單擊Project菜單,在彈出的下拉菜單中選中“NewProject”選項,新建一個項目,如圖7-8所示。圖7-7μVision2編輯操作界面圖7-8Project界面

(3)選擇要保存的路徑,輸入工程文件的名字(比如保存到uv目錄里,工程文件的名字為“shiyan1”),如圖7-9所示,然后單擊“保存”按鈕。

圖7-9Project保存設(shè)置界面

(4)這時會彈出一個對話框,要求選擇單片機(jī)的型號。這里可以根據(jù)所使用的單片機(jī)來選擇,Keil幾乎支持所有51核的單片機(jī)。這里以Atmel的AT89C51來說明,如圖7-10所示。圖7-10選擇器件

(5)完成以上步驟后,顯示畫面如圖7-11所示。

先進(jìn)行選項設(shè)置,將鼠標(biāo)指針指向“Target1”并單擊右鍵,再從彈出的右鍵菜單中單擊“OptionsforTarget”選項,如圖

7-12所示。圖7-11初始化編輯界面圖7-12選擇“OptionsforTarget”選項

(6)從彈出的“Options”對話框中選擇“Output”標(biāo)簽欄,并按圖7-13所示設(shè)置各項。

圖7-13“Output”標(biāo)簽欄

2.建立一個新的ASM匯編語言程序并編譯

下面開始編寫源程序。

(1)在菜單欄中,單擊“File”菜單,再在下拉菜單中單擊“New”選項,或直接單擊工具欄的快捷圖標(biāo)來建立一個新的編輯窗口。在此編輯窗口中輸入用戶的應(yīng)用程序。具體輸入前建議首先保存該空白文件,具體方法是單擊菜單上的“File”按鈕,在下拉菜單中選中“SaveAs”選項,在彈出對話框的“文件名”欄右側(cè)編輯框中輸入欲使用的文件名,同時,必須輸入正確的擴(kuò)展名,如“Text1.asm”,然后,單擊“保存”按鈕,如圖7-14所示。圖7-14保存源程序

(2)回到編輯界面后,單擊“Target1”前面的“+”號,然后在“SourceGroup1”上單擊右鍵,彈出如圖7-15所示的菜單。

圖7-15彈出右鍵菜單然后單擊“AddFiletoGroup‘SourceGroup1’”,打開如圖7-16所示對話框,在“文件類型”處默認(rèn)為“CSourcefile(*.c)”,因為前面我們保存的是匯編語言的文件,故需要選擇“Asm

Sourcefile(*.s*;*.src;*.a*)”,這樣在上面就可以看到剛才保存的匯編語言文件“Text1.asm”,雙擊該文件則自動添加至項目,單擊“Close”關(guān)閉對話框。

從圖7-17中可以看出:在添加了匯編語言文件后,在“Source

Group1”文件夾前面出現(xiàn)了一個“+”號,單擊“+”號展開就看到了剛才添加的“Text1.asm”文件。圖7-16添加文件對話框圖7-17添加文件后工程欄的變化

(3)打開文件就可以在右側(cè)的編輯區(qū)輸入?yún)R編源程序了。在輸入指令時,讀者可以看到事先保存待編輯文件的好處:Keil會自動識別關(guān)鍵字,并以不同的顏色提示用戶加以注意,這樣會使用戶少犯錯誤,有利于提高編程效率。如圖7-18所示,程序輸入完畢應(yīng)再次保存。圖7-18程序輸入完畢后狀態(tài)

(4)程序文件編輯完畢后,單擊“Project”菜單,選中“Builttarget”選項(或者使用快捷鍵F7),或者單擊工具欄的快捷圖標(biāo)來進(jìn)行編譯,如圖7-19所示。

圖7-19編譯菜單

(5)如果有錯誤,則在最后的輸出窗口中會出現(xiàn)所有錯誤所在的位置和錯誤的原因,并有“Targetnotcreated”的提示。雙擊該處的錯誤提示,在編輯區(qū)對應(yīng)錯誤指令處左面出現(xiàn)藍(lán)色箭頭提示,然后對當(dāng)前的錯誤指令進(jìn)行修改,如圖7-20所示。

圖7-20錯誤提示

(6)將所有提示過的錯誤進(jìn)行修改,然后再次重復(fù)(4)的操作進(jìn)行編譯,直至出現(xiàn)“"shiyan1"-0Error(s),0Warning(s)”,說明編譯完全通過,如圖7-21所示。

圖7-21編譯通過提示

3.調(diào)試并仿真

編譯成功后,就可以進(jìn)行調(diào)試并仿真了。單擊“Debug”菜單,在下拉菜單中單擊“Start/Stop

DebugSession”(或者使用快捷鍵Ctrl+F5),或者單擊工具欄的快捷圖標(biāo)就可以進(jìn)入調(diào)試界面,如圖7-22所示。圖7-22調(diào)試界面在存儲器窗口的地址欄處輸入C:0000H后回車,就可以查看所有單片機(jī)片內(nèi)程序存儲器的內(nèi)容,如圖7-23所示,下面用橫線畫出來的部分就是已經(jīng)編輯的源程序轉(zhuǎn)化成的機(jī)器語言的十六進(jìn)制數(shù)(或者說是對應(yīng)的機(jī)器碼)。如果在存儲器窗口的地址欄處輸入D:00H后回車,則可以查看所有單片機(jī)片內(nèi)數(shù)據(jù)存儲器的內(nèi)容。

圖7-23存儲器窗口下面介紹幾種常用的調(diào)試命令及方法。

(1)復(fù)位CPU。

(2)全速運行(F5)。

(3)單步跟蹤(F11)。

(4)單步運行(F10)。

(5)執(zhí)行返回(Ctrl+F11)。

(6)停止調(diào)試(Ctrl+F5)。7.2.1加載目標(biāo)代碼

在ProteusISIS界面中編輯電路原理圖實例,如圖7-24所示。7.2Proteus與單片機(jī)電路的交互式仿真與調(diào)試圖7-24實例電路原理圖雙擊單片機(jī)AT89C51,打開其屬性編輯框,在“ProgramFile”欄中,單擊打開按鈕,選取目標(biāo)代碼文件,這里是“MYDESIGN.HEX”。在“ClockFrequency”欄中設(shè)置時鐘頻率為12MHz,如圖7-25所示。圖7-25加載目標(biāo)代碼文件和時鐘設(shè)置7.2.2單片機(jī)系統(tǒng)的Proteus交互仿真

在Proteus仿真界面中單擊“運行”按鈕,全速啟動仿真,此時電路中的LED不亮。用鼠標(biāo)單擊電路圖中的按鈕,進(jìn)行交互仿真。單擊一次按鈕,LED燈亮,再單擊一次,LED燈滅,如此循環(huán)交替。本實例仿真片段如圖7-26所示。單擊“停止”按鈕,可停止仿真。圖7-26實例仿真片段7.2.3調(diào)試菜單與調(diào)試窗口

系統(tǒng)在全速仿真運行時不顯示調(diào)試窗口,可單擊暫停按鈕,然后單擊ProteusISIS界面的“Debug”菜單,彈出如圖7-27所示的下拉菜單。從圖中可以看出,調(diào)試菜單包含有3個存儲器窗口,調(diào)試過程中可分別打開這3個存儲器窗口進(jìn)行觀察。圖7-27“Debug”下拉菜單

1.單片機(jī)寄存器窗口

通過菜單【Debug】→【8051CPURegisters-U1】打開單片機(jī)寄存器窗口,如圖7-28所示。窗口里面有常用的SFR,如SP、PC、PSW、R0~R7、ACC及將要執(zhí)行的指令等。在本窗口內(nèi)右擊,可以設(shè)置窗口的字體和顏色。

2.單片機(jī)SFR窗口

通過菜單【Debug】→【8051CPUSFRMemory-U1】打開單片機(jī)的SFR窗口,如圖7-29所示。圖7-28單片機(jī)寄存器窗口圖7-29單片機(jī)SFR窗口

3.單片機(jī)IDATA窗口

通過菜單【Debug】→【8051CPUInternal(IDATA)Memory-U1】打開單片機(jī)的IDATA窗口,如圖7-30所示。

圖7-30單片機(jī)IDATA窗口在SFR、IDATA窗口中右擊鼠標(biāo),可彈出該窗口的設(shè)置菜單,如圖7-31所示。可使用“Goto”命令快速運動到指定的顯示單元,還可復(fù)制數(shù)據(jù)或改變顯示方式等。

圖7-31單片機(jī)IDATA窗口的快捷菜單7.2.4觀察窗口

1.觀察項添加

通過菜單【Debug】→【W(wǎng)atchWindow】打開空白的觀察窗口,在觀察窗口內(nèi)右擊鼠標(biāo),彈出快捷菜單,如圖7-32所示。圖7-32觀察窗口及快捷菜單若單擊對話框中的“AddItems(ByName)”項,便會彈出如圖7-33所示的對話框,雙擊相應(yīng)的SFR寄存器名稱,即可以觀察項名稱方式,并將觀察項添加到觀察窗口中。也可選擇以觀察項的地址來添加觀察項的方式。添加了觀察項的觀察窗口如圖7-34所示。圖7-33“AddMemoryItem”對話框圖7-34添加了觀察項的觀察窗口

2.觀察項刪除

要刪除已添加的觀察項,有兩種方法:

(1)在觀察窗口單擊選中相應(yīng)的觀察項,按鍵盤上的“Del”鍵即可。

(2)在觀察窗口右擊相應(yīng)的觀察項,在彈出的快捷菜單中單擊“DeleteItem”選項。

3.觀察點條件設(shè)置

在仿真運行的過程中,還可以通過設(shè)置“觀察點條件”的手段來觸發(fā)中斷,以滿足某些特殊條件斷點的要求。具體方法為:在觀察窗口內(nèi)右擊鼠標(biāo),在彈出的快捷菜單中單擊“WatchpointCondition”項,彈出觀察點條件設(shè)置框,如圖

7-35所示。圖7-35觀察點條件設(shè)置框7.3.1Proteus電路設(shè)計

1.元件清單列表

打開ProteusISIS編輯環(huán)境,按表7-1所列的清單添加元件。7.3I/O口應(yīng)用表7-1元件清單

2.電路原理圖

元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-36所示的原理圖(晶振和復(fù)位電路略)連接硬件電路。

圖7-36電路原理圖7.3.2Proteus調(diào)試與仿真

1.建立程序文件

(1)打開KeilμVision3,新建Keil項目,選擇AT89C51單片機(jī)作為CPU;

(2)新建匯編源文件,編寫程序并將其導(dǎo)入到“SourceGroup1”中;

(3)在“OptionsforTarget”對話框中,選中“Output”選項卡中的“CreateHEXFile”選項和“Debug”選項卡中的“Use:ProteusVSMSimulator”選項;

(4)編譯源程序,修改程序中的錯誤直至通過。

2.加載目標(biāo)代碼文件

(1)在ProteusISIS中,雙擊AT89C51元件,打開“EditComponent”對話框,設(shè)置單片機(jī)的頻率為12MHz;

(2)在該窗口的“ProgramFile”欄中,選擇先前在Keil中編譯產(chǎn)生的“.HEX”文件;

(3)在ProteusISIS菜單欄中選擇【File】→【SaveDesign】選項,保存設(shè)計;

(4)在ProteusISIS菜單欄中,打開“Debug”下拉菜單,在菜單中選擇“UseRemoteDebugMonitor”選項,以支持與Keil的聯(lián)調(diào)。

3.調(diào)試與仿真

(1)在Keil的菜單欄中選擇【Debug】→【Start/StopDebugSession】選項,或者在工具欄中直接單擊圖標(biāo),進(jìn)入調(diào)試環(huán)境;

(2)按“F5”鍵或單擊相應(yīng)圖標(biāo),順序執(zhí)行程序;

(3)在ProteusISIS界面中,按動開關(guān),可看到數(shù)碼管的顯示值隨之加1,如圖7-37所示。圖7-37程序運行結(jié)果7.3.3總結(jié)與提示

AT89C51單片機(jī)的P0口在作為普通I/O使用時必須加上拉電阻,否則不能準(zhǔn)確輸入或輸出高低電平。仿真時可通過觀察P0口的電平狀態(tài)來體會這一點。

在Proteus與Keil的聯(lián)調(diào)過程中,可以綜合運用Keil中的多種調(diào)試功能來詳細(xì)觀察電路的工作情況。7.4.1Proteus電路設(shè)計

1.元件清單列表

打開ProteusISIS編輯環(huán)境,按表7-2所列的清單添加元件。7.44×4矩陣式鍵盤識別技術(shù)表7-2元件表清單

2.電路原理圖

元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-38所示的原理圖(晶振和復(fù)位電路略)連接硬件電路。

圖7-38電路原理圖7.4.2源程序設(shè)計

#include〈reg51.h〉

#defineucharunsignedchar

#defineuintunsignedint

sbitdula=P2^6;

sbitwela=P2^7;

uchartemp,num,num1;

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0};

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

ucharkeyscan()

{

P3=0xfe;

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(3);

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case0xee:num=1;break;

case0xde:num=2;break;

case0xbe:num=3;break;

case0x7e:num=4;break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xfd;

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(3);

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case0xed:num=5;break;

case0xdd:num=6;break;

case0xbd:num=7;break;

case0x7d:num=8;break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xfb;

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(3);

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case0xeb:num=9;break;

case0xdb:num=10;break;

case0xbb:num=11;break;

case0x7b:num=12;break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xf7;

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(3);

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case0xe7:num=13;break;

case0xd7:num=14;break;

case0xb7:num=15;break;

case0x77:num=16;break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

returnnum;

}

voidmain()

{

num=1;

wela=1;

P0=0xc0;

wela=0;

dula=1;

P0=0x00;

dula=0;

while(1)

{

num1=keyscan();

dula=1;

P0=table[num1-1];

dula=0;

}

}7.4.3Proteus調(diào)試與仿真

參照7.3.3節(jié)建立程序文件,加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境,執(zhí)行程序,在ProteusISIS界面中,按下各個按鍵,觀察數(shù)碼管上的顯示和所標(biāo)的鍵號是否對應(yīng)。

7.4.4總結(jié)與提示

在Proteus與Keil的聯(lián)調(diào)過程中,可以綜合運用Keil中的多種調(diào)試功能來詳細(xì)觀察電路的工作情況。

在Proteus中,仿真時可以降低單片機(jī)的工作頻率,觀察電路中各接點的電平變化情況,看是否和所編程序符合,以增強(qiáng)對程序的理解。7.5.1Proteus電路設(shè)計

1.元件清單列表

打開ProteusISIS編輯環(huán)境,按表7-3所列的清單添加元件。7.5動態(tài)掃描顯示表7-3元件清單

2.電路原理圖

元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-39所示的原理圖(晶振和復(fù)位電路略)連接硬件電路。

圖7-39電路原理圖7.5.2源程序設(shè)計

#include〈reg52.h〉

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};

ucharcodetable1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

/********延時子函數(shù)********/

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

/********顯示子函數(shù)********/

voiddisplay()

{

P3=table[0];

P2=table1[0];

delay(1);

P3=0x00;P3=table[1];

P2=table1[1];

delay(1);

P3=0x00;

P3=table[2];

P2=table1[2];

delay(1);

P3=0x00;

P3=table[3];

P2=table1[3];

delay(1);

P3=0x00;P3=table[4];

P2=table1[4];

delay(1);

P3=0x00;

P3=table[5];

P2=table1[5];

delay(1);

P3=0x00;

P3=table[6];

P2=table1[6];

delay(1);

P3=0x00;P3=table[7];

P2=table1[7];

delay(1);

P3=0x00;

}

/********主程序********/

voidmain()

{

while(1)

{

display();

}

}7.5.3Proteus調(diào)試與仿真

參照7.3.3節(jié)建立程序文件、加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境后執(zhí)行程序,降低單片機(jī)的工作頻率,觀察動態(tài)顯示的過程。

7.5.4總結(jié)與提示

AT89C51單片機(jī)的P0口作為普通I/O使用時必須加上拉電阻,否則不能準(zhǔn)確輸入或輸出高低電平。仿真時可通過觀察P0口的電平狀態(tài)來體會這一點。

在Proteus與Keil的聯(lián)調(diào)過程中,可以綜合運用Keil中的多種調(diào)試功能來詳細(xì)觀察電路的工作情況。7.6.1Proteus電路設(shè)計

1.元件清單列表

打開ProteusISIS編輯環(huán)境,按表7-4所列的清單添加元件。7.68×8點陣LED顯示表7-4元件清單

2.8×8點陣LED元件介紹

ProteusISIS中的8×8點陣LED元件如圖7-40(a)所示。由于該元件引腳沒有任何標(biāo)注,因此在使用之前必須進(jìn)行引腳測試,以確定行線和列線的順序及極性。圖7-40(b)給出了一種引腳測試的方法,根據(jù)測試結(jié)果便很容易確定該元件的電路接法。圖7-408×8點陣LED元件引腳測試3.電路原理圖

元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-41所示的原理圖連接硬件電路。

圖7-41電路原理圖7.6.2Proteus設(shè)計與仿真

參照7.3.3節(jié)建立程序文件、加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境后執(zhí)行程序,在ProteusISIS界面中的仿真片斷如圖

7-42所示。

圖7-42仿真片段源程序設(shè)計如下:

//使用12MHz晶振,P0口輸出一行數(shù)據(jù),P2口作列掃描,共陽LED管

#include"reg51.h"

#definecharunsignedchar

#defineintunsignedint

charkey,keytmp;

charcodedistaba[]=

{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00,//2(各數(shù)字的陽碼)

0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,//0

0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,//00x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00,//7

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//黑屏,表示一次顯示完畢

};

charcodescan_cona[8]=

{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//列掃描控制字

delay1ms(intt)

{

inti,j;

for(i=0;i<t;i++)

for(j=0;j<120;j++);

}

//******功能程序*******//

//******向左滾動顯示******//fun1()

{

intm,n,h;

for(h=0;h<32;h++)//控制顯示字?jǐn)?shù)(32/8=4個)

{for(n=0;n<25;n++)//控制幀移動速度

{for(m=0;m<8;m++)//顯示1幀掃描(分8行,每行亮1ms)

{P2=scan_cona[m];P0=distaba[m+h];delay1ms(1);}

}

}

}

//******主程序********//

main()

{keytmp=1;//上電自動演示功能(逐字顯示)

while(1)

{

fun1();

}

}

//**************結(jié)束**************//7.6.3總結(jié)與提示

程序編寫中,必須在h數(shù)值是8的整數(shù)倍時再進(jìn)行下面的移位操作,否則顯示在銜接時會出現(xiàn)亂碼。7.7.1Proteus電路設(shè)計

1.元件清單列表

打開ProteusISIS編輯環(huán)境,按表7-5所列的清單添加元件。7.7I/O口的擴(kuò)展表7-5元件清單

2.電路原理圖

元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-43所示的原理圖連接硬件電路。

圖7-43電路原理圖7.7.2源程序設(shè)計

1.流程圖

圖7-44為程序流程圖。圖7-44流程圖2.程序代碼

#include〈regx52.h〉

#include〈intrins.h〉

#include〈absacc.h〉

#defineucharunsignedchar

#defineuintunsignedint

#definePAXBYTE[0x3fff]

#definePBXBYTE[0x7fff]

#definePC1XBYTE[0xbfff]

#defineCTLXBYTE[0xffff]

sbitreset=P2^5;

voiddelay(uchart);

voiddisplay();

voidmain()

{

EA=1;

ET0=1;

TMOD=0x01;

reset=1;

_nop_();

reset=0;

CTL=0x80;//寫8255控制字,設(shè)置PA,PB,PC為輸出口

while(1){

display();}

}

voiddisplay()

{

ucharoutdata=0xfe,i;

for(i=0;i<8;i++)

{PA=outdata;

delay(200);

outdata=_crol_(outdata,1);

}

PA=0xff;

outdata=0xfe;

for(i=0;i<8;i++)

{PB=outdata;

delay(200);

outdata=_crol_(outdata,1);}

PB=0xff;

outdata=0xfe;

for(i=0;i<8;i++)

{PC1=outdata;

delay(200);

outdata=_crol_(outdata,1);}

PC1=0xff;

}voiddelay(uchart)

{

for(;t>0;t--)

{

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

TR0=1;

while(TF0==0);

TF0=0;

}

TR0=0;

}7.7.3Proteus調(diào)試與仿真

參照7.3.3節(jié)建立程序文件、加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境,單擊ProteusISIS下面的仿真運行鍵,即可看到如圖7-45所示的運行結(jié)果。

圖7-45程序運行結(jié)果7.7.4總結(jié)與提示

采用8255并口擴(kuò)展芯片的PA0口,設(shè)計一個4×4鍵的矩陣鍵盤掃描程序。7.8.1Proteus電路設(shè)計

1.元件清單列表

打開ProteusISIS編輯環(huán)境,按表7-6所列的清單添加元件。7.8定時/計數(shù)器實驗表7-6元件清單

2.電路原理圖

元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-46所示的原理圖連接硬件電路。

圖7-46電路原理圖7.8.2Proteus設(shè)計與仿真

參照7.3.3節(jié)建立程序文件、加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境執(zhí)行程序,在ProteusISIS界面中,可以看到,LED燈亮1s,關(guān)1s,循環(huán)進(jìn)行,其結(jié)果如圖7-47所示。

圖7-47運行結(jié)果源程序如下:

#include〈at89x51.h〉

sbitD=P1^7;

unsignedchartt;

voidtimer0()interrupt1

{

TH0=-50000/256;

TL0=-50000%256;

tt++;

if(tt==20)

{

D=0;

}if(tt==40)

{

tt=0;

D=1;

}

}

voidinit()

{

TMOD=0x01;

TH0=-50000/256;

TL0=-50000%256;EA=1;

ET0=1;

TR0=1;

tt=0;

}

voidmain()

{

init();

while(1)

{}

}7.8.3總結(jié)與提示

嘗試改變計數(shù)器的值,使延時的時間更長。7.9.1Proteus電路設(shè)計

1.元件清單列表

打開ProteusISIS編輯環(huán)境,按表7-7所列的清單添加元件。7.9外部數(shù)據(jù)存儲器擴(kuò)展表7-7元件清單

2.電路原理圖

元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-48所示的原理圖(復(fù)位和振蕩電路略)連接硬件電路。

圖7-48電路原理圖7.9.2Proteus調(diào)試與仿真

參照7.3.3節(jié)建立程序文件、加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境,然后執(zhí)行下述操作:

(1)在ProteusISIS界面中,單擊按鈕啟動仿真。

圖7-49程序運行結(jié)果

(2)通過菜單【Debug】→【MemoryContents→U1】,打開6264存儲器窗口。

(3)通過菜單【Debug】→【Debug→WatchWindow】,在彈出的觀察窗口右擊鼠標(biāo),選擇“以觀察項的名稱添加觀察項”,在彈出的對話框中添加累加器ACC和數(shù)據(jù)指針DPTR。

(4)單擊按鈕暫停仿真,可觀察程序運行的中間結(jié)果,如圖7-49所示。7.9.3總結(jié)與提示

受計算機(jī)性能的影響,以及Proteus軟件運行仿真時需要處理大量的數(shù)據(jù),會出現(xiàn)仿真結(jié)果的畫面刷新率跟不上程序運行速度的問題,致使不能看到存儲器內(nèi)容隨程序運行的動態(tài)變化,仿真時可手工刷新畫面觀察。中斷控制是提供給用戶使用的中斷控制手段,實際上就是控制一些寄存器。51系列用于此目的的控制寄存器有四個:TCON、IE、SCON及IP。其中IE、IP的格式如下:

(1)中斷允許控制寄存器(IE)。IE寄存器地址為A8H,可進(jìn)行字節(jié)尋址和位尋址,位地址為AFH~A8H。其格式如表7-8所示。7.10外部中斷實驗表7-8IE寄存器

(2)中斷優(yōu)先級控制寄存器(IP)。

IP寄存器地址為B8H,也可進(jìn)行字節(jié)尋址和位尋址,位地址為BFH~B8H,各位定義如表7-9所示。表7-9IP寄存器7.10.1Proteus電路設(shè)計

1.元件清單列表

打開ProteusISIS編輯環(huán)境,按表7-10所列的清單添加元件。表7-10元件清單

2.電路原理圖

元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-50所示的原理圖(晶振和復(fù)位電路略)連接硬件電路。

圖7-50電路原理圖7.10.2Proteus調(diào)試與仿真

參照7.3.3節(jié)建立程序文件,加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境執(zhí)行程序,在ProteusISIS界面中,按動開關(guān),可看到數(shù)碼管顯示的變化,如圖7-51所示。

圖7-51程序運行結(jié)果7.10.3總結(jié)與提示

在有多個中斷同時存在時,應(yīng)注意中斷優(yōu)先級的設(shè)置以及中斷的觸發(fā)方式;

在Proteus與Keil的聯(lián)調(diào)過程中,可以綜合運用Keil中的多種調(diào)試功能來詳細(xì)觀察電路的工作情況;

在某些情況下中斷子程序中需要對各寄存器進(jìn)行保護(hù)。7.11.1Proteus電路設(shè)計

1.元件清單列表

打開ProteusISIS編輯環(huán)境,按表7-11所列的清單添加元件。7.11單片機(jī)與PC機(jī)間的串行通信表7-11元件清單

2.串口模型介紹

串口模型COMPIM及其引腳功能如圖7-52(a)所示。需要注意的是,在ProteusISIS元件庫的“Connectors”類的“D-Type”子類中,也有一個串口模型器件CONN-D9F,如圖7-52(b)所示,因該器件在使用時沒有仿真模型,將導(dǎo)致仿真失敗,所以要避免選用。

圖7-52Proteus串口模型

3.電路原理圖

元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-53所示的原理圖(晶振和復(fù)位電路略)連接硬件電路。

圖7-53電路原理圖

4.串口模型屬性設(shè)置

串口模型屬性設(shè)置:波特率為4800;數(shù)據(jù)位為8;奇偶校驗為無;停止位為1,如圖7-54所示。

圖7-54串口模型屬性設(shè)置

5.虛擬終端屬性設(shè)置

PCT代表計算機(jī)發(fā)送數(shù)據(jù),PCR用來監(jiān)視PC接收到的數(shù)據(jù),它們的屬性設(shè)置完全一樣,如圖7-55所示。SCMT和SCMR分別是單片機(jī)的數(shù)據(jù)發(fā)送和接收終端,用來監(jiān)視單片機(jī)發(fā)送和接收的數(shù)據(jù),它們的屬性設(shè)置也完全一樣,如圖

7-56所示。圖7-55PC機(jī)虛擬終端屬性設(shè)置圖7-56單片機(jī)虛擬終端屬性設(shè)置7.11.2Proteus調(diào)試與仿真

參照7.3.3節(jié)建立程序文件,加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境執(zhí)行程序,進(jìn)行以下操作:

(1)在ProteusISIS界面中的PCT虛擬終端上單擊右鍵,在彈出的快捷菜單中選擇“EchoTypedCharacters”項。

(2)鼠標(biāo)指針在PCT終端窗口單擊,該窗口出現(xiàn)閃爍的光標(biāo),從鍵盤輸入數(shù)字“8”,在PCS終端窗口中就出現(xiàn)“8”,表明PC機(jī)發(fā)送數(shù)據(jù)“8”,按照設(shè)計好的程序,單片機(jī)將接收到“8”,所以在單片機(jī)接收虛擬終端SCMR上會顯示“8”,同時又將數(shù)字“8”送顯到數(shù)碼管上。接下來,單片機(jī)又將該數(shù)回發(fā)給PC機(jī),因此在單片機(jī)發(fā)送終端SCMT上也顯示“8”,PC機(jī)接收

到數(shù)據(jù)后在接收終端PCR上同樣顯示“8”,結(jié)果如圖7-57所示。根據(jù)程序設(shè)計,當(dāng)在鍵盤上輸入0~9以外的字符時,單片機(jī)輸出到數(shù)碼管上顯示的則是該字符的ASCII碼,如圖7-58所示。圖7-57程序運行結(jié)果1圖7-58程序運行結(jié)果27.11.3總結(jié)與提示

在原理圖中的電阻R1不能少,否則虛擬終端PCR將收不到信息;

在Proteus與Keil的聯(lián)調(diào)過程中,可以綜合運用Keil中的多種調(diào)試功能來詳細(xì)觀察系統(tǒng)的工作過程;

在Proteus仿真中,單片機(jī)和COMPIM之間也可以不用加MAX232器件。7.12.1Proteus電路設(shè)計

1.元件清單列表

打開ProteusISIS編輯環(huán)境,按表7-12所列的清單添加元件。7.12單片機(jī)與步進(jìn)電機(jī)的接口技術(shù)表7-12元件清單

2.步進(jìn)電機(jī)元件介紹

Proteus軟件中的單極性步進(jìn)電機(jī)元件為6線制,其原理圖及屬性編輯框如圖7-59所示,各屬性值可根據(jù)需要修改。本例中所設(shè)置的屬性值均如圖7-59所示。

圖7-59單極性步進(jìn)電機(jī)原理圖及屬性

3.電路原理圖

元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-60所示的原理圖連接硬件電路。

圖7-60電路原理圖7.12.2Proteus調(diào)試與仿真

參照7.3.3節(jié)建立程序文件,加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境執(zhí)行程序,進(jìn)行如下操作:

(1)在ProteusISIS界面中,按“正轉(zhuǎn)”、“反轉(zhuǎn)”按鈕,觀察步進(jìn)電機(jī)的狀態(tài),如圖7-61所示。

(2)觀察步進(jìn)電機(jī)的單拍轉(zhuǎn)動角度,從而體會4相8拍的含義。圖7-61程序運行結(jié)果7.12.3總結(jié)與提示

在進(jìn)行仿真時,可以在單片機(jī)的P1.0~P1.3口上接入邏輯分析儀來監(jiān)測控制信號的工作狀態(tài)(本例略)。

可修改步進(jìn)電機(jī)屬性中的步進(jìn)角以觀察不同的仿真結(jié)果。

在Proteus與Keil的聯(lián)調(diào)過程中,可以綜合運用Keil中的多種調(diào)試功能來詳細(xì)觀察電路的工作情況。7.13.1Proteus電路設(shè)計

1.元件清單列表

打開ProteusISIS編輯環(huán)境,按表7-13所列的清單添加元件。7.13單片機(jī)與直流電動機(jī)的接口技術(shù)表7-13元件清單

2.電路原理圖

元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-62所示的原理圖連接硬件電路。

圖7-62電路原理圖7.13.2Proteus調(diào)試與仿真

參照7.3.3節(jié)建立程序文件,加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境執(zhí)行程序。在ProteusISIS界面中,調(diào)節(jié)電位器RV1,可以看到電機(jī)轉(zhuǎn)速隨著電位器的調(diào)節(jié)發(fā)生相應(yīng)的變化,如圖7-63所示。同時通過示波器觀察單片機(jī)輸出的PWM控制脈沖信號,如圖7-64所示。切換開關(guān)SW1的狀態(tài)可切換電機(jī)的正、反轉(zhuǎn)。圖7-63程序運行結(jié)果圖7-64單片機(jī)輸出的PWM控制脈沖信號7.13.3總結(jié)與提示

嘗試直接給電動機(jī)加相同幅值的直流電壓,并觀察其轉(zhuǎn)速大小,如圖7-65所示,與單片機(jī)控制下直流電動機(jī)的最大轉(zhuǎn)動速度做比較,觀察差別并思考其中的原因。

在ProteusISIS界面中雙擊直流電機(jī),可打開其屬性編輯框,并根據(jù)需要修改其屬性值,包括標(biāo)稱電壓和轉(zhuǎn)速等。圖7-65直接加工作電壓的直流電機(jī)7.14.1Proteus電路設(shè)計

1.元件清單列表

打開ProteusISIS編輯環(huán)境,按表7-14所列的清單添加元件。7.14基于DAC0832數(shù)/模轉(zhuǎn)換器的數(shù)控電源表7-14元件清單

2.電路原理圖

元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-66所示的原理圖(復(fù)位與振蕩電路略)連接硬件電路。

圖7-66電路原理圖其程序流程如圖7-67所示。

圖7-67程序流程圖7.14.2Proteus調(diào)試與仿真

參照7.3.3節(jié)建立程序文件,加載目標(biāo)代碼文件,進(jìn)入調(diào)試環(huán)境執(zhí)行程序,在ProteusISIS界面中,觀察LM317輸出端的數(shù)字電壓表示值發(fā)生的變化,仿真片段如圖7-68所示。圖7-68程序運行結(jié)果7.14.3總結(jié)與提示

對本例程序進(jìn)行修改,可產(chǎn)生不同波形連續(xù)變化的輸出電壓。

LM317可調(diào)輸出電壓的最低值為1.25V,通過本例也能觀察到這一點。

由于LM358輸出沒有調(diào)零電路,不能校準(zhǔn),因此數(shù)/模轉(zhuǎn)換輸出結(jié)果存在一定的誤差,導(dǎo)致可調(diào)電壓源的輸出也存在誤差,在本例中亦有所體現(xiàn)。7.15.1Proteus電路設(shè)計

1.元件清單列表

打開ProteusISIS編輯環(huán)境,按表7-15所列的清單添加元件。7.15基于ADC0808模/數(shù)轉(zhuǎn)換器的數(shù)字電壓表表7-15元件清單

2.電路原理圖

元件全部添加后,在ProteusISIS的編輯區(qū)域中按圖7-69所示的原理圖連接硬件電路。

圖7-69電路原理圖7.15.2源程序設(shè)計

ADC0808在進(jìn)行A/D轉(zhuǎn)換時需要有CLOCK信號,我們在硬件電路設(shè)計中將ADC0808的CLOCK信號接在了AT89C51單片機(jī)的P3.3端口上,即通過P3.3端口為ADC0808提供CLOCK信號,因此在程序編寫時要由軟件產(chǎn)生該時鐘信號。

其程序流程如圖7-70所示。圖7-70程序流程圖程序源代碼如下:

#include〈reg51.h〉

#defineucharunsignedchar

#defineuintunsignedint

ucharcodea[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

ucharcodea1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

ucharcodeb[4]={0xfe,

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論