一道微机原理的题目,有答案,求解释
SCAN:MOVAL,0BHOUT83H,ALINAL,80HCMPAL,FFHJNZDSCANMOVAL,07HOUT83H,ALINAL,80HCMPAL,FFHJZ...
SCAN: MOV AL,0BH
OUT 83H, AL IN AL, 80H CMP AL, FFH JNZ DSCAN MOV AL,07H OUT 83H, AL IN AL, 80H CMP AL, FFH JZ SCAN
DSCAN: MOV BL, AL CALL DELAY-20MS
IN AL, 80H CMP AL, BL
帮忙解释下为什么 一开始写入控制口的是0BH是扫描第一行阿 按下和不按下电位有什么区别 展开
OUT 83H, AL IN AL, 80H CMP AL, FFH JNZ DSCAN MOV AL,07H OUT 83H, AL IN AL, 80H CMP AL, FFH JZ SCAN
DSCAN: MOV BL, AL CALL DELAY-20MS
IN AL, 80H CMP AL, BL
帮忙解释下为什么 一开始写入控制口的是0BH是扫描第一行阿 按下和不按下电位有什么区别 展开
1个回答
展开全部
SCAN: MOV AL,0BH ;0BH应改为 04H,是PC2复0命令字
OUT 83H, AL ;使PC2低电平,扫描键盘第一行
IN AL, 80H ;从A口读入键盘列状态
CMP AL, 0FFH ;检测各列是否全为高电平,若全为高电平表示该行未有按键
JNZ DSCAN ;若AL≠FFH,表示有第一行某列低电平,有键按下,转DSCAN
MOV AL,07H ;0BH应改为06H,是PC3复0命令字
OUT 83H, AL ;若第一行无按键,使PC3低电平,扫描键盘第二行
IN AL, 80H ;从A口读入键盘列状态
CMP AL, 0FFH ;检测各列是否全为高电平
JZ SCAN ;若AL=FFH,表示有第二下行无键按下,转SCAN重新扫描
DSCAN: MOV BL, AL ;若有按键,将列状态送BL保存
CALL DELAY-20MS ;延时20毫秒,等待该键释放/或用于消键抖动
IN AL, 80H ;再次读入列状态
CMP AL, BL ;与前次读入的列状态比较,若不同,表示该键已释放
OUT 83H, AL ;使PC2低电平,扫描键盘第一行
IN AL, 80H ;从A口读入键盘列状态
CMP AL, 0FFH ;检测各列是否全为高电平,若全为高电平表示该行未有按键
JNZ DSCAN ;若AL≠FFH,表示有第一行某列低电平,有键按下,转DSCAN
MOV AL,07H ;0BH应改为06H,是PC3复0命令字
OUT 83H, AL ;若第一行无按键,使PC3低电平,扫描键盘第二行
IN AL, 80H ;从A口读入键盘列状态
CMP AL, 0FFH ;检测各列是否全为高电平
JZ SCAN ;若AL=FFH,表示有第二下行无键按下,转SCAN重新扫描
DSCAN: MOV BL, AL ;若有按键,将列状态送BL保存
CALL DELAY-20MS ;延时20毫秒,等待该键释放/或用于消键抖动
IN AL, 80H ;再次读入列状态
CMP AL, BL ;与前次读入的列状态比较,若不同,表示该键已释放
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询