• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 基于Keil的實驗仿真板的使用

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

    作者: 時間:2011-05-06 來源:網絡 收藏

    圖4 板2 數碼管和鍵盤部份的電路圖
    圖3 板的設置
    軟件實全教程(五)
    CLR StartEnd ;啟動時處于停止狀態
    MOV LAMPCODE,#01H ;單燈流動的代碼
    LOOP: ACALL KEY ;調用鍵盤程序
    JNB F0,LNEXT ;如果無鍵按下,則繼續
    ACALL KEYPROC ;否則調用鍵盤處理程序
    LNEXT: ACALL LAMP ;調用燈顯示程序
    AJMP LOOP ;反復循環,主程序到此結束
    ;延時程序,鍵盤處理中調用
    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 ;設置有鍵按下的標志
    ;以下的代碼是可以被注釋掉的,如果去掉注釋,就具有判斷鍵是否釋放的功能,否則
    沒有
    K_RET: ;ORL P3,#00111100B ;此處循環等待鍵的釋放
    ;MOV A,P3
    ;ORL A,#11000011B
    ;CPL A
    ;JZ K_RET1 ;讀取的數據取反后為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 ;否則關閉所有顯示,返回
    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
    將程序輸入并建立工程文件,設置工程文件,在Debug 標簽頁中加入“-dledkey”,匯
    編、連接文件,按Ctrl+F5 開始調試,打開板,F5 功能鍵全速運行,可以看到所
    軟件實全教程(五)
    有燈均不亮,點擊最上面的按鈕,立即會看到燈流動起來了,點擊第二個按鍵,燈將停止流
    動,再次點擊第一個按鈕,使燈流動起來,點擊第三個按鈕,可以發現燈流動的方向變了,
    點擊第四個按鈕,燈的流動方向又變回來了。如果沒有出現所描述的現象,可以單步、
    過程單步等調試手段進行調試,在進行調試時仿真板會隨時顯示出當前的情況,是不是
    非常的直觀和方便呢?
    下面的一個例子是關于第二塊實驗仿真板的,演示點亮8 位數碼管。例9:
    ORG 0000h
    JMP MAIN
    ORG 30H
    MAIN:
    MOV SP,#5FH
    MOV R1,#08H
    MOV R0,#58H ;顯示緩沖區首地址
    MOV A,#2
    INIT:
    MOV @R0,A ;初始化顯示緩沖區
    INC A
    INC R0
    DJNZ R1,INIT ;將0-7 送顯示緩沖區
    LOOP:
    CALL DISPLAY
    JMP LOOP
    ;主程序到此結束
    DISPLAY:
    MOV R0,#7FH ;列選擇
    MOV R7,#08H ;共有8 個字符
    MOV R1,#58H ;顯示緩沖區首地址
    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
    這一程序內部RAM 中58H 到5FH 被當成是顯示緩沖區,主程序中用2-9 填充該顯示
    區,然后調用顯示程序顯示2-9。這里是用了最簡單的逐位顯示的方式編寫的顯示程序。
    最后介紹一個小小技巧,將鼠標移入按鈕區域,按下左鍵,按鈕顯示被按下,不要放開
    Keil 軟件實全教程(五)
    鼠標左鍵,將光標移出按鈕區域,松開左鍵,可以看到,按鈕仍處于按下狀態,利用這一功
    能,在需要I/O 口長期處于低電平時,你就不必一直用手按著鼠標的左鍵啦。

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


    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 锦屏县| 团风县| 福泉市| 五峰| 西乡县| 石阡县| 五莲县| 通道| 津南区| 从化市| 栾川县| 兰溪市| 溧阳市| 民权县| 平山县| 吕梁市| 光山县| 综艺| 天全县| 镇康县| 新巴尔虎右旗| 襄樊市| 历史| 上犹县| 红河县| 武威市| 东兰县| 虹口区| 青田县| 常山县| 额济纳旗| 彩票| 牡丹江市| 绍兴市| 丰宁| 兴业县| 东光县| 综艺| 丹东市| 大连市| 盈江县|