新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于Keil的實(shí)驗(yàn)仿真板的使用

基于Keil的實(shí)驗(yàn)仿真板的使用

作者: 時(shí)間:2011-05-06 來(lái)源:網(wǎng)絡(luò) 收藏

圖4 板2 數(shù)碼管和鍵盤部份的電路圖
圖3 板的設(shè)置
軟件實(shí)全教程(五)
CLR StartEnd ;啟動(dòng)時(shí)處于停止?fàn)顟B(tài)
MOV LAMPCODE,#01H ;單燈流動(dòng)的代碼
LOOP: ACALL KEY ;調(diào)用鍵盤程序
JNB F0,LNEXT ;如果無(wú)鍵按下,則繼續(xù)
ACALL KEYPROC ;否則調(diào)用鍵盤處理程序
LNEXT: ACALL LAMP ;調(diào)用燈顯示程序
AJMP LOOP ;反復(fù)循環(huán),主程序到此結(jié)束
;延時(shí)程序,鍵盤處理中調(diào)用
DELAY: MOV R7,#100
D1: MOV R6,#100
DJNZ R6,$
DJNZ R7,D1
RET
KEYPROC:
MOV A,B ;從B 寄存器中獲取鍵值
JB ACC.2,KeyStart ;分析鍵的代碼,某位被按下,則該位為1
JB ACC.3,KeyOver
JB ACC.4,KeyUp
JB ACC.5,KeyDown
AJMP KEY_RET
KeyStart:
SETB StartEnd ;第一個(gè)鍵按下后的處理
AJMP KEY_RET
KeyOver:
CLR StartEnd ;第二個(gè)鍵按下后的處理
AJMP KEY_RET
KeyUp:
SETB UpDown ;第三個(gè)鍵按下后的處理
AJMP KEY_RET
KeyDown:
CLR UpDown ;第四個(gè)鍵按下后的處理
KEY_RET:
RET
KEY:
CLR F0 ;清F0,表示無(wú)鍵按下。
ORL P3,#00111100B ;將P3 口的接有鍵的四位置1
MOV A,P3 ;取P3 的值
ORL A,#11000011B ;將其余4 位置1
CPL A ;取反
JZ K_RET ;如果為0 則一定無(wú)鍵按下
CALL DELAY ;否則延時(shí)去鍵抖
ORL P3,#00111100B
MOV A,P3
ORL A,#11000011B
軟件實(shí)全教程(五)
CPL A
JZ K_RET
MOV B,A ;確實(shí)有鍵按下,將鍵值存入B 中
SETB F0 ;設(shè)置有鍵按下的標(biāo)志
;以下的代碼是可以被注釋掉的,如果去掉注釋,就具有判斷鍵是否釋放的功能,否則
沒有
K_RET: ;ORL P3,#00111100B ;此處循環(huán)等待鍵的釋放
;MOV A,P3
;ORL A,#11000011B
;CPL A
;JZ K_RET1 ;讀取的數(shù)據(jù)取反后為0 說(shuō)明鍵釋放了
;AJMP K_RET
;K_RET1:CALL DELAY ;消除后沿抖動(dòng)
RET
D500MS: ;流水燈的延遲時(shí)間
MOV R7,#255
D51: MOV R6,#255
DJNZ R6,$
DJNZ R7,D51
RET
LAMP:
JB StartEnd,LampStart ;如果StartEnd=1,則啟動(dòng)
MOV P1,#0FFH
AJMP LAMPRET ;否則關(guān)閉所有顯示,返回
LampStart:
JB UpDown,LAMPUP ;如果UpDown=1,則向上流動(dòng)
MOV A,LAMPCODE
RL A ;實(shí)際就是左移位而已
MOV LAMPCODE,A
MOV P1,A
LCALL D500MS
LCALL D500MS
AJMP LAMPRET
LAMPUP:
MOV A,LAMPCODE
RR A ;向下流動(dòng)實(shí)際就是右移
MOV LAMPCODE,A
MOV P1,A
LCALL D500MS
LAMPRET:
RET
END
將程序輸入并建立工程文件,設(shè)置工程文件,在Debug 標(biāo)簽頁(yè)中加入“-dledkey”,匯
編、連接文件,按Ctrl+F5 開始調(diào)試,打開板,F5 功能鍵全速運(yùn)行,可以看到所
軟件實(shí)全教程(五)
有燈均不亮,點(diǎn)擊最上面的按鈕,立即會(huì)看到燈流動(dòng)起來(lái)了,點(diǎn)擊第二個(gè)按鍵,燈將停止流
動(dòng),再次點(diǎn)擊第一個(gè)按鈕,使燈流動(dòng)起來(lái),點(diǎn)擊第三個(gè)按鈕,可以發(fā)現(xiàn)燈流動(dòng)的方向變了,
點(diǎn)擊第四個(gè)按鈕,燈的流動(dòng)方向又變回來(lái)了。如果沒有出現(xiàn)所描述的現(xiàn)象,可以單步、
過程單步等調(diào)試手段進(jìn)行調(diào)試,在進(jìn)行調(diào)試時(shí)仿真板會(huì)隨時(shí)顯示出當(dāng)前的情況,是不是
非常的直觀和方便呢?
下面的一個(gè)例子是關(guān)于第二塊實(shí)驗(yàn)仿真板的,演示點(diǎn)亮8 位數(shù)碼管。例9:
ORG 0000h
JMP MAIN
ORG 30H
MAIN:
MOV SP,#5FH
MOV R1,#08H
MOV R0,#58H ;顯示緩沖區(qū)首地址
MOV A,#2
INIT:
MOV @R0,A ;初始化顯示緩沖區(qū)
INC A
INC R0
DJNZ R1,INIT ;將0-7 送顯示緩沖區(qū)
LOOP:
CALL DISPLAY
JMP LOOP
;主程序到此結(jié)束
DISPLAY:
MOV R0,#7FH ;列選擇
MOV R7,#08H ;共有8 個(gè)字符
MOV R1,#58H ;顯示緩沖區(qū)首地址
AGAIN:
MOV A,@R1
MOV DPTR,#DISPTABLE
MOVC A,@A+DPTR
MOV P0,A
MOV P2,R0
MOV A,R0
RR A
MOV R0,A
INC R1
DJNZ R7,AGAIN
RET
DISPTABLE: DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0FFH ;字形碼表
END
這一程序內(nèi)部RAM 中58H 到5FH 被當(dāng)成是顯示緩沖區(qū),主程序中用2-9 填充該顯示
區(qū),然后調(diào)用顯示程序顯示2-9。這里是用了最簡(jiǎn)單的逐位顯示的方式編寫的顯示程序。
最后介紹一個(gè)小小技巧,將鼠標(biāo)移入按鈕區(qū)域,按下左鍵,按鈕顯示被按下,不要放開
Keil 軟件實(shí)全教程(五)
鼠標(biāo)左鍵,將光標(biāo)移出按鈕區(qū)域,松開左鍵,可以看到,按鈕仍處于按下狀態(tài),利用這一功
能,在需要I/O 口長(zhǎng)期處于低電平時(shí),你就不必一直用手按著鼠標(biāo)的左鍵啦。

本文引用地址:http://2s4d.com/article/150794.htm


上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