;
文章:行业新闻EDA文摘电源技术无线通信测量仪表嵌入式类电子技术制造技术半导体网络/协议展会实验家电维修  
  下载:EDA教程电源技术电子书籍电子元件无线通信通信网络电路图纸嵌入式类单片机传感/控制电子教材模拟数字
.... 音视频类
消费电子机械电子行业软件C/C++FPGA/ASIC规则标准家电维修DSPIC资料ARM软件电路图电子技术论坛
 
位置:电子发烧友 > 行业新闻 > 嵌入式类 > 嵌入式操作系统 >键盘扫描汇编程序 退出登录 用户管理
栏目导航


· 单片机类 · 接口/总线/驱动
· ARM · DSP
· FPGA/ASIC技术 · 设计应用
· 嵌入式操作系统 · 电视卡
热门文章
· [组图] 电子元器件基础知识...
· [图文] USB接口定义
· [图文] 三极管开关电路图
· [组图] RS232 RS485接口原理...
· [组图] [组图]电动车充电器...
· [组图] 电子捕鱼器电路图
· [组图] 高品质音调电路的制...
· [组图] JRC4558电路
· [图文] M51134P低音炮电路图...
· [图文] TL494脉宽调制控制电...
相关文章

· [图文] 用Atmega8实现8路键...
· 4*4键盘程序
· 微机实验:显示和键...
· 4X4键盘程序
· [图文] 四路控制键盘电路图...
· LED和键盘扫描驱动程...
· [组图] 矩阵键盘控制接口设...
· [图文] 51单片机键盘接口电...
· 大口键盘接口引脚定...
· 键盘针脚定义图

键盘扫描汇编程序
作者:本站  来源:本站原创  发布时间:2008-1-11 19:23:34 减小字体 增大字体

PIC键盘扫描汇编程序

;;...............................

键盘扫描子程序---16键,D口低四位输出,高四位输入
;...............................
JIANPAN MOVLW 00H
   MOVWF PORTD
   MOVLW 0F0H
   ANDWF PORTD,W
   SUBLW 0F0H
   BTFSC STATUS,Z;判断D口高四位是否全为“1”
   RETURN           ;是,无键输入,返回
   CALL DELAY10MS;否,有键输入,延时20ms
   CALL DELAY10MS
   CALL DELAY10MS
   MOVLW 00H       ;再判断一次
   MOVWF PORTD
   MOVLW 0F0H
   ANDWF PORTD,W
   SUBLW 0F0H
   BTFSC STATUS,Z;判断D口高四位是否全为“1”
   RETURN           ;是虚假输入,返回
   MOVLW 0FEH    ;确定有键输入,逐行判断,首先RD0=0
   MOVWF PORTD
   BTFSS PORTD,4   ;判键“0”
   GOTO JIAN0
   BTFSS PORTD,5   ;判键“1”
   GOTO JIAN1
   BTFSS PORTD,6   ;判键“2”
   GOTO JIAN2
   BTFSS PORTD,7   ;判键“3”
   GOTO JIAN3
   MOVLW 0FDH    ;确定有键输入,逐行判断,首先RD1=0
   MOVWF PORTD
   BTFSS PORTD,4   ;判键“4”
   GOTO JIAN4
   BTFSS PORTD,5   ;判键“5”
   GOTO JIAN5
   BTFSS PORTD,6   ;判键“6”
   GOTO JIAN6
   BTFSS PORTD,7   ;判键“7”
   GOTO JIAN7
   MOVLW 0FBH    ;确定有键输入,逐行判断,首先RD0=2
   MOVWF PORTD
   BTFSS PORTD,4   ;判键“8”
   GOTO JIAN8
   BTFSS PORTD,5   ;判键“9”
   GOTO JIAN9
   BTFSS PORTD,6   ;判键“A”
   GOTO JIANA
   BTFSS PORTD,7   ;判键“B”
   GOTO JIANB
   MOVLW 0F7H    ;确定有键输入,逐行判断,首先RD0=3
   MOVWF PORTD
   BTFSS PORTD,4   ;判键“C”
   GOTO JIANC
   BTFSS PORTD,5   ;判键“D”
   GOTO JIAND
   BTFSS PORTD,6   ;判键“E”
   GOTO JIANE
   BTFSS PORTD,7   ;判键“F”
   GOTO JIANF
   RETURN
;.................
;10 ms延时子程序
;.................
DELAY10MS MOVLW 0FH
    MOVFW 20H
LP2    MOVLW 0FFH
    MOVWF 21H
LP1    DECFSZ 21H,F
    GOTO LP1
    DECFSZ 22H,F
    GOTO LP2
    RETURN
;........................
;键‘0’子程序,可自定义
;........................
JIAN0 CALL SFANG;调用键盘释放子程序
   .
   .
   .
   RETURN
