单片机键盘输入程序

点击数: 【字体: 收藏 打印文章 查看评论
 

这是读取键盘的子程序
主要内容为:如何定义位,如何得到按键状态,防止键盘干扰的方法
以及如何处理读入的键值
思路:首先在某一引脚输出一个电平,然后读入引脚的电平,如果刚好相反
那么可能有按键发生,但是不排除干扰,为了防止干扰,需要软件延时20ms
消除干扰,然后,等待用户释放,否则,可能重复的到某种结果,发生意外情况
  应该说键盘输入是单片机外部指令输入的重要途径,因此如何设计键盘以及键盘的工作原理、读键盘的方法、键盘的抗干扰设计等在单电能机系统设计中占有重要地位。这个例子在系统硬件的基础上设计了软件查询程序、软件延时程序(防止干扰),大致讲述了一种查询式键盘的工作原理与读取方式。


下面是汇编语言写的单片机键盘输入程序
**************************************************
     led1 bit p1.0       ;LED 显示位定义
     led2 bit p1.1
     led3 bit p1.2
     led4 bit p1.3
     led5 bit p1.4
     led6 bit p1.5
     led7 bit p1.6
     led8 bit p1.7
     s1 bit p0.0        ;数码管位定义
     s2 bit p0.1
     s3 bit p0.2
     s4 bit p0.3
     s5 bit p0.4
     s6 bit p0.5
     s7 bit p0.6
     s8 bit p0.7
     
     led_data equ p2      ;数码管显示数据定义
     key1 bit p3.5       ;按键引脚定义
     key2 bit p3.6       ;
     key3 bit p3.7       ;
     key equ 46h        ;按键寄存单元
     org 00h
     jmp main
     org 030h
   main:mov sp,#30h        ;首先定义
     lcall REST        ;初始化子程序
    lp:lcall pro_key       ;调用键盘查询子程序
     lcall KEYPR        ;用来显示所查询到的键值
     jmp lp          ;反复调用,不断查询
   REST:
     mov a,#00h
     mov b,#00h
     mov p0,#0
     mov p1,0ffh        ;
     mov p2,#0      
     mov key,#00h
     mov p2,#255
     clr beep
    RET
   KEYPR:
     mov a,key         ;键值在累加器KEY中
     jz PROEND         ;如果 A= 0,表示没有按键,返回
     cjne a,#1,k1       ;A= 1 ,用户按了第一个键
     mov a,#1          ;处理 A = 1的情况
     mov dptr,#tab_nu      ;查表
     movc a,@a+dptr
     mov led_data,a       ;显示 "1"
     setb s1          ;在第一位
     clr s2          ;其余两位不显示
     clr s3
     jmp PROEND        ;处理完成,子程序返回
                  ;以下分别处理KEY = 2,3 的情况
    k1:cjne a,#2,k2
     mov a,#2
     mov dptr,#tab_nu
     movc a,@a+dptr
     mov led_data,a
     clr s1
     setb s2
     clr s3
     jmp PROEND
    k2:cjne a,#3, PROEND
     mov a,#3
     mov dptr,#tab_nu
     movc a,@a+dptr
     mov led_data,a
     clr s1
     clr s2
     setb s3
  PROEND:ret
  **** 本内容跟帖回复才可浏览 *****
;************ 定时20 ms *************
delay20ms: push psw         ;保存原来的寄存器单元
      clr psw.3        ;设置新的寄存器
      clr psw.4        ;
      mov r0,#2        ;延时参数1
      mov r1,#250       ;延时参数2
      mov r2,#2        ;延时参数3
    dl1:djnz r0,dl1        ;延时循环1
      mov r0,#250        ;重新设置循环数据
    dl2:djnz r1,dl1        ;开始第二道循环
      mov r0,#240       ;
      mov r1,#248       ;
    dl3:djnz r2,

共3页 您在第1页 首页 上一页 1 2 3 下一页 尾页 跳转到页 本页共有3169个字符
作者:佚名 来源:不详 发布时间:2009年06月24日
观后心情
感动 同情 无聊 愤怒 搞笑 难过 高兴 路过
用户信息中心
联系我们  |  广告合作  |  友情链接  |  网站帮助  |  版权声明  |  企业邮箱  |  管理登录
  Copyright © 2007-2012 China Research and Development Network, All Rights Reserved
举报邮箱:co@chnrd.com    鄂ICP备09003885号