新闻中心

EEPW首页>嵌入式系统>设计应用> PIC单片机计时秒表程序设计

PIC单片机计时秒表程序设计

作者: 时间:2012-12-11 来源:网络 收藏

;*********** TMR0初始化子程序***************
CLKINSUB
MOVLW 0XCF
MOVWF T0CON ;设定TMR0L工作于8位定时器方式
;内部时钟,TMR0不用分频
BCF INTCON,TMR0IF ;清除TMR0的中断标志
BCF INTCON,GIE ;总中断禁止
BSF INTCON,TMR0IE ;TMR0中断允许
BSF INTCON2,2 ;TMR0中断高优先级
BSF RCON,7 ;使能中断优先级
RETURN
;***************系统初始化子程序*****************
MAINSUB
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为输出方式
BCF INTCON,GIE ;关闭所有中断
MOVLW 0XC0
MOVWF SSPSTAT ;设置SSPSTAT寄存器
MOVLW 0X30
MOVWF SSPCON1 ;设置SPI的控制方式,允许SSP方式,
;并且时钟下降沿发送,与"74HC595当
;其SCLK从低到高平跳变时,串行输入数据
;(DI)移入寄存器"的特点相对应
RETURN ;返回
;***********键扫描子程序********************
KEYSCAN
BCF PORTB,1
BCF PORTA,3
BCF PORTE,0
BCF PORTE,1 ;送低电平至K1,K2,K3,K4
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
;*************显示缓冲区处理子程序****************
XIANHUAN
MOVLW 0XA0
MOVWF FSR0L
RLNCF S0,0
MOVWF TEMP
INCF TEMP,0
MOVWF INDF0
INCF FSR0L
RLNCF S1,0
MOVWF TEMP
INCF TEMP,0
MOVWF INDF0
INCF FSR0L
RLNCF S2,0
MOVWF TEMP
INCF TEMP,0
MOVWF INDF0
INCF FSR0L
RLNCF S3,0
MOVWF TEMP
INCF TEMP,0
MOVWF INDF0
RETURN
;**************主程序******************
MAIN NOP
CALL MAINSUB ;系统初始化
CALL CLKINSUB ;调用时钟初始化子程序
DENJIAN BCF INTCON,GIE
CLRF S0
CLRF S1
CLRF S2
CLRF S3
CLRF SREG
CLRF LEDF ;S0=S1=S2=S3=0
CALL XIANHUAN ;把S3、S2、S1、S0的值装入显示缓冲区
CALL DISPLAY ;显示
DENAN BCF INTCON,GIE ;关中断
CALL KEYSCAN ;进行键扫描
BTFSS PORTB,4
GOTO XIAODOU1 ;如起始键按下,则消抖动
GOTO DENAN ;如起始键没按下,则继续等待
XIAODOU1
CALL KEYDELAY ;延时消抖动
CALL KEYSCAN ;再次进行键扫描
BTFSC PORTB,4
GOTO DENAN ;若为干扰,则再次等待键按下
CLRF S0
CLRF S1
CLRF S2
CLRF S3
CLRF SREG ;设置新一次计时的初始条件
WAITS CALL KEYSCAN
BTFSS PORTB,4
GOTO WAITS ;为了防止按键过于灵敏,等键松开后再进行
;下面的操作
BSF INTCON,GIE ;开总中断
HERE CALL XIANHUAN ;显示缓冲区处理
CALL DISPLAY ;即时更新显示内容
CALL KEYSCAN
BTFSS PORTB,4
GOTO XIAODOU ;若停止计时键按下,则消抖
GOTO HERE ;若停止计时键没按下,则继续等待中断计时
XIAODOU
CALL DISPLAY ;利用消抖动时间调用显示程序
CALL DISPLAY
CALL DISPLAY
CALL DISPLAY
CALL DISPLAY
CALL DISPLAY
CALL DISPLAY
CALL DISPLAY
CALL DISPLAY
CALL KEYSCAN
BTFSC PORTB,4
GOTO HERE ;若为干扰,则继续等待停止键按下
BCF INTCON,GIE ;若停止键按下,则禁止中断
CALL DISPLAY ;若不为干扰,则禁止中断,更新显示内容
WAITR CALL KEYSCAN
BTFSS PORTB,4
GOTO WAITR ;为了防止按键过于灵敏,等键松开后再进行
;下面的操作
DENDAI CALL KEYSCAN
BTFSC PORTB,4
GOTO DENDAI ;循环进行键扫描,等待清0键按下
CALL KEYDELAY ;延时消抖
CALL KEYSCAN
BTFSC PORTB,4
GOTO DENDAI
WAIT19 CALL KEYSCAN
BTFSS PORTB,4
GOTO WAIT19 ;等键松开
GOTO DENJIAN ;新一次计时开始
END

51单片机相关文章:51单片机教程


c语言相关文章:c语言教程


单片机相关文章:单片机教程


单片机相关文章:单片机视频教程


单片机相关文章:单片机工作原理



上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