机电之家资源网
单片机首页|单片机基础|单片机应用|单片机开发|单片机文案|软件资料下载|音响制作|电路图下载 |嵌入式开发
培训信息
赞助商
pic单片机键盘程序
pic单片机键盘程序
 更新时间:2008-9-30 16:53:32  点击数:6
【字体: 字体颜色

;该pic单片机键盘程序通过PORTB的"电平变化中断"进行键盘的输入,使按下K1键时第一个数码管显示1,按下K2
;键时第一个数码管上显示2,按下K3键时第一个数码管上显示3,按下K4键时第一个数码管上显示4
;对键盘的扫描采用中断方式

LIST P=18F458
INCLUDE "P18F458.INC"

;所用的寄存器
JIANR EQU 0X20
DEYH EQU JIANR+1
DEYL EQU JIANR+2
ORG 0X00
GOTO MAIN
ORG 0X08
GOTO INTSERVE
ORG 0X30
;************以下为码值转换表**************
CONVERT ADDWF PCL,1
RETLW 0XC0 ;0,显示段码与具体的硬件连接有关
RETLW 0XF9 ;1
RETLW 0XA4 ;2
RETLW 0XB0 ;3
RETLW 0X99 ;4
RETLW 0X92 ;5
RETLW 0X82 ;6
RETLW 0XD8 ;7
RETLW 0X80 ;8
RETLW 0X90 ;9
RETLW 0X88 ;A
RETLW 0X83 ;B
RETLW 0XC6 ;C
RETLW 0XA1 ;D
RETLW 0X86 ;E
RETLW 0X8E ;F
RETLW 0X7F ;"."
RETLW 0XBF ;"-"
RETLW 0X89 ;H
RETLW 0XFF ;DARK
RETURN
;***************初始化子程序***************
INITIAL
CLRF INTCON ;禁止总中断和外围中断
BSF INTCON,RBIE ;B口变位中断允许
BCF INTCON2,7 ;使弱上拉有效
BSF INTCON2,0 ;B口变位中断高优先级
BSF RCON,7 ;使能中断优先级
BCF TRISA,5 ;置RA5为输出方式,以输出锁存信号
BCF TRISB,1
BCF TRISA,3
BCF TRISE,0
BCF TRISE,1
BSF TRISB,4 ;设置与键盘有关的各口的输入输出方式
BCF TRISC,5
BCF TRISC,3 ;设置SCK与SDO为输出方式
MOVLW 0XC0
MOVWF SSPSTAT ;设置SSPSTAT寄存器
MOVLW 0X30
MOVWF SSPCON1 ;设置SPI的控制方式,允许SSP方式,并在时钟下降
;沿发送数据,与“74HC595当其SCLK从低到高电平
;跳变时,串行输入数据(DI)移入寄存器"的特点相对应。
MOVLW 0X01
MOVWF JIANR ;显示值寄存器赋初值
BCF PORTB,1
BCF PORTA,3
BCF PORTE,0
BCF PORTE,1 ;K1,K2,K3,K4四条列线置0,为电平变化中断的
;产生创造初始条件
MOVF PORTB,W ;读PORTB端口,建立变位中断的初始条件
; (由高到低时中断)
RETURN ;返回
;*************中断服务子程序*****************
INTSERVE NOP
BCF INTCON,RBIF ;中断标志清0
CALL KEYDELAY ;调用8ms的软件延时子程序,以消除抖动
MOVF PORTB,W ;读PORTB的值,并同时改变中断发生的条件,可屏蔽
;一次按键松开时产生的无效的中断,又可以防止按键
;时间过长发生连续中断
BTFSC PORTB,4
RETFIE ;判断为干扰,则返回,并可以屏蔽一次无用的中断
CALL KEYSERVE ;调用键服务子程序,确定键值
BCF PORTB,1
BCF PORTA,3
BCF PORTE,0
BCF PORTE,1 ;送低电平至K1,K2,K3,K4,以防止键扫描时改变
;K1,K2,K3,K4的电平,从而改变中断条件
BCF INTCON,RBIF ;键扫描时可能会产生“电平变化”而使RBIF
;置1,再清除一次RBIF以求避免额外中断
MOVF JIANR,W ;把需要显示的值送给W寄存器
CALL CONVERT ;查要显示的段码
CALL DISPLAY ;调用显示子程序
RETFIE ;中断返回
;***************显示子程序******************
DISPLAY
CLRF PORTA
MOVWF SSPBUF
LOOP NOP
BTFSS PIR1,SSPIF
GOTO LOOP
NOP
BCF PIR1,SSPIF
BSF PORTA,5 ;详细程序语句请参考3. 1. 3节
RETURN
;*********键盘去抖子程序(8ms的延时)******************
KEYDELAY
MOVLW 0X0A
MOVWF DEYH
AGAIN2 MOVLW 0XFF
MOVWF DEYL
AGAIN1 DECFSZ DEYL,1
GOTO AGAIN1
DECFSZ DEYH,1
GOTO AGAIN2 ;具体程序语句参考3. 2节
RETURN
;***************键服务子程序******************
KEYSERVE
JIANZHI ;确定键值的子程序
BCF PORTB,1
BCF PORTA,3
MOVLW 0X03
MOVWF PORTE ;K1,K2置低电平,K3,K4置高电平
NOP
NOP ;使引脚电平稳定
BTFSS PORTB,4
GOTO K1K2 ;RB4为0,表示按键为K1,K2中的一个
GOTO K3K4 ;RB4为1,表示按键为K3,K4中的一个

