计算机应用 | 古代文学 | 市场营销 | 生命科学 | 交通物流 | 财务管理 | 历史学 | 毕业 | 哲学 | 政治 | 财税 | 经济 | 金融 | 审计 | 法学 | 护理学 | 国际经济与贸易
计算机软件 | 新闻传播 | 电子商务 | 土木工程 | 临床医学 | 旅游管理 | 建筑学 | 文学 | 化学 | 数学 | 物理 | 地理 | 理工 | 生命 | 文化 | 企业管理 | 电子信息工程
计算机网络 | 语言文学 | 信息安全 | 工程力学 | 工商管理 | 经济管理 | 计算机 | 机电 | 材料 | 医学 | 药学 | 会计 | 硕士 | 法律 | MBA
现当代文学 | 英美文学 | 通讯工程 | 网络工程 | 行政管理 | 公共管理 | 自动化 | 艺术 | 音乐 | 舞蹈 | 美术 | 本科 | 教育 | 英语 |

免费电子智能抢答器(单片机)(一)信息工(3)

2013-05-21 01:16
导读:9,A,B DB9CH,7AH,9EH,8EH ;C,D,+,- END DBUFEQU30H;三位显示缓冲区首址 ORG0000H AJMPMAIN ORG0030H MAIN:MOVSP,#60H ACALLKEYSCAN;调用键盘扫描子程序判断是加分或减分 CJNEA,#0EH,NEXT2
9,A,B
   DB  9CH,7AH,9EH,8EH    ;C,D,+,-
   END
DBUF EQU  30H   ;三位显示缓冲区首址
 ORG  0000H
 AJMP MAIN
 ORG 0030H
MAIN: MOV  SP,#60H
  ACALL KEYSCAN  ;调用键盘扫描子程序判断是加分或减分
  CJNE A,#0EH,NEXT2 ;不是加分键,则转移判断是减分键?
NEXT1: ACALL KEYSZ  ;是加分键,调用键盘设置子程序
 ACALL DISPLAY  ;调用串口静态显示子程序
 SJMP MAIN
NEXT2: CJNE A,#0FH,MAIN ;都不是,则转MAIN
  AJMP NEXT1  ;是减分键,调用键盘设置子程序
 ORG 0100H
KEYSZ: PUSH PSW   ;键盘设置子程序
  PUSH ACC
  SETB RS1
  MOV  R0,#DBUF ;R0指向显示缓冲区首地址
  MOV  R7,#3  ;设置键盘输入位数
L1:  CLR  RS1
  ACALL KEYSCAN  ;调用键盘扫描子程序取按下键的键号
  SETB RS1
  CJNE A,#0AH,L2 ;键入数合法性检测(是否大于9)
L2:  JNC  L1   ;大于9,重新键入
  MOV  R0,A  ;键号送显示缓冲区
  INC  R0
  DJNZ R7,L1  ;3位数值输入完否?未完继续,否则返回
  POP  ACC
  POP  PSW
  CLR  RS1
  RET
 KEYSCAN: MOV  R3, #0F7H ;扫描初值(P0.3=0)
  MOV  R1, #00H ;取码指针
L3:  MOV  A, R3  ;开始扫描 (科教作文网 zw.nseac.com整理)
  MOV  P0, A  ;将扫描值输出至P1
  MOV  A, P0  ;读入P1值,判断是否有键按下
  MOV  R4, A  ;存入R4,以判断按键是否放开
  SETB C   ;C=1
  MOV  R5, #04H ;扫描P1.4~P1.7
L4:  RLC  A   ;将按键左移一位
  JNC  KEYIN  ;判断C=0?有键按下则C=0,跳至KEYIN
  INC  R1   ;C=1,则无键按下,将取码指针值加1
  DJNZ R5, L4  ;4列扫描完毕了吗?
  MOV  A, R3  ;扫描值载入
  SETB C   ;C=1
  RRC  A   ;扫描下一行(P1.3~P1.0)
  MOV  R3, A  ;存回扫描寄存器
  JC  L3   ;C=1?是则P1.0尚未扫描到
  SJMP KEYSCAN  ;C=0,则四行已扫描完毕
KEYIN: MOV  R7, #60  ;延时消除抖动
 D2: MOV  R6, #248 ;
  DJNZ R6, $  ;
  DJNZ R7, D2  ;
 D3: MOV  A, P0  ;延时后再读入P1值
  XRL  A, R4  ;与上次读入值作比较
  JZ  D3   ;A=0,表示按键未放,等待按键释放
  MOV  A, R1  ;按键已放开,取码指针载入累加器
  MOV  DPTR,#TABLE ;键盘码表首地址送DPTR
  MOVC A, @A+DPTR ;查键
上一篇:步进电机控制系统上位机的意义和目的信息 下一篇:没有了