《單片機應用實例開發(fā)》課件第3章_第1頁
《單片機應用實例開發(fā)》課件第3章_第2頁
《單片機應用實例開發(fā)》課件第3章_第3頁
《單片機應用實例開發(fā)》課件第3章_第4頁
《單片機應用實例開發(fā)》課件第3章_第5頁
已閱讀5頁,還剩185頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

3.1多彩流水燈電路的設計

3.2多彩流水燈程序的設計

3.3按鍵控制彩燈的設計

3.4單個數(shù)碼管顯示接口的設計

3.5習題實例三循環(huán)、查表和中斷系統(tǒng)學習目標

◆理解多彩流水燈控制電路的構成、工作原理和電路中各元器件的作用,并對電路進行分析和計算。

◆理解51單片機的時序概念和內部數(shù)據(jù)/程序存儲器結構,掌握工作寄存器的使用方法。

◆正確使用MedWin軟件的端口、查看寄存器、特殊功能、設置斷點、執(zhí)行到光標處等調試功能,調整指令的執(zhí)行時間。

◆正確理解程序設計框架,掌握循環(huán)結構程序的編寫方法,掌握EQU、DATA等偽指令的使用方法。

◆掌握特殊功能寄存器中累加器ACC和狀態(tài)寄存器PSW的使用?!衾斫?1單片機的內部定時器/計數(shù)器結構,掌握定時器的工作原理和TMOD的使用。

◆正確使用RR、RL、RRC、RLC等邏輯運算指令和MOVC查表指令。

◆正確使用DJNZ、CJNE、NOP、ACALL/LCALL、RET和INC等指令。

◆正確使用Proteus仿真軟件調試電動車轉向燈控制系統(tǒng)。

◆設計和制作多彩流水燈控制系統(tǒng),對電路中的故障現(xiàn)象進行分析判斷并加以解決,通過調試得到正確結果。

工作任務

◆測試多彩流水燈控制電路并進行結果描述。

◆設計、制作與調試多彩流水燈控制系統(tǒng)。

◆撰寫設計文檔與測試報告。

大街上人們經常能看見各式各樣的霓虹燈,五顏六色的燈以不同的閃亮方式裝點著城市,下面我們就從控制彩燈開始學習單片機編程的旅程。本實例以彩燈控制為例介紹LJ-_2彩燈控制板的應用,并以此為引子逐步引導大家掌握單片機的基本結構及開發(fā)方法。3.1多彩流水燈電路的設計

學習目標◆理解多彩流水燈控制電路的構成、工作原理和電路中各元器件的作用,并對電路進行分析和計算。

工作任務◆測試多彩流水燈控制電路并進行結果描述。多彩流水燈的控制電路根據(jù)不同的設計要求有不同的設計,我們先學習較簡單的控制電路設計。在實例二中我們學習了單個發(fā)光二極管的控制,因此不難想象多彩流水燈的控制電路可以采用和2.1.2節(jié)中單個發(fā)光二極管控制電路類似的設計。假設多彩流水燈由8個發(fā)光二極管構成,那么,就可以采用如圖3-1所示的電路設計。圖3-18盞流水燈仿真圖

【練習】

項目:16盞流水燈控制電路的設計。

項目編號:EX3_1。

任務要求:在Proteus平臺中繪制單燈點亮控制電路,撰寫練習報告(格式要求見附錄A)。

設計設備與軟件:計算機1臺,Proteus軟件1套。

設計步驟:

(1)打開Proteus軟件。

(2)取用所需元器件,并擺放好位置。

(3)連接好電路。

(4)計算電路中的主要參數(shù)值,并設置好相關器件。

仿真圖如圖3-2所示。圖3-216盞流水燈仿真圖3.2多彩流水燈程序的設計

學習目標◆正確使用MedWin軟件的端口、設置斷點、執(zhí)行到光標處等調試功能,調整指令的執(zhí)行時間?!粽_使用MedWin軟件的查看寄存器、特殊功能寄存器等功能?!粽_理解程序設計框架,掌握循環(huán)結構程序的編寫方法,掌握EQU、DATA等偽指令的使用方法?!粽莆仗厥夤δ芗拇嫫髦欣奂悠鰽CC和狀態(tài)寄存器PSW的使用。◆正確使用RR、RL、RRC、RLC等邏輯運算指令和MOVC查表指令。

工作任務

◆設計與調試多彩流水燈控制程序。

◆撰寫設計文檔與測試報告。

3.2.18盞燈輪流式點亮

假設將要實現(xiàn)如下要求:P1口作輸出口,編寫程序控制P1口各發(fā)光二極管依次向左輪流點亮,每次點亮的時間為0.5s。

1.設計思路

(1)通過前面2.2.1節(jié)尋址方式的介紹,不難想到,若要控制P1口的發(fā)光二極管的亮滅,則使用立即尋址方式的指令,將相應的控制代碼直接送給P1口就可以實現(xiàn),所以很顯然我們將要用到立即尋址方式的指令“MOV P1,#data”。

(2)設計要求中提到各發(fā)光二極管的點亮時間為0.2s,故彩燈狀態(tài)控制代碼需保持0.2?s后再修改,所以我們需要有能延時0.2s的延時子程序。

(3)由于設計要求中各發(fā)光二極管是依次輪流點亮的,因此通過分析控制代碼之間的關系,不難發(fā)現(xiàn)它們之間的循環(huán)移位的特點。

2.基本知識

1)寄存器尋址(Rn)

由指令指出某一個寄存器的內容作為操作數(shù),這種尋址方式稱為寄存器尋址。

理解:以去圖書館借書為例,一般圖書館都會設置一個新書架,近期買的書都放在新書架上,以便于讀者借閱。新書架和其他的書架都是統(tǒng)一編號的,只是為了讀者借閱方便,通常不說它的編號而直接稱其為新書架。這和寄存器及其他的直接地址單元統(tǒng)一編址是一樣的。為了使用方便,給指定的一些直接地址單元另取了名稱(R0~R7),這樣我們就可以不用記它們的地址了。例如:

MOV P1,R2 ;機器碼為8AH,90H圖3-3寄存器 尋址方式指令執(zhí)行示意圖

