正文

利用8279可实现对键盘/显示器的自动扫描2005-09-14 21:48:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/niao0311/4755.html

分享到:

利用8279可实现对键盘/显示器的自动扫描,以减轻CPU负担,并具有显示稳定、程序简单、不会出现误动作等特点。
本系统中8279的状态/命令口地址位8701H;数据口地址位8700H。
 示例程序运行将显示"8279 --",并等待按键输入,将键值显示在数码管上(只响应0-F按键)。

 

源代码:

Z8279   EQU     08701H  ;8279 状态/命令口地址
D8279   EQU     08700H  ;8279 数据口地址
LEDMOD  EQU     10H     ;右端输入 八位字符显示
                        ;外部译码键扫描方式,双键互锁
LEDFEQ  EQU     38H     ;扫描速率
LEDCLS  EQU     0D1H    ;清除
LEDWR0  EQU     80H     ;设定的将要写入的显示RAM地址

        ORG     0000H
        AJMP    START
        ORG     0040H
START:
        MOV     SP,#60H
        LCALL   INIT8279        ;初始化8279


WAIT:   MOV     DPTR,#Z8279
        MOVX    A,@DPTR
        ANL     A,#0FH
        JZ      WAIT
        MOV     A,#40H
        MOVX    @DPTR,A
        MOV     DPTR,#D8279
        MOVX    A,@DPTR
        ANL     A,#3FH
        MOV     R4,#00H
        MOV     R5,A
        LCALL   DISLED

        SJMP    WAIT


INIT8279:                       ;8279初始化子程序
        PUSH   DPH              ;保存现场
        PUSH   DPL
        PUSH   ACC
        LCALL  DELAY            ;延时
        MOV    DPTR ,#Z8279
        MOV    A,#LEDMOD        ;置8279工作方式
        MOVX   @DPTR,A
        MOV    A,#LEDFEQ        ;置键盘扫描速率
        MOVX   @DPTR,A
        MOV    A,#LEDCLS        ;清除 LED 显示
        MOVX   @DPTR,A
        LCALL  DELAY            ;延时
        MOV    DPTR,#Z8279
        MOV    A,#90H
        MOV    DPTR,#D8279
        MOV    A,#40H
        MOVX   @DPTR,A
        MOV    A,#40H
        MOVX   @DPTR,A
        MOV    A,#0H
        MOVX   @DPTR,A
        MOV    A,#0H
        MOVX   @DPTR,A
        MOV    A,#0EFH
        MOVX   @DPTR,A
        MOV    A,#27H
        MOVX   @DPTR,A
        MOV    A,#5BH
        MOVX   @DPTR,A
        MOV    A,#7FH
        MOVX   @DPTR,A
        POP    ACC              ;恢复现场
        POP    DPL
        POP    DPH
        RET
;显示字符子程序
;输入: R4,位置 R5,值
DISLED:  PUSH   DPH             ;保存现场
         PUSH   DPL
         PUSH   ACC
         MOV    A,#LEDWR0       ;置显示起始地址
         ADD    A,R4            ;加位置偏移量
         MOV    DPTR,#Z8279
         MOVX   @DPTR,A         ;设定显示位置
         MOV    DPTR,#LEDSEG    ;置显示常数表起始位置
         MOV    A,R5
         MOVC   A,@A+DPTR       ;查表
         MOV    DPTR,#D8279
         MOVX   @DPTR,A         ;显示数据
         POP    ACC             ;恢复现场
         POP    DPL
         POP    DPH
         RET
DELAY:                          ;延时子程序
        PUSH    0               ;保存现场
        PUSH    1
        MOV     0,#0H
DELAY1: MOV     1,#0H
        DJNZ    1,$
        DJNZ    0,DELAY1
        POP     1               ;恢复现场
        POP     0
        RET

LEDSEG: DB     3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'
        DB     7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'
        DB     6DH,02H,08H,00H,59H,0FH,76H     ;'U,-,_, ,I,O,P, '
        END

阅读(3193) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册