K1K2 BCF PORTB,1
BSF PORTA,3 ;K1置低电平,K2置高电平
NOP
NOP ;使引脚电平稳定
BTFSS PORTB,4
GOTO K1 ;RB4为0,表示按键为K1
GOTO K2 ;RB4为1,表示按键为K2

K3K4 BCF PORTE,0
BSF PORTE,1 ;K3置低电平,K4置高电平
NOP
NOP ;使引脚电平稳定
BTFSS PORTB,4
GOTO K3 ;RB4为0,表示按键为K3
GOTO K4 ;RB4为1,表示按键为K4,以上对键盘进行扫描,
;来确定是哪一个键按下
K1 MOVLW 0X03
MOVWF JIANR
GOTO RET
K2 MOVLW 0X05
MOVWF JIANR
BCF PORTA,3
GOTO RET
K3 MOVLW 0X07
MOVWF JIANR
GOTO RET
K4 MOVLW 0X09
MOVWF JIANR ;以上根据按下的键把相应的值送给JIANR
BCF PORTE,1
RET NOP
RETURN
;****************************************
MAIN NOP
CALL INITIAL ;调用初始化子程序
BSF INTCON,GIE ;总中断允许
HERE GOTO HERE ;等待中断发生
END

  • 上一篇: PIC16单片机与PC机串行通信
  • 下一篇: 没有了
  • 发表评论   告诉好友   打印此文  收藏此页  关闭窗口  返回顶部
    热点文章
     
    推荐文章
     
    相关文章
    网友评论:(只显示最新5条。)
    关于我们 | 联系我们 | 广告合作 | 付款方式 | 使用帮助 | 机电之家 | 会员助手 | 免费链接

    点击这里给我发消息66821730(技术支持)点击这里给我发消息66821730(广告投放) 点击这里给我发消息41031197(编辑) 点击这里给我发消息58733127(审核)
    本站提供的机电设备,机电供求等信息由机电企业自行提供,该企业负责信息内容的真实性、准确性和合法性。
    机电之家对此不承担任何保证责任,有侵犯您利益的地方请联系机电之家,机电之家将及时作出处理。
    Copyright 2007 机电之家 Inc All Rights Reserved.机电之家-由机电一体化网更名-声明
    电话:0571-87774297 传真:0571-87774298
    杭州滨兴科技有限公司提供技术支持

    主办:杭州市高新区(滨江)机电一体化学会
    中国行业电子商务100强网站

    网站经营许可证:浙B2-20080178-1