這條指令的功能是把寄存器R2中存放的數(shù)送到P1端口。至于這里的寄存器R2屬于哪一個寄存器組,則由PSW中RS1和RS0的值來確定。假設PSW中RS1和RS0的值分別為0和1,可知此時的R2屬于第一組,那么它的地址為0AH。假設0AH中存放的數(shù)據(jù)為7FH,則執(zhí)行該指令后,P1端口的值為7FH。該指令執(zhí)行示意圖如圖3-3所示。圖3-3寄存器尋址方式指令執(zhí)行示意圖可以通過在MedWin中仿真以下程序來幫助理解寄存器尋址方式指令的執(zhí)行情況。

ORG 0000H ;程序頭

LJMPMAIN

ORG 0030H

MAIN:MOV P1,R2 ;寄存器R2的值送P1端口

SJMP $ ;“$”的含義為包含該符號的指令的 地址,動態(tài)暫停

END ;程序尾仿真過程如下:

(1)在MedWin中編輯好上面這段程序,然后選擇“項目管理”/“編譯匯編”編譯代碼。若沒有語法錯誤,則選擇“調試”/“開始調試”進行調試。

(2)為了觀察數(shù)據(jù)方便,讀者可以選擇“外圍部件”/“端口”,打開“端口”窗口;選擇“查看”/“寄存器”,打開“寄存器”窗口;選擇“查看”/“特殊功能寄存器”,打開“特殊功能寄存器”窗口。寄存器窗口中的值可以通過在數(shù)據(jù)區(qū)雙擊鼠標修改,如圖3-4(b)所示。圖3-4“MOVP1,R2”執(zhí)行過程(a)“MOVP1,R2”執(zhí)行前1;(b)“MOVP1,R2”執(zhí)行前2;(c)“MOVP1,R2”執(zhí)行后圖3-4“MOVP1,R2”執(zhí)行過程(a)“MOVP1,R2”執(zhí)行前1;(b)“MOVP1,R2”執(zhí)行前2;(c)“MOVP1,R2”執(zhí)行后圖3-4“MOVP1,R2”執(zhí)行過程(a)“MOVP1,R2”執(zhí)行前1;(b)“MOVP1,R2”執(zhí)行前2;(c)“MOVP1,R2”執(zhí)行后

(3)為觀察程序運行每一步的結果,讀者可以選擇“調試”/“單步”,使程序單步運行。調試過程如圖3-4(a)~(c)所示。

(4)調試成功后,可產生代碼。將代碼下載到實驗板LJ_2,觀察效果。

2)偽指令

(1)為標號賦值偽指令EQU(Equate)。

偽指令格式:

標號(字符名稱)EQU數(shù)或匯編符號

該指令的作用是將操作數(shù)中的地址或數(shù)據(jù)賦給標號字段中的標號。

例如:

HOUR EQU 30H ;HOUR與30H等值

INC HOUR ;HOUR加1,實際為30H存儲單元 的數(shù)據(jù)加1

(2)數(shù)據(jù)地址賦值偽指令DATA。

偽指令格式:

標號(字符名稱)DATA數(shù)或表達式

該指令的作用是給標號段中的標號賦值,與EQU類似,但也有差別。

①用DATA定義的標識符匯編時將作為標號登記在符號表中,故可以先使用后定義;EQU定義的標識符必須先定義后使用。

②用DATA只能將數(shù)據(jù)或表達式的值賦給字符名,而用EQU可以將一個匯編符號賦給字符名,但不能將表達式的值賦給字符名。③DATA常用來定義數(shù)據(jù)地址。

例如:

XRAM DATA 20F0H

匯編后XRAM的值為20F0H。

3)邏輯運算類指令

邏輯運算類指令主要包括邏輯與、邏輯或、邏輯異或、移位、取反和清零等指令,涉及的助記符包括ANL(邏輯與)、ORL(邏輯或)、XRL(邏輯異或)、RL(左環(huán)移)、RR(右環(huán)移)、RLC(帶進位左環(huán)移)、RRC(帶進位右環(huán)移)、CPL(取反)、CLR(清零)等。這類指令一般不影響PSW中的標志位,僅當目的操作數(shù)為A時會影響P。采用的尋址方式有立即尋址、直接尋址、寄存器尋址和寄存器間接尋址,其指令格式如下: ANL [目的操作數(shù)],[源操作數(shù)]

ORL [目的操作數(shù)],[源操作數(shù)]

XRL [目的操作數(shù)],[源操作數(shù)]

RL A

RR A

RLC A

RRC A

CPL A

CLR A邏輯運算類指令的助記圖如圖3-5所示。圖3-5邏輯運算指令的助記圖循環(huán)移位指令示意圖如圖3-6所示。圖3-6循環(huán)移位指令示意圖下面通過一個例子來加以說明。

設(A)=0C5H(11000101B),C=0,(R0)=47H,(47H)=39H。

RL

A ;執(zhí)行指令后,A=8BH(10001011B),C=0

RLC

A ;執(zhí)行指令后,A=8AH(10001010B),C=1

ANL

A,40H

;執(zhí)行指令后,A=00H(00000000B),C=0

ORL

A,@R0

;執(zhí)行指令后,A=39H

XRL

A,47H

;執(zhí)行指令后,A=00H(00000000B)

CPL

A ;執(zhí)行指令后,A=0FFH

CLRA ;執(zhí)行指令后,A=0

3.設計步驟

(1)設計仿真圖如圖3-1所示,流程圖如圖3-7所示。圖3-78盞燈輪流點亮的流程圖

(2)程序設計所需指令表如表3-1所示。若在MedWin軟件中仿真調試,則可以在“端口”窗口中觀察到P1口跑馬燈的效果。調試好的程序代碼可以加載到Protues仿真電路中調試,調試過程中可以看見實際的流水燈效果,然后下載到目標板上查看實際的效果。說明:讀者應先理解本書所給出的實例,然后自行設計彩燈點亮方式進行訓練。首先,我們提出一些設計要求,然后根據(jù)要求分析并找出實現(xiàn)的方法(設計方案),確定實現(xiàn)方法后結合單片機程序設計的基本框架,舉一反三,完成程序初步設計,再利用MedWin仿真軟件仿真,檢查是否能達到預期效果。若不能,則重新編輯、仿真;若能,則下載到目標板上,觀察實際效果能否順利實現(xiàn),若不能實現(xiàn),則重復上述過程,直至最后設計成功。

【練習】

項目:8盞流水燈控制程序設計一。

項目編號:EX3_2。

任務要求:P1口作輸出口,編寫程序控制P1口各發(fā)光二極管依次向右輪流點亮,每次點亮的時間為0.2s。在MedWin集成開發(fā)環(huán)境中編輯/編譯控制程序,并產生代碼,在Proteus平臺里仿真系統(tǒng),撰寫練習報告(格式要求見附錄A)。