;...................
;键盘释放等待子程序
;...................
SFANG MOVLW 00H
   MOVWF PORTD
   MOVLW 0F0H
   ANDWF PORTD,W
   SUBLW 0F0H
   BTFSS STATUS,Z
   GOTO SFANG;键未释放
   CALL DELAY10MS; 已释放,延时
   CALL DELAY10MS
   CALL DELAY10MS
   MOVLW 0F0H;再判断一次
   ANDWF PORTD,W
   SUBLW 0F0H
   BTFSS STATUS,Z
   GOTO SFANG;刚才为虚假释放,等待进一步判断
   RETURN

以上为所有程序代码

另外一个汇编语言源代码:

我的键盘扫描程序:


 

key equ p2
disp equ p0



;7------+--+--+--+
;6------+--+--+--+
;5------+--+--+--+
;4------+--+--+--+
;3______|  |  |  |
;2_________|  |  |
;1____________|  |
;0_______________|


      
       org 0000h
       ajmp start
       org 0100h
start: mov disp,#0
       mov dptr,#tab
loopscan:acall keyin
       acall keyoff
       mov a,r0
       movc a,@a+dptr
       mov disp,a
       ajmp loopscan

keyin:  mov key,#0fh
        mov a,key
        cjne a,#0fh,select
        sjmp keyin
select: mov a,key  
        cjne a,#0eh,next1
        ajmp row1
next1:  cjne a,#0dh,next2
        ajmp row2
next2:  cjne a,#0bh,next3
        ajmp row3
next3:  ajmp row4


row1:   mov key,#0feh
        mov a,key
        cjne a,#0feh,row1scan
        ajmp row2
row1scan:cjne a,#0eeh,row11
         mov r0,#12
         acall delay20ms
         ajmp scanend
row11:   cjne a,#0deh,row12
         mov r0,#13
         acall delay20ms
         ajmp scanend       
row12:   cjne a,#0beh,row13
         mov r0,#14
         acall delay20ms
         ajmp scanend
row13:   mov r0,#15
         acall delay20ms
         ajmp scanend
        


row2:   mov key,#0fdh
        mov a,key
        cjne a,#0fdh,row2scan
        ajmp row3
row2scan:cjne a,#0edh,row21
         acall delay20ms
         mov r0,#8
         ajmp scanend
row21:   cjne a,#0ddh,row22
         mov r0,#9
         acall delay20ms
         ajmp scanend       
row22:   cjne a,#0bdh,row23
         mov r0,#10
         acall delay20ms
         ajmp scanend
row23:   mov r0,#11
         acall delay20ms
         ajmp scanend


row3:   mov key,#0fbh
        mov a,key
        cjne a,#0fbh,row3scan
        ajmp row4
row3scan:cjne a,#0ebh,row31
         mov r0,#4
         acall delay20ms
         ajmp scanend
row31:   cjne a,#0dbh,row32
         mov r0,#5
         acall delay20ms
         ajmp scanend       
row32:   cjne a,#0bbh,row33
         mov r0,#6
         acall delay20ms
         ajmp scanend
row33:   mov r0,#7
         acall delay20ms
         ajmp scanend


row4:    mov key,#0f7h
         mov a,key
         cjne a,#0e7h,row41
         mov r0,#0
         acall delay20ms
         ajmp scanend
row41:   cjne a,#0d7h,row42
         mov r0,#1
         acall delay20ms
         ajmp scanend       
row42:   cjne a,#0b7h,row43
         mov r0,#2
         acall delay20ms
         ajmp scanend
row43:   mov r0,#3
         acall delay20ms
         ajmp scanend


scanend:ret



;判断是否松开
keyoff:  mov key,#0fh
         mov a,key
         cjne a,#0fh,keyret
         sjmp keyoff
keyret:  acall delay20ms
         ret
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;12Mhz Crystal!!!!!!!!!!!!!!!!!!!!!!!12周期单片机
delay20ms:mov r7,#250
delay20msd0:mov r6,#60
delay20msd1:djnz r6,$
            djnz r7,delay20msd0
            ret
           
tab:db 11100111b,10000100b,11010011b,11010110b,10110100b,

01110110b,01110111b,11000100b,11110111b,11110110b


db 11110101b,00110111b,01100011b,10010111b,01110011b,

01110001b,01100111b,10110101b,00100001b,10000111b
db 00100011b,00010101b,00010111b,11110001b,11110100b,10110110b


         end

[] [返回上一页] [打 印] [收 藏]
 
下一篇文章:c语言键盘扫描程序
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
 
关于本站- 意见反馈 - 网站导航 - 帮助 - 隐私政策 - 联系我们 - 使用条款 - 安全承诺 - 友情连接
站长QQ:39550527 Powered by: 飓风网络(电路图
Copyright 2006-2008 Elecfans.Com.电子发烧友: 粤ICP备07065979号All Rights Reserved