在倒计器的定时时间范内,S1 ~ S3 按键功能均被屏蔽、失效,不能使能。
程序设计要点:程序设计包括PIC16F627 初始化程序,主程序,1 分钟定时中断子程序,蜂鸣器提示音子程序,查数码表子程序等组成。
本程序设计中,LED1 闪烁点亮速度设置不宜太快或太慢,LED1 闪烁点亮速度太快,会使人看了后心理产生太“忙碌”, 感受心慌,闪烁的太慢又会使人疑惑定时插座是否在走动、工作,以每2S钟的频率点亮、熄灭一次为妥。另外电路中增加了LED2 作为AC220V 输出电源指示灯,当定时插座工作时,LED2 点亮,表示JP1 插孔有AC220V电压输出;LED2 熄灭则表示电源JP1 插孔无AC220V 电压输出,以示确认插孔有否AC 电压输出。
PIC16F627 单片机初始化程序如下。
;*****【PIC16F627 初始化程序】***************STARTBCF STATUS,6BSF STATUS,5; 置STAUUS 寄存器的RP1=0,RPO=1MOVLW 0MOVWF TRISB; 设B 口为输出MOVLW 0F8HMOVWF TRISA; 设A 口的R2-R0 位为输出; 设A 口的R5-R3 位为输入MOVLW 07HMOVWF OPTION_REG; 设置选项寄存器分频器:TMR0; 分频比值设为:1 :256BCF STATUS,5MOVLW 07HMOVWF CMCON; 置数07H 到CMCON; 关闭16F627 内部比较器MOVLW 0MOVWF PORTB; 清B 口;---------- 以下为开中断设置--------MOVLW 0A0HMOVWF INTCON; 开TMR0 中断使能位; 和全局中断使能位BCF INTCON,T0IFMOVLW TMR0_B; 清TMR0 中断标志为MOVWF TMR0; 向TMR0 赋初值; 并启动TMR0 定时器;*******【初始化程序结束】*********************程序设计流程模块,主程序框图如图2 所示。
按键提示音子程序段如下,供参考。
;------ 按键提示音子程序开始-----;FMQ; 蜂鸣器提示音子程序BSF PORTB,7;RB<7> 端口输出“高电平”,使Q4 导通,蜂鸣器LS1 鸣响。
CALL DELAY_0.2S; 调用0.2S 延时子程序,让蜂鸣器响0.2S。
BCF PORTB,7;RB<7> 输出“低电平”,让Q4 截止,蜂鸣器关闭RETURN; 蜂鸣器子程序返回。
;----- 按键提示音子程序结束------;
程序设计要点:
1) 本定时器使用了PIC16F627 的一个定时器模块TMI0,并用TMI0 做了50mS 定时中断,再用寄存器“递减、判零”语句:
“DECFSZ F”判断20×60 次中断到了与否来确定显示1 分钟时间的界限,1 分钟未到,继续显示当前的数码值,1 分钟到了,从当前显示的数码值减“1”后在显示1 分钟……,这样:每过1 分钟数码管个位显示值就减“1”,每过10 分钟,十位数码管显示值就减“1”,直到两位数码管的显示值减到“00”为止。
2)定时器如何区分:预置显示程序和定时工作显示程序。在此程序设计中是用了一个寄存器的标志位加以区分的,标志位为“0”,执行预置显示程序;标志位为“1”,执行定时器工做程序。
3)按键的防抖动问题,机械按键在按下和抬起的瞬间均存在着多次接通与断开的情况,加之单片机执行程序的速度非常之快,即在瞬间(1μS 时间内)即可检测到开关的闭合与断开的状态,故而,必须要做好S1-S3 按键开关的防抖问题,防抖使用软件来解决,具体方法是在按键按下和抬起的过程中均加有延时程序,一般延时时间取10mS 左右为宜,这样即解决了按键的防抖问题,又不至于让人感觉按键反映的速度太慢。
4)调用显示查表程序,用查表法作数码管的数码值显示是程序设计中惯用的手段之一,它可使软、硬件设计变得更加的简洁、易懂。但本定时器设计中把数码管的小数点位用作了“工作指示灯”,又由于数码管采用的是“动态扫描”的方法点亮工作的,查表码会发生了变化。如将码表的值“颠倒”书写:RETLW 0X40 写在最前面;RETLW 0X10 写在最后面