設計設備與軟件:計算機1臺,MedWin或其他同類軟件1套,Proteus軟件1套。設計步驟:

(1)打開MedWin軟件。

(2)新建源程序文件,編輯源代碼。

(3)編譯源程序,若沒有錯,則產生代碼;若有錯,則修改錯誤。

(4)仿真調試程序代碼。

(5)在Proteus中打開8盞流水燈控制電路圖。

(6)加載程序代碼,調試。

3.2.28盞燈縮展式點亮

假設我們在P1口連接了如圖3-8所示的8個紅、黃、綠三種不同顏色的發(fā)光二極管。

以18-27-36-45-45-36-27-18-27…這樣的方式點亮,相鄰狀態(tài)的間隔時間為0.5s。圖3-88盞流水燈的顏色安排

1.設計思路

從設計要求中我們可以找出一定的規(guī)律,因此程序設計時可以考慮利用循環(huán)結構來實現(xiàn)。分析后可知,設計的效果實際為彩燈從兩端亮開始逐步向中間收縮,然后向兩端擴展,再向中間收縮,如此反復。因此我們想到用兩個參數(shù),讓它們每次分別左移和右移后再疊加來實現(xiàn)。

2.設計步驟

(1)仿真圖如圖3-1所示,流程圖如圖3-9所示。圖3-98盞燈遞進點亮的流程圖

(2)程序設計所需指令表如表3-2所示。

【練習】

項目:8盞流水燈控制程序設計二。

項目編號:EX3_3。

任務要求:設計要求同3.2.2節(jié),要求用不同的設計方案來實現(xiàn)。在MedWin集成開發(fā)環(huán)境中編輯/編譯控制程序,并產生代碼,在Proteus平臺里仿真系統(tǒng),撰寫練習報告(格式要求見附錄A)。

設計設備與軟件:計算機1臺,MedWin或其他同類軟件1套,Proteus軟件1套。設計步驟:

(1)打開MedWin軟件。

(2)新建源程序文件,編輯源代碼。

(3)編譯源程序,若沒有錯,則產生代碼;若有錯,則修改錯誤。

(4)仿真調試程序代碼。

(5)在Proteus中打開8盞流水燈控制電路圖。

(6)加載程序代碼,調試。

3.2.38盞燈復雜循環(huán)點亮

彩燈的顏色安排如圖3-8所示,要求以這樣的方式點亮:1-12-123-1234-12345-123456-1234567-12345678-2345678-345678-45678-5678-678-78-8,相鄰狀態(tài)的間隔時間為0.5s。

1.設計思路

從設計要求中我們同樣可以找到一些規(guī)律,但是這種規(guī)律通過簡單的循環(huán)指令并不能實現(xiàn),因此這次我們考慮用帶進位循環(huán)指令RLC、RRC試一試。剛開始每次移位前先預置進位標志為0,這樣依次左移后送給P1口的代碼如下:

再將進位標志置為1后,將代碼依次右移即可實現(xiàn)。

2.設計步驟

(1)仿真圖如圖3-1所示,流程圖如圖3-10所示。圖3-108盞燈復雜循環(huán)點亮

(2)程序設計所需指令表如表3-3所示。

【練習】

項目:8盞流水燈控制程序設計三。

項目編號:EX3_4。

任務要求:設計一個利用51單片機I/O口輸出信號,控制16個發(fā)光二極管每0.2?s交替閃亮,實現(xiàn)跑馬燈,即D1—D2—…D15—D16—D…循環(huán)點亮。閃亮時間由簡單延時電路實現(xiàn)。在MedWin集成開發(fā)環(huán)境中編輯/編譯控制程序,并產生代碼,在Proteus平臺里仿真系統(tǒng),撰寫練習報告(格式要求見附錄A)。

1.思路分析

要求實現(xiàn)16盞燈的閃爍,每次燈亮的時間為0.2?s,形成跑馬燈。參考3.2.3節(jié)舉例,可以采用51單片機的I/O口(此時用作輸出)中的P0和P1口來控制,通過指令周期性地重復改變此I/O口的電平狀態(tài),?此時的間隔時間可以通過執(zhí)行延時指令(無意義的指令)來實現(xiàn)。根據(jù)狀態(tài)控制碼的分析,我們可以采用P1口的狀態(tài)依次左移后再使P0口的狀態(tài)依次右移來實現(xiàn)設計要求。

2.設計步驟

1)硬件電路設計

(1)思路。根據(jù)設計要求分析,可以將16個發(fā)光二極管分別接到P0口(P0.0~P0.7)和P1口(P1.0~P1.7)的端口上,采用直接驅動,為提高驅動電流能力,采用共陽極接法。單片機其他電路接成最小系統(tǒng)即可。

(2)在Proteus中畫好電路圖,如圖3-11所示。圖3-1116盞流水燈仿真圖

2)軟件設計

(1)繪制程序流程圖,如圖3-12所示。

(2)編寫程序代碼如下:

ORG 0000H

LJMP START

ORG 0030H

START: MOV A,#0FEH

;送P1口循環(huán)控制初始狀態(tài)值圖3-1216盞燈循環(huán)點亮的流程圖

3)練習

(1)設計一個利用51單片機I/O口輸出信號,控制16個發(fā)光二極管每0.2?s間隔交替閃亮,實現(xiàn)跑馬燈,即D1—D3—D5…D12—D15—D1…循環(huán)點亮,應該怎樣修改程序呢?

(2)若要實現(xiàn)D1—D3—D5…D13—D15—D13—D11…D5—D3—D1—D3—D5…的效果,又該怎樣修改程序呢?

3.2.48盞燈無序點亮

彩燈的顏色安排如圖3-8所示。要求以這樣的方式點亮,即紅燈亮-綠燈亮-黃燈亮-紅綠燈亮-黃綠燈亮-黃紅燈亮-全亮—全滅-紅燈亮-綠燈亮…,相鄰狀態(tài)的間隔時間為0.5s。

1.設計思路

分析設計要求后,我們會發(fā)現(xiàn)雖然這個設計要求的彩燈效果是有規(guī)律的,但所應設置的控制代碼卻不能找出什么規(guī)律,而每個狀態(tài)分別送又比較繁瑣,所以能不能事先把一些顯示狀態(tài)的代碼設計好,并按照一定的順序保存在一個表格中,當想改變彩燈的狀態(tài)時,就從這個表格里取數(shù)據(jù)出來呢?這樣即便燈前后顯示的狀態(tài)并沒有規(guī)律也沒關系,所以我們這次需要查表指令。

