新聞中心

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

        基于Keil的實驗仿真板的使用

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

        圖4 板2 數(shù)碼管和鍵盤部份的電路圖
        圖3 板的設(shè)置
        軟件實全教程(五)
        CLR StartEnd ;啟動時處于停止?fàn)顟B(tài)
        MOV LAMPCODE,#01H ;單燈流動的代碼
        LOOP: ACALL KEY ;調(diào)用鍵盤程序
        JNB F0,LNEXT ;如果無鍵按下,則繼續(xù)
        ACALL KEYPROC ;否則調(diào)用鍵盤處理程序
        LNEXT: ACALL LAMP ;調(diào)用燈顯示程序
        AJMP LOOP ;反復(fù)循環(huán),主程序到此結(jié)束
        ;延時程序,鍵盤處理中調(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 ;第一個鍵按下后的處理
        AJMP KEY_RET
        KeyOver:
        CLR StartEnd ;第二個鍵按下后的處理
        AJMP KEY_RET
        KeyUp:
        SETB UpDown ;第三個鍵按下后的處理
        AJMP KEY_RET
        KeyDown:
        CLR UpDown ;第四個鍵按下后的處理
        KEY_RET:
        RET
        KEY:
        CLR F0 ;清F0,表示無鍵按下。
        ORL P3,#00111100B ;將P3 口的接有鍵的四位置1
        MOV A,P3 ;取P3 的值
        ORL A,#11000011B ;將其余4 位置1
        CPL A ;取反
        JZ K_RET ;如果為0 則一定無鍵按下
        CALL DELAY ;否則延時去鍵抖
        ORL P3,#00111100B
        MOV A,P3
        ORL A,#11000011B
        軟件實全教程(五)
        CPL A
        JZ K_RET
        MOV B,A ;確實有鍵按下,將鍵值存入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 說明鍵釋放了
        ;AJMP K_RET
        ;K_RET1:CALL DELAY ;消除后沿抖動
        RET
        D500MS: ;流水燈的延遲時間
        MOV R7,#255
        D51: MOV R6,#255
        DJNZ R6,$
        DJNZ R7,D51
        RET
        LAMP:
        JB StartEnd,LampStart ;如果StartEnd=1,則啟動
        MOV P1,#0FFH
        AJMP LAMPRET ;否則關(guān)閉所有顯示,返回
        LampStart:
        JB UpDown,LAMPUP ;如果UpDown=1,則向上流動
        MOV A,LAMPCODE
        RL A ;實際就是左移位而已
        MOV LAMPCODE,A
        MOV P1,A
        LCALL D500MS
        LCALL D500MS
        AJMP LAMPRET
        LAMPUP:
        MOV A,LAMPCODE
        RR A ;向下流動實際就是右移
        MOV LAMPCODE,A
        MOV P1,A
        LCALL D500MS
        LAMPRET:
        RET
        END
        將程序輸入并建立工程文件,設(shè)置工程文件,在Debug 標(biāo)簽頁中加入“-dledkey”,匯
        編、連接文件,按Ctrl+F5 開始調(diào)試,打開板,F5 功能鍵全速運行,可以看到所
        軟件實全教程(五)
        有燈均不亮,點擊最上面的按鈕,立即會看到燈流動起來了,點擊第二個按鍵,燈將停止流
        動,再次點擊第一個按鈕,使燈流動起來,點擊第三個按鈕,可以發(fā)現(xiàn)燈流動的方向變了,
        點擊第四個按鈕,燈的流動方向又變回來了。如果沒有出現(xiàn)所描述的現(xiàn)象,可以單步、
        過程單步等調(diào)試手段進(jìn)行調(diào)試,在進(jìn)行調(diào)試時仿真板會隨時顯示出當(dāng)前的情況,是不是
        非常的直觀和方便呢?
        下面的一個例子是關(guā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 個字符
        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。這里是用了最簡單的逐位顯示的方式編寫的顯示程序。
        最后介紹一個小小技巧,將鼠標(biāo)移入按鈕區(qū)域,按下左鍵,按鈕顯示被按下,不要放開
        Keil 軟件實全教程(五)
        鼠標(biāo)左鍵,將光標(biāo)移出按鈕區(qū)域,松開左鍵,可以看到,按鈕仍處于按下狀態(tài),利用這一功
        能,在需要I/O 口長期處于低電平時,你就不必一直用手按著鼠標(biāo)的左鍵啦。

        本文引用地址:http://www.104case.com/article/150794.htm


        上一頁 1 2 下一頁

        關(guān)鍵詞: 使用 仿真 實驗 Keil 基于

        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 宜阳县| 綦江县| 锦州市| 陆川县| 开封市| 明水县| 庆城县| 景德镇市| 长春市| 宜良县| 庆安县| 乌审旗| 新余市| 盐津县| 西乌| 宝应县| 栖霞市| 无为县| 团风县| 子洲县| 青海省| 法库县| 山东| 于田县| 岳西县| 响水县| 长白| 桂阳县| 海阳市| 建水县| 鹿邑县| 额济纳旗| 讷河市| 措美县| 石屏县| 新宾| 依安县| 柘城县| 蓬安县| 林西县| 安多县|