接上篇:pic单片机采用定时器中断的闪灯实验报告:http://www.51hei.com/mcu/3996.html
1.
学习如何使用查找表
2. 任务要求
实现数字译码和动态显示
实现数码管显示的滚动效果
用数码管呈现实验三中的外中断
实现数码管数字显示
制作开机画面
3. 实验器材
单片机PIC16F886一片、LED灯一只、电阻任选、下载器(及相关的线)一个
4. 实验方案
图
图
流程图
图
5. 实验现象分析
先看到SEEd四个字母然后是0-9循环滚动,每次显示4个数字或字符。电平变化中断触发后重新从0-9循环显示。
程序中用查询表的办法,循环选择数码管,循环选择要显示的数字和字符,利用视觉暂留以展现四个字符同时存在的错觉。利用TMR0定时选择改变显示的四个字符,由此做成字符滚动的效果。而电平变化中断的作用则是重新选择字符,使数码管重新从0123开始显示。开机显示其实只是在最开始时选择了显示的字符,由于这部分字符不在TMR0的循环里,所以只出现一次。
整个实验过程中有几次硬件出现问题导致数码管只显示一个0,应该是接触不良,不知道触碰到哪里就又好了,这样的事情发生了好几次。其他的单步调试解决了,基本上没什么问题。
备注:开机的SEEd显示是许双杰的观点,我们不知道开机显示什么就也做了这个SEEd。
附:
#INCLUDE
__config
CONTEXT_SAVING
W_TMP
S_TMP
OFFSET
COFFSET
NUM
CNUM
PA
CNT
LP0
LP1
ISBLACK
RESET
PAGESEL
GOTO
ISR
MOVWF
SWAPF
MOVWF
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PB_INT
BTFSC
CALL
TM0_INT
BTFSC
CALL
;COMF
;BTFSS
;CALL
;NOP
;BTFSC
CALL
BANKSEL
BCF
BANKSEL
MOVLW
MOVWF
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SWAPF
MOVWF
SWAPF
SWAPF
RETFIE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CODE
INIT
BANKSEL
MOVLW
MOVWF
BANKSEL
MOVLW
MOVWF
BANKSEL
BSF
BSF
BSF
BANKSEL
CLRF
BANKSEL
MOVLW
MOVWF
BANKSEL
CLRF
BANKSEL
CLRF
BANKSEL
CLRF
BANKSEL
MOVLW
MOVWF
BANKSEL
MOVLW
MOVWF
BANKSEL
CLRF
BANKSEL
MOVLW
MOVWF
BANKSEL
MOVLW
MOVWF
BANKSEL
MOVLW
MOVWF
BANKSEL
MOVLW
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CLRF
PAGESEL
GOTO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;这里是函数区;;;;;;;;;;;;;;;;;
SELECT:
BANKSEL
CLRF
BANKSEL
MOVLW
MOVWF
MOVLW
ADDWF
MOVLW
BTFSC
ADDLW
MOVWF
MOVF
CALL
MOVWF
RETURN
STABLE:
MOVWF
RETLW
RETLW
RETLW
RETLW
WRITE:
MOVLW
ADDWF
MOVLW
BTFSC
ADDLW
MOVWF
MOVF
CALL
MOVWF
RETURN
TABLE:
MOVWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
SETORIGIN:
MOVLW
MOVWF
MOVLW
MOVWF
MOVF
MOVWF
RETURN
SETPA:
MOVLW
MOVWF
RETURN
SETCOFFSET:
MOVLW
MOVWF
RETURN
DELAY:
MOVLW
MOVWF
L0
MOVWF
L1
GOTO
DECFSZ
GOTO
RETURN
DECRESE_COFFSET:
DECF
BTFSC
CALL
RETURN
BLACK:
BANKSEL
CLRF
CALL
RETURN
TMR0_INT:
DECF
BTFSC
CALL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;COFFSET减一
RETURN
PORTB_INT:
BANKSEL
BCF
BANKSEL
BCF
MOVLW
MOVWF
RETURN
;;;;;;;;;;函数区到此为止;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN
LOOP
MOVF
MOVWF
MOVF
MOVWF
CALL
CALL
DECF
BTFSC
CALL
INCF
DECF
BTFSC
CALL
GOTO
END