2.基本知識

1)基址變址尋址(@A+PC/@A+DPTR)

這種尋址方式以DPTR或PC為基址寄存器,累加器A為變址寄存器,A中的數(shù)據(jù)為無符號數(shù)。當變址尋址時,把基址和變址兩者的內容相加,所得到的結果作為操作數(shù)的地址。這種尋址方式是單字節(jié)的,用于讀出程序存儲器(ROM)中的內容。該尋址方式的指令也稱為查表指令。理解:為了更好地理解基址變址尋址方式,可以把它看做是去賓館會朋友。好朋友來出差,住在賓館里,你想和他見個面,敘敘舊,朋友讓你去賓館找他,于是你就起程了。要找到你的朋友,首先要找到朋友住的賓館(基址),然后根據(jù)朋友的房號(變址)找到朋友的房間,這樣就可以找到多年未見的朋友,好好敘敘舊了。例如:

MOVC A,@A+DPTR ;機器碼為93H

假設ACC中原來的值為02H,DPTR中的值為01E0H,則A+DPTR形成的地址為01E2H。假設01E2H單元中的內容為27H,則執(zhí)行該指令后,ACC中原來的02H被27H替代。該指令執(zhí)行示意圖如圖3-13所示。

圖3-13基址變址尋址方式指令執(zhí)行示意圖可以通過在MedWin中仿真以下程序來幫助理解基址變址尋址方式指令的執(zhí)行情況。要點:DB為偽指令,稍后再對其做詳細解釋。

仿真過程如下:

(1)在MedWin中編輯好上面這段程序,然后選擇“項目管理”/“編譯匯編”編譯代碼。若沒有語法錯誤,則選擇“調試”/“開始調試”進行調試。

(2)為觀察數(shù)據(jù)方便,讀者可以選擇“外圍部件”/“端口”,打開“端口”窗口;選擇“查看”/“寄存器”,打開“寄存器”窗口;選擇“查看”/“特殊功能寄存器”,打開“特殊功能寄存器”窗口;選擇“查看”/“數(shù)據(jù)區(qū)”,打開內部程序存儲區(qū),觀察01E0H單元段的數(shù)據(jù)。調試過程中可以直接雙擊數(shù)據(jù)區(qū)單元,修改數(shù)據(jù)區(qū)的數(shù)值,如圖3-14(b)所示。

(3)為觀察程序運行每一步的結果,讀者可以選擇“調試”/“單步”,使程序單步運行。調試過程如圖3-14(a)~(c)所示。

(4)調試成功后,可產生代碼。將代碼下載到實驗板LJ_2,觀察效果。圖3-14“MOVP1,A”的執(zhí)行過程(a)“MOVP1,A”執(zhí)行前1;(b)“MOVP1,A”執(zhí)行前2;(c)“MOVP1,A”執(zhí)行后圖3-14“MOVP1,A”的執(zhí)行過程(a)“MOVP1,A”執(zhí)行前1;(b)“MOVP1,A”執(zhí)行前2;(c)“MOVP1,A”執(zhí)行后圖3-14“MOVP1,A”的執(zhí)行過程(a)“MOVP1,A”執(zhí)行前1;(b)“MOVP1,A”執(zhí)行前2;(c)“MOVP1,A”執(zhí)行后

2)偽指令

(1)定義字節(jié)偽指令DB(DefineByte)。

偽指令格式:

<標號:>DB<項或項表>

定義字節(jié)偽指令是在以標號為首地址的連續(xù)存儲單元中存儲項或項表的數(shù)值。項或項表指的是一個字節(jié)、數(shù)、字符串或ASCII碼字符。

要點:數(shù)值的取值范圍應為00H~0FFH,字符串的長度應限制在80個字符內。數(shù)值之間用英文輸入狀態(tài)的逗號分隔,最后一個數(shù)值后不要加符號(注釋符除外)。

例如:

ORG 0100H

TABLE: DB 3FH,06H,'B',"china"

(2)定義字偽指令DW(DefineWord)。

偽指令格式:

<標號:>DW<項或項表>

DW的基本含義和DB的相同,所不同的是其項或項表的數(shù)據(jù)為16位,高8位存低地址,低8位存高地址。

例如:

ORG 0100H

TABLE: DW 3F00H,0678H

3)數(shù)據(jù)傳送類指令

數(shù)據(jù)傳送類指令是應用頻率最高的指令,涉及的指令助記符包括MOV(內部數(shù)據(jù)傳送)、MOVX(外部數(shù)據(jù)傳送)、MOVC(查表)、PUSH(壓棧)、POP(出棧)、XCH(字節(jié)交換)、XCHD(半字節(jié)交換)和SWAP(累加器A高、低半字節(jié)交換)等。

(1)內部數(shù)據(jù)傳送指令。內部數(shù)據(jù)傳送指令用于單片機內部的數(shù)據(jù)存儲器和寄存器之間的數(shù)據(jù)傳送。采用的尋址方式有立即尋址、直接尋址、寄存器尋址和寄存器間接尋址,其指令格式為

MOV [目的操作數(shù)],[源操作數(shù)]

內部數(shù)據(jù)傳送指令的助記圖如圖3-15所示。圖3-15內部數(shù)據(jù)傳送指令的助記圖

(2)棧操作指令。MCS-51單片機內部RAM中設有一個堆棧,以特殊功能寄存器SP(堆棧指針)指出棧頂位置。堆棧的操作規(guī)則為先進后出,這就好比將物品放進儲物柜里,假設放的物品的大小和柜子的截面一樣,那么先放進去的物品總是在底下。若想取出,則只能等后放的物品先取走才能取出來。采用的尋址方式是直接尋址。在指令系統(tǒng)中只有兩條用于數(shù)據(jù)傳送的棧操作指令,其指令格式為

PUSH direct

