程序设计思路 :
刚接通电源时,8只发光二极管都不亮,表示计数器初始值为0。
按下开关SW1时,计数器值加l,D0点亮,表示二进制数00000001B,然后松开按钮;再次按下SW1时,计数器值又加1,D1点亮,表示二进制数00000010B,然后再松开按钮;依次类推。直到按了255次按钮时,D7~D0全部点亮,假如再次按动按钮将使计数器回0。如此循环往复。
设计按钮输入程序时,有一点需要注意,就是必须处理按钮在按下或松开时存在抖动现象,以免产生误判。按钮的去抖动一般都是调用延迟程序来消除抖动的。即在程序设计中,当查询到RB0上的首次电平变化后,马上延迟τ(例如10ms),待RB0上的状态稳定后,再次查询确认,果真是按键动作(按下或者松开),方认定为有效,否则,判为干扰脉冲。程序清单如下:
STATUS EQU 03H
PORTB EQU 06H
TRISB EQU 86H
PORTC EQU 07H
TRISC EQU 87H
DATA1 EQU 20H ; DATA1为延时变量
DATA2 EQU 21H ; DATA2为延时变量
N1 EQU D'13' ;外层循环延时常数
N2 EQU 0FFH ;内层循环延时常数
RP0 EQU 5H ;体选位RP0
ORG 000H
BSF STATUS, RP0 ;切换到RAM的体1
MOVLW 00H ;将端口C设为输出
MOVWF TRISC
MOVLW 0FFH ;将端口B设置为输入
MOVWF TRISB
BCF STATUS, RP0 ;恢复到RAM的体0
PORTC EQU 07H
TRISC EQU 87H
DATA1 EQU 20H ; DATA1为延时变量
DATA2 EQU 21H ; DATA2为延时变量
N1 EQU D'13' ;外层循环延时常数
N2 EQU 0FFH ;内层循环延时常数
RP0 EQU 5H ;体选位RP0
ORG 000H
BSF STATUS, RP0 ;切换到RAM的体1
MOVLW 00H ;将端口C设为输出
MOVWF TRISC
MOVLW 0FFH ;将端口B设置为输入
MOVWF TRISB
BCF STATUS, RP0 ;恢复到RAM的体0
|