主程序:
MOV DPTR,#0FDFFH MOV A,DATA?
MOVX @DPTR,A ;输出高8位数据 DEC DPH?
MOV A,DATA+1?
MOVX @DPTR,A ? ;输出低4位数据 MOV DPTR,#7FFFH?
MOVX @DPTR,A ;12位数据同时送DAC寄存器
3.键盘与接口
①.独立式键盘及其接口程序
?
AJMP MAIN
ORG 0003H
? AJMP KEYJMP
ORG 0100H
ORG 0000H ?
; 上电后转主程序 ; 外部中断0入口 ; 指向中断服务程序
MAIN:SETB IT0 ? ? ? ?
; 选择边沿触发方式
SETB EX0 ; 允许外部中断0 SETB EA ; 允许CPU中断
MOV DPTR,#EF00H ; 送8155命令口地址 MOV A, #02H
; 模拟主程序 ; 中断服务程序 ; 设循环次数
? MOVX @DPTR, A ; 控制字写入 HERE: AJMP HERE ORG 0120H KEYJMP:MOV R3, #08H ?
MOV DPTR,#0EF01H ; 送A口地址
? MOV R4, #00H ; 计数器清零 ? MOVX A, @DPTR ; 读入按键状态 KEYAD1:RRC A ; 状态字右移一位
? JNC KEYAD2 ; C=0,转KEYAD2 ? INC R4 ; 计数器加1 ? DJNZ R3, KEYAD1 KEYRET:RETI
KEYAD2:MOV DPTR, #JMPTBL ? MOV A, R4 ? RL A
? JMP @A+DPTR ; 转相应功能处理 JMPTBL:AJMP SB0 ; 入口地址表 ? AJMP SB1 ? AJMP SB2 ? AJMP SB3 ? AJMP SB4 ? AJMP SB5 ? AJMP SB6 ? AJMP SB7?
②.矩阵式键盘接口电路和程序
㈠. 行扫描法
(1).判是否有键按下。使端口 C所有的行输出均为低电平,然后从端口A读入列值。如果
没有键按下,读入值应为FFH,如果有键按下,则不为FFH。 (2).若有键按下,则延时10ms,再判断是否确实有键按下。
(3).若确实有键按下,则求出按下键的键值。其实现方法是对键盘进行逐行扫描。即先令PC0为0,读入列值,若列值等于FFH,说明该行无键按下,再令PC1为0,对下一行进行扫描;若列值不等于FFH,说明该行有键按下,求出其键值。
求键值时要设置行值寄存器和列值寄存器。每扫完一行,若无键按下,则行值寄存器加上08H;若有键按下,行值寄存器保持原值,转而求相应的列值。求列值的方法是,将列值右移,每移位一次列值寄存器加1,直至移出位为低电平为止。最后将行值和列值相加即得键值。若需要十进制键值,可进行DAA修正。
(4).为保证按键每闭合一次CPU只做一次处理,程序需等闭合的键释放后再对其做处理 ORG 0200H ?
KEYPR:MOV DPTR, #0100H ; 8155初始化? MOV A,#0CH?
MOVX @DPTR, A ; 控制字写入?
MOV R3, #00H ; 列寄存器清零? MOV R4, #00H ; 行寄存器清零? ACALL KEXAM ; 检查有无键按下? JZ KEND ; 无键按下返回? ACALL D10ms? ACALL KEXAM ; 再次检查有无键按下? JZ KEND? MOV R2 #0FEH ; 输出使X?0为0? KEY1: MOV DPTR, #0103H ; 送C口地址? MOV A, R2? MOVX @DPTR, A ; 扫描某一行? MOV DPTR, #0101H ; 送A口地址? MOVX A, @DPTR ; 读列值模型? CPL A? ANL A, #0FFH?
JNZ KEY2 ; 有键按下,求列值 MOV A, R4 ; 无键按下,行+8? ADD A, #08H ? MOV R4,A? MOV A, R2 ; 求下列为低电平模型? RL A? MOV R2,A? JB ACC.4, KEY1 ; 判是否已全扫描? AJMP KEND?
KEY2: CPL A ; 恢复列模型? KEY3: INC R3? RRC A ?
JC KEY3?
KEY4: ACALL D10ms ? ACALL KEXAM ? JNZ KEY4 ; 等待键释放? MOV A, R4 ; 计算键值? ADD A, R3? MOV BUFF, A ; 键值存入BUFF? KEDN:RET?
BUFF:EQU 30H?
D10ms:MOV R5,#14H ; 延时子程序? DL: MOV R6,#0FFH? DL0: DJNZ R6,DL0? DJNZ R5,DL? RET?
KEXAM:MOV DPTR,#0103H ;检查是否有键按下子程序? MOV A, #00H? MOVX @DPTR, A? MOV DPTR,#0101H? MOVX A, @DPTR? CPL A? ANL A,#0FFH? RET?
㈡线路反转法 ③.键盘分析程序 ㈠直接分析法
㈡.状态分析法
状态分析法可分为以下四步进行:
(1) 用状态图准确表述按键操作序列的定义;
(2)由上述状态图导出的状态表。 状态表状态表是键盘分析程序的核心。
(3) 固化状态表:为了让微处理器能使用状态表,应将其转变成可供微处理器查询的形式。
(4) 设计键盘分析程序的设计
4.LED显示及接口 ①.7段LED显示器及接口
②.静态显示接口电路