POP direct前一條是進棧(入?;驂簵?指令,其功能是先將堆棧指針SP的內容加1,即將棧頂上移一個存儲單元,然后將直接地址單元的數(shù)據(jù)傳送(或壓入)到SP所指示的存儲單元中,此時新的棧頂為原棧頂位置加1。

后一條是出棧(彈出)指令,其功能是先將SP所指示存儲單元的數(shù)據(jù)傳送到直接地址單元中,然后將SP的內容減1,此時新的棧頂為原棧頂位置減1。要點:①上電復位后(SP)=07H,若程序設計中需使用1~3組工作寄存器,則在程序設計一開始,應將SP指向內部RAM的高段。

②程序設計中若需使用堆棧,則應注意留出足夠的存儲單元給棧區(qū)。因為棧頂是隨著數(shù)據(jù)的進棧、出棧不斷變化著的,所以若棧區(qū)設置不當,則很有可能造成數(shù)據(jù)區(qū)重疊,以至程序紊亂,無法正常運行。

例如:已知片內RAM40H單元中存放的數(shù)值為0AH,設堆棧指針為5FH,把此數(shù)值壓入堆棧,然后再彈出到30H單元中。根據(jù)題意編寫指令如下:

MOV SP,#5FH ;SP←5FH

PUSH 40H ;(SP)←(SP)+1,(60H)←(40H)

POP 30H ;(30H)←(60H),(SP)←(SP)-1

結果:30H單元內裝入數(shù)值0AH,SP終值為5FH。執(zhí)行過程示意圖如圖3-16所示。圖3-16堆棧操作執(zhí)行過程示意圖(a)原始數(shù)據(jù);(b)PUSH40H后;(c)POP30H后

(3)交換指令。交換指令有全字節(jié)交換和半字節(jié)交換,其目的操作數(shù)均為累加器A。涉及的指令助記符包括XCH(字節(jié)交換)、XCHD(半字節(jié)交換)和SWAP(累加器A高、低半字節(jié)交換)。此類指令可用于處理有某種遞進關系的數(shù)據(jù)。例如,當需利用數(shù)碼管實現(xiàn)顯示數(shù)據(jù)從左至右遞進顯示的效果時,對于顯示數(shù)據(jù)的處理就可以利用交換指令來實現(xiàn)。采用的尋址方式有直接尋址、寄存器尋址和寄存器間接尋址,其指令格式為

XCH [目的操作數(shù)],[源操作數(shù)]

XCHD [目的操作數(shù)],[源操作數(shù)]

SWAP A

交換指令的助記圖如圖3-17所示。圖3-17交換指令的助記圖下面通過一個例子來加以說明(以下指令在執(zhí)行時前后關聯(lián))。

設(A)=27H,(R6)=3EH,(3EH)=4CH,(R1)=20H,(20H)=0FAH。

XCH A,R6 ;指令執(zhí)行后(A)=3EH,(R6)=27H

XCH A,3EH ;指令執(zhí)行后(A)=4CH,(3EH)=3EH

XCH A,@R1;指令執(zhí)行后(A)=0FAH,(R1)=20H, (20H)=4CH

XCHD A,@R1;指令執(zhí)行后(A)=0FCH,(R1)=20H, (20H)=4AH

SWAP A ;指令執(zhí)行后(A)=0CFH

(4)外部數(shù)據(jù)傳送指令。外部數(shù)據(jù)傳送指令通過P0口和P2口來實現(xiàn)累加器A與外部RAM或I/O口之間的數(shù)據(jù)傳送,涉及的指令助記符為MOVX。外部RAM和I/O口統(tǒng)一編址,此時單片機采用總線式工作方式,由P2口(高8位地址)和P0口(低8位地址)構成地址總線,P0口作為數(shù)據(jù)總線,分時傳送地址和數(shù)據(jù)。采用的尋址方式是寄存器間接尋址。其指令格式為

MOVX [目的操作數(shù)],[源操作數(shù)]

外部數(shù)據(jù)傳送指令的助記圖如圖3-18所示。圖3-18外部數(shù)據(jù)傳送指令的助記圖下面通過一個例子來加以說明。

將外部RAM的2040H單元中的內容送到外部RAM40H單元中,指令如下:

MOV DPTR,#2040H;使DPTR指向外部RAM2040H單元

MOVX A,@DPTR

;取外部RAM2040H單元的內容送累加器A

MOV R0,#40H

;使R0指向外部RAM40H單元

MOVX @R0,A

;將累加器A的內容送間接尋址的R0,即送外部RAM40H

(5)查表指令。查表指令是應用于訪問程序存儲器的指令,涉及的指令助記符為MOVC。在MCS-51指令系統(tǒng)中有兩條查表指令,其數(shù)據(jù)表格放在程序存儲器中。采用的尋址方式是基址變址尋址。其指令格式為

MOVC [目的操作數(shù)],[源操作數(shù)]

查表指令的助記圖如圖3-19所示。圖3-19查表指令的助記圖

CPU讀取“MOVCA,@A+PC”指令后,PC的內容自動加1。其功能是將新的PC的內容與累加器A內8位無符號數(shù)相加形成地址,取出該地址單元中的內容送累加器A。

“MOVCA,@A+DPTR”指令以DPTR為基址寄存器進行查表。使用前,先給DPTR賦予某指定查表地址。一般在程序設計時多采用“MOVCA,@A+DPTR”,這樣可以使得計算查表所需的偏移量更簡單。下面通過一個例子來加以說明。

數(shù)碼管(共陰型)顯示值在R2中,要求通過查表找到該顯示值的字型碼,并送P2口顯示。

MOV DPTR,#TABL ;使DPTR指向 表格首地址(基址)

MOV A,R2 ;將R2的值送給A(偏移量)

MOVC A,@A+DPTR ;查表

MOV P2,A ;將A中的字型碼送P2口顯示

……

TABLE: DB 3FH,06H,… ;表格中的列表值

3.設計步驟

(1)仿真圖如圖3-1所示,流程圖如圖3-20所示。

(2)程序設計所需指令表如表3-4所示。圖3-208盞燈無序點亮的流程圖

(3)參考程序代碼如下:

;***********************************

;文件名:EX3_4.asm功能:8盞燈無序點亮

;說明:發(fā)光二極管接在P1口

;***********************************

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN: MOV DPTR,#TABLE

NEXT2: MOV R7,#0

NEXT3: MOV A,R7

MOVC

A,@A+DPTR

MOV P1,A

ACALLDELAY

INC R7

CJNE R7,#08H,NEXT3

SJMP NEXT2

【練習】

項目:8盞流水燈控制程序設計四。

項目編號:EX3_5。

任務要求:自行擬定一個設計要求,要求實現(xiàn)的功能是彩燈以無規(guī)律的方式點亮。在MedWin集成開發(fā)環(huán)境中編輯/編譯控制程序,并產生代碼,在Proteus平臺里仿真系統(tǒng),撰寫練習報告(格式要求見附錄A)。

設計設備與軟件:計算機1臺,MedWin或其他同類軟件1套,Proteus軟件1套。設計步驟:

(1)打開MedWin軟件。

(2)新建源程序文件,編輯源代碼。

(3)編譯源程序,若沒有錯,則產生代碼;若有錯,則修改錯誤。

(4)仿真調試程序代碼。

(5)在Proteus中打開8盞流水燈控制電路圖。

(6)加載程序代碼,調試。3.3按鍵控制彩燈的設計學習目標◆理解獨立按鍵的構成和工作原理,設計接口電路?!衾斫?1單片機的時序概念和內部數(shù)據(jù)/程序存儲器結構,掌握工作寄存器的使用方法。工作任務◆測試按鍵接口電路并對結果進行描述。◆設計與調試按鍵控制程序?!糇珜懺O計文檔與測試報告。

3.3.1按鍵控制單盞燈

當今社會的進步使得消費者對產品的要求越來越高,我們經常希望某個產品具有很多功能,而這個產品往往是不能同時做很多事情的,這時就需要我們來選擇,當前需要它實現(xiàn)什么功能就進行相應的選擇,即輸入一些信息給產品。最常見的輸入設備就是按鍵,當系統(tǒng)需要人機交互輸入信息時,多數(shù)是通過按鍵來輸入信息的。例如,家用抽油煙機的機械控制面板和家用電器的遙控器面板都是通過按鍵來輸入信息的。一般按鍵有觸點式和非觸點式兩種,單片機中應用的一般是由機械觸點構成的。用戶可以通過獨立按鍵輸入簡單的命令或數(shù)據(jù),也可以通過由獨立按鍵構成的矩陣式按鍵來輸入數(shù)據(jù)。在這一小節(jié)中,我們先來認識一下獨立式按鍵接口的設計方法。在單片機系統(tǒng)設計中,以P1.3為例,獨立按鍵的接口電路如圖3-21所示。當按鍵S斷開時,P1.3輸入為高電平;S閉合時,P1.3輸入為低電平。由于按鍵是機械觸點,因此當機械觸點斷開、閉合時,會有抖動。P1.3輸入端的抖動波形如圖3-22所示。由于單片機的處理時間是微秒級,按鍵的機械抖動時間至少是毫秒級,因此為了使單片機能正確地讀出按鍵(P1.3口)的狀態(tài),對每一次按鍵只作一次響應,就必須考慮去除抖動。常用去抖動的方法有兩種:硬件法和軟件法。單片機系統(tǒng)設計中常用軟件法,即利用延時來避開按鍵抖動,在單片機獲得P1.3口為低的信息后,不是立即認定S已被按下,而是延時10?ms或更長一段時間后再次檢測P1.3口的狀態(tài),如果仍為低,則說明S的確按下了。在檢測到按鍵釋放(P1.3為高)后,再延時5~10?ms,消除后沿的抖動,然后對鍵值進行處理。在實際應用中,對按鍵的要求千差萬別,要根據(jù)不同的需要來編制處理程序,但以上是消除按鍵抖動的原則。圖3-21獨立按鍵的接口電路圖3-22P1.3輸入端的抖動波形設計要求:按鍵S1輸入,紅燈亮;按鍵S2輸入,綠燈亮;按鍵S3輸入,黃燈亮。

首先在Proteus中畫好電路圖,如圖3-23所示。圖3-23獨立按鍵控制

1.設計思路

按鍵識別采用查詢方式。按鍵是否被按下,我們要依據(jù)具體的電路來識別。采用仿真圖3-23所示的電路設計,當按鍵S1被按下時,P2.0通過S1與地連通,也就是我們會在P2.0處得到一個低電平;當按鍵S1未被按下時,P2.0由于內部的上拉電阻而產生高電平。因此,我們可以通過識別P2.0端口的電位來判斷按鍵是否被按下,而在51單片機指令系統(tǒng)中,可以使用JBrel和JNBrel來判斷直接地址位的狀態(tài)。

2.設計步驟

(1)流程圖如圖3-24所示。圖3-24按鍵控制單盞燈的流程圖

(2)程序設計所需指令表如表3-5所示。

【練習】

項目:按鍵控制一。

項目編號:EX3_6。

任務要求:S1按下紅燈亮,松開紅燈滅;S2按下綠燈亮,松開綠燈滅;S3按下黃燈亮,松開黃燈滅。在MedWin集成開發(fā)環(huán)境中編輯/編譯控制程序,并產生代碼,在Proteus平臺里仿真系統(tǒng),撰寫練習報告(格式要求見附錄A)。

設計設備與軟件:計算機1臺,MedWin或其他同類軟件1套,Proteus軟件1套。設計步驟:

(1)打開MedWin軟件。

(2)新建源程序文件,編輯源代碼。

(3)編譯源程序,若沒有錯,則產生代碼;若有錯,則修改錯誤。

(4)仿真調試程序代碼。

(5)在Proteus中打開8盞流水燈控制電路圖。

(6)加載程序代碼,調試。

3.3.2按鍵控制多彩流水燈

按鍵S1輸入,8盞跑馬燈循環(huán)顯示一次;按鍵S2輸入,8盞燈閃爍5次;按鍵S3輸入,紅燈亮-綠燈亮-黃燈亮-紅綠燈亮-黃綠燈亮-黃紅燈亮-全亮—全滅,8種狀態(tài)循環(huán)顯示2次。狀態(tài)每0.5s改變一次。

1.設計思路

這個設計要求中的按鍵識別也可以采用查詢的方法,和上例類似。

2.設計步驟

(1)流程圖如圖3-25所示。圖3-25按鍵控制多彩流水燈的流程圖

(2)程序設計所需指令表如表3-6所示。要點:此設計要求完成后,在實際演示過程中,當程序運行在某一種彩燈顯示方式時,按鍵似乎失去了作用,但當彩燈顯示完成后,按鍵又恢復正常。這是什么原因呢?其實這很容易解釋,因為程序始終是順序執(zhí)行的,而且CPU在同一時刻不可能完成兩個動作,所以,當程序執(zhí)行到彩燈控制程序時,由于該段程序中并沒有穿插按鍵的識別,因此此時按鍵的動作是無法被CPU識別的。你可能會提出希望程序控制可以隨時識別按鍵,并做出響應,這就需要中斷來幫忙了。

【練習】

項目:按鍵控制二。

項目編號:EX3_7。

任務要求:將P3.2所接按鈕設為加1鍵,P3.3所接按鈕設為減1鍵,P1口控制發(fā)光二極管顯示二進制形式的數(shù)值,例如初始的時候P1口的燈全滅,表示數(shù)值“0”,程序運行時實現(xiàn)每次按下加1鍵,P1輸出的數(shù)據(jù)加1,同理,按下減1鍵,P1輸出的數(shù)據(jù)減1。在MedWin集成開發(fā)環(huán)境中編輯/編譯控制程序,并產生代碼,在Proteus平臺里仿真系統(tǒng),撰寫練習報告(格式要求見附錄A)。

設計設備與軟件:計算機1臺,MedWin或其他同類軟件1套,Proteus軟件1套。

1.思路分析

根據(jù)3.3.1節(jié)設計要求的實現(xiàn)方法,按鍵仍可以采用查詢方式,所以可以采用相同的處理方法,只要更換一下按鍵對應的處理程序即可。

2.基礎知識

算術運算類指令主要包括加、減、乘、除、加1、減1等指令,這些指令均是對8位無符號數(shù)進行操作。此類指令執(zhí)行的結果大都會影響PSW中的標志位。其中,加、減運算影響進位CY、溢出位OV、輔助進位AC和奇偶校驗位P;乘、除運算影響OV和P;加1、減1運算只在源操作數(shù)為A時影響P。

1)加法指令

加法指令中包括不帶進位的加法指令、帶進位的加法指令、加1(增量)指令和十進制調整指令,涉及的助記符包括ADD(不帶進位的加法)、ADDC(帶進位的加法)、DA(十進制調整)和INC(加1)。采用的尋址方式有立即尋址、直接尋址、寄存器尋址和寄存器間接尋址。其指令格式如下:

ADD [目的操作數(shù)],[源操作數(shù)]

ADDC [目的操作數(shù)],[源操作數(shù)]

INC [操作數(shù)]

DA A

加法指令的助記圖如圖3-26所示。圖3-26加法指令的助記圖不帶進位的加法指令的功能是把源操作數(shù)和目的操作數(shù)的內容相加,其結果存放在累加器A中;帶進位的加法指令的功能是把源操作數(shù)和目的操作數(shù)的內容相加,再加上進位標志,其結果存放在累加器A中;加1指令的功能是將操作數(shù)的內容加“1”之后,其結果仍放回操作數(shù)本身,若原來為0FFH,則加“1”之后將溢出為00H,但并不影響任何標志位;十進制調整指令是對累加器中的內容(由前一條加法指令計算的結果,其操作數(shù)的內容均為壓縮的BCD碼形式)進行調整,使它變成兩位BCD碼的數(shù)。要點:①不論無符號數(shù)還是有符號數(shù),單片機在運算時均采用二進制數(shù)原則直接運算,數(shù)據(jù)是否溢出依據(jù)CY或OV標志。無符號數(shù)運算時若CY=1,則表示數(shù)據(jù)有溢出;有符號數(shù)運算時若OV=1,則表示數(shù)據(jù)有溢出。

②當需處理一個字節(jié)以上的數(shù)據(jù)進行加運算時,可以借助帶進位的加法指令,其使用方法可以從熟悉的十進制運算推出,即先進行低字節(jié)數(shù)據(jù)的累加,然后進行高字節(jié)數(shù)據(jù)的累加,高字節(jié)數(shù)據(jù)在累加的同時還應考慮低字節(jié)累加時產生的進位。

③兩個壓縮BCD碼進行累加后,必須經“DAA”指令調整后才能得到壓縮的BCD碼的和。不能用DA指令處理減法操作。

2)減法指令

減法指令中包括帶借位的減法指令和減1指令,涉及的指令助記符包括SUBB(帶借位的減法)和DEC(減1)。采用的尋址方式有立即尋址、直接尋址、寄存器尋址和寄存器間接尋址。其指令格式如下:

SUBB [目的操作數(shù)],[源操作數(shù)]

DEC [操作數(shù)]

減法指令的助記圖如圖3-27所示。圖3-27減法指令的助記圖帶借位的減法指令的功能是從累加器A中減去源操作數(shù)的內容和進位標志的內容,其結果存放在累加器A中。減1指令的功能是把操作數(shù)的內容減“1”后,其結果仍放回到操作數(shù)本身,若原來為00H,則溢出為0FFH,不影響任何標志。

要點:①沒有不帶借位的減法指令,當需要進行不帶借位的減法操作(第一次進行減法運算)時,將CY清零即可。

②由于SUBB是帶借位的減法,因此每次使用需考慮前次運算操作對CY的影響。

③?DPTR沒有減1指令,即沒有“DECDPTR”指令。

3)乘法指令

MUL AB ;A×B→BA

乘法指令的功能是把累加器A和寄存器B中的無符號8位數(shù)相乘,所得16位積的低字節(jié)存放在A中,高位字節(jié)存放在B中。若乘積大于0FFH(255),則OV置1,否則OV清零。CY始終為0,同時次指令還影響P。

下面通過一個例子來加以說明。

設A=50H(80),B=0A0H(160)。

執(zhí)行指令:

MUL AB

結果為:A×B=3200H(12800),B=32H,A=00H,OV=1,CY=0。

4)除法指令

DIV AB ;A÷B的商→A,余數(shù)→B

除法指令的功能是進行A除以B的運算,執(zhí)行指令后,商的整數(shù)部分存放在A中,商的余數(shù)部分存放在B中。若原B中的數(shù)據(jù)為0,則執(zhí)行指令后,A和B中的數(shù)據(jù)不變,同時OV置1,否則OV清零。CY始終為0,同時次指令還影響P。

下面通過一個例子來加以說明。

已知A=11H,B=04H,執(zhí)行指令:

DIV AB

計算結果:A=04H,B=01H,CY=0,OV=0。

3.設計步驟

1)硬件電路設計

(1)思路。根據(jù)實驗內容分析,可以將8個發(fā)光二極管分別接到P1(P1.0~P1.7)的端口上,采用直接驅動,為了提高驅動電流能力,采用共陽極接法。按鍵分別接在P3.2和P3.3上,單片機其他電路接成最小系統(tǒng)即可。

(2)在Proteus中畫好電路圖。仿真圖如圖3-28所示。圖3-28按鍵控制二仿真圖

2)軟件設計

(1)繪制程序流程圖,如圖3-29所示。圖3-29按鍵控制二流程圖

(2)編寫程序代碼。參考程序代碼如下:

ORG 0000H

LJMPMAIN

ORG 0030H

MAIN:

MOV SP,#5FH ;初始化

MOV P3,#0FFH

MOV R5,#00H

(3)編譯程序。

(4)仿真調試。

(5)程序燒錄并觀察實際運行結果。

思考:如果將設計要求改為S1每次按下,彩燈顯示的二進制數(shù)加2,那么應怎樣修改程序呢?3.4單個數(shù)碼管顯示接口的設計學習目標◆理解數(shù)碼管的構成和工作原理,設計接口電路?!衾斫?1單片機的時序概念和內部數(shù)據(jù)/程序存儲器的結構,掌握工作寄存器的使用方法。◆理解51單片機的內部定時器/計數(shù)器的結構,掌握定時器的工作原理和TMOD的使用。

工作任務◆測試數(shù)碼管接口電路并對結果進行描述?!粼O計與調試數(shù)碼管控制程序?!糇珜懺O計文檔與測試報告。

3.4.1單個數(shù)碼管顯示原理

完成按鍵控制二的設計后,讀者可能會想要通過觀察彩燈的點亮情況來識別顯示的數(shù)據(jù),但這樣太麻煩了,那么能不能用什么方法讓數(shù)據(jù)以我們熟悉的十進制形式直觀地顯示出來呢?一般的單片機系統(tǒng)設計都需要有人機接口(人機對話)設計,例如空調的遙控面板有按鍵輸入和液晶顯示輸出,全自動洗衣機的控制面板有按鍵輸入、發(fā)光二極管指示和數(shù)碼顯示輸出等。通過前面的學習我們了解了最簡單的輸入設備(獨立按鍵)和輸出設備(發(fā)光二極管)的設計方法,現(xiàn)在,我們來學習單個數(shù)碼管(LED)顯示接口的設計。普通LED顯示器內部其實是由若干個發(fā)光二極管組成的。根據(jù)內部二極管連接方式的不同,LED顯示器在結構上分為共陰極型和共陽極型兩種。共陰極型內部發(fā)光二極管陰極連在一起,需接低電平。共陽極型內部發(fā)光二極管陽極連在一起,需接高電平。普通的單個數(shù)碼管內部共有8個發(fā)光二極管,7個為字段,可組成字形,第8個為小數(shù)點,故單個數(shù)碼管稱為七段數(shù)碼顯示,也稱為八段顯示。由圖3-30(a)可見,a、b、c、d、e、f、g分別為七個發(fā)光段引腳,dp引腳為小數(shù)點,9腳接電源或地,共10個引腳;圖3-31(b)為共陰極型內部電路圖;3-30(c)為共陽極型內部電路。數(shù)碼管工作時每段需串聯(lián)一個限流電阻,而不能將一個電阻放在共陽極或共陰極端,否則,由于各發(fā)光段的參數(shù)不同,容易引起某段過流而燒壞數(shù)碼管。另外,電阻值的選取只要保證管子正常發(fā)光即可。一般單個數(shù)碼管電流控制在10~20mA較合適。電流太大會加大耗電量,而電流太小又無法得到足夠的發(fā)光度。圖3-30數(shù)碼管引腳及內部結構圖(a)數(shù)碼管外形及引腳;(b)共陰極;(c)共陽極數(shù)碼管的發(fā)光原理分兩種情況:共陰極型和共陽極型。但不論哪種類型,對于發(fā)光二極管來說,要使其發(fā)光,只要陽極供高電平,陰極供低電平即可。數(shù)據(jù)線D7~D0的信號輸入到數(shù)碼管dp、g、f、e、d、c、b、a各段,稱為字段碼(或稱字形碼、段碼),數(shù)碼管顯示的結果為字形。表3-7是顯示字形與共陽極和共陰極兩種接法的字段碼的對應關系。其中,共陰極數(shù)碼管的公共端接低電平,共陽極數(shù)碼管的公共端接高電平。若將數(shù)碼管按照引腳a、b、c、d、e、f、g、dp的順序分別接于單片機P1口的P1.0~P1.7,如圖3-31所示,則將字型碼送至P1口即可在數(shù)碼管上顯示字形。若采用共陰的數(shù)碼管,公共端接低電平,執(zhí)行指令“MOVP1,#3FH”,則數(shù)碼管顯示“0”;若采用共陽型數(shù)碼管,公共端接高電平,執(zhí)行指令“MOVP1,#0C0H”,則顯示“0”。圖3-31數(shù)碼管與P1口的連接電路

【練習】

項目:字型碼的確定。

項目編號:EX3_8。

任務要求:若將圖3-31中單片機P1口與數(shù)碼管的連線順序調換成P1.7-a,P1.6-b…P1.0-dp,試將數(shù)字0~9對應的字型碼列入表3-8中。

3.4.2單個數(shù)碼管顯示控制

在Proteus中設計單個數(shù)碼管顯示電路,編程實現(xiàn)0~9計數(shù)循環(huán)顯示。

1.設計思路

分析數(shù)碼管字型碼表格中的數(shù)據(jù)發(fā)現(xiàn),0~9雖然從數(shù)字角度看有連續(xù)遞增1的規(guī)律,但其對應的字型碼卻沒有規(guī)律。根據(jù)3.2.4節(jié)的提示,在將一些無規(guī)律的數(shù)據(jù)以一定的順序輸出時,可以采用查表的方式來實現(xiàn)。

2.設計步驟

1)硬件設計

電路設計為:在單片機最小系統(tǒng)的基礎上,加上單個數(shù)碼管顯示的控制電路,數(shù)碼管采用共陰數(shù)碼管,公共端直接接地。利用單片機P2口送顯示值,P2.0連接數(shù)碼管a段,P2.1連接數(shù)碼管b段,以此類推,小數(shù)點不顯示,設計仿真圖如圖3-32所示。圖3-32單個數(shù)碼管顯示控制仿真圖

2)流程圖設計

要讓數(shù)碼管顯示數(shù)值,應將需顯示的數(shù)值的字型碼送給數(shù)碼管的各段。流程圖如圖3-33所示。圖3-33單個數(shù)碼管顯示流程圖

3)程序設計所需指令表

程序設計所需指令表如表3-9所示。思考:若要讓數(shù)碼管循環(huán)顯示9~0,程序應該做怎樣的修改?

【練習】

項目:簡易人機接口訓練。

項目編號:EX3_9。

任務要求:每按下S1鍵,單個數(shù)碼管順序顯示0~9一次;每按下S2鍵,倒序顯示9~0一次;每按下S3鍵,當前值加1一次。在MedWin集成開發(fā)環(huán)境中編輯/編譯控制程序,并產生代碼,在Proteus平

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論