欢迎光临东莞市飞江电子科技有限公司官网!
全国咨询热线

13926563901

18925580829

飞江淘宝店铺

首页>技术资料>PIC单片机

pic单片机走马灯动态显示实验报告

发布时间:2018-03-26   浏览量:

1.  实验目的

学习如何使用查找表

2.  任务要求

实现数字译码和动态显示

实现数码管显示的滚动效果

用数码管呈现实验三中的外中断

实现数码管数字显示

制作开机画面

3.  实验器材

单片机PIC16F886一片、LED灯一只、电阻任选、下载器(及相关的线)一个

4.  实验方案

 

图 1 硬件设计图

图 2 数字译码动态显示

流程图

图 3走马灯流程图

5.  实验现象分析

先看到SEEd四个字母然后是0-9循环滚动,每次显示4个数字或字符。电平变化中断触发后重新从0-9循环显示。

程序中用查询表的办法,循环选择数码管,循环选择要显示的数字和字符,利用视觉暂留以展现四个字符同时存在的错觉。利用TMR0定时选择改变显示的四个字符,由此做成字符滚动的效果。而电平变化中断的作用则是重新选择字符,使数码管重新从0123开始显示。开机显示其实只是在最开始时选择了显示的字符,由于这部分字符不在TMR0的循环里,所以只出现一次。

整个实验过程中有几次硬件出现问题导致数码管只显示一个0,应该是接触不良,不知道触碰到哪里就又好了,这样的事情发生了好几次。其他的单步调试解决了,基本上没什么问题。

备注:开机的SEEd显示是许双杰的观点,我们不知道开机显示什么就也做了这个SEEd。

 

附:

#INCLUDE p16f886.inc  
__config _CONFIG1, _INTOSCIO & _WDT_OFF

CONTEXT_SAVING UDATA_SHR
W_TMP RES 1
S_TMP RES 1
OFFSET RES 1
COFFSET RES 1
NUM RES 1
CNUM RES 1
PA RES 1
CNT RES 1
LP0 RES 1
LP1 RES 1
ISBLACK RES 1

RESET CODE 0x0
PAGESEL INIT
GOTO INIT

ISR CODE 0x04;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVWF W_TMP
SWAPF STATUS,W
MOVWF S_TMP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PB_INT
BTFSC INTCON,RBIF
CALL PORTB_INT
TM0_INT
BTFSC INTCON,T0IF
CALL TMR0_INT;;;;;;;;;;;;;;;;;;;;;
;COMF ISBLACK
;BTFSS ISBLACK,0
;CALL DECRESE_COFFSET
;NOP
;BTFSC ISBLACK,0
CALL BLACK
BANKSEL INTCON
BCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中断标志位
BANKSEL TMR0
MOVLW B'01111111'
MOVWF TMR0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
SWAPF S_TMP,W
MOVWF STATUS
SWAPF W_TMP,F
SWAPF W_TMP,W
RETFIE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

CODE
INIT
BANKSEL TMR0
MOVLW B'01111111'
MOVWF TMR0

BANKSEL OPTION_REG
MOVLW B'00000111'
MOVWF OPTION_REG ;;;;;;;;;;;;;;;;;;;;;TMR0设置为256分频

BANKSEL INTCON
BSF INTCON,GIE
BSF INTCON,T0IE ;;;;;;;;;;;;;;;;;;;;;总中断使能,TMR0中断使能
BSF INTCON,RBIE;;;;;;;;;;;;;;;;;;;;;;PORTB电平变化中断使能

BANKSEL TRISC
CLRF TRISC
BANKSEL PORTC
MOVLW B'11111111'
MOVWF PORTC
BANKSEL TRISA
CLRF TRISA
BANKSEL PORTA
CLRF PORTA
BANKSEL ANSEL
CLRF ANSEL
BANKSEL TRISB
MOVLW B'00100000'
MOVWF TRISB
BANKSEL IOCB
MOVLW B'00100000'
MOVWF IOCB
BANKSEL PORTB
CLRF PORTB
BANKSEL WPUB
MOVLW B'00100000'
MOVWF WPUB

BANKSEL OSCCON
MOVLW B'00010011'
MOVWF OSCCON ;;;;;;;;;;;;;;;;;;;;;;振荡器设置为125KHz,内部振荡器

BANKSEL COFFSET
MOVLW D'22'
MOVWF COFFSET;;;;;;;;;;;;;;;;;;;;10个数字

BANKSEL CNUM
MOVLW D'1'
MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4个数码管

MOVF COFFSET,W
MOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暂时存储COFFSET

MOVLW D'4'
MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;计数四次

CLRF ISBLACK

PAGESEL MAIN
GOTO MAIN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;这里是函数区;;;;;;;;;;;;;;;;;
SELECT:
BANKSEL PORTA
CLRF PORTA
BANKSEL PORTC
MOVLW B'11111111'
MOVWF PORTC
MOVLW LOW STABLE ;获得TABLE的低8位
ADDWF NUM,F;TABLE值加上偏移量
MOVLW HIGH STABLE;获得TABLE的高5位
BTFSC STATUS,C;检测是否翻页
ADDLW 1;翻页则在TABLE的高5位加一
MOVWF PCLATH;将TABLE的高5位写入PCLATH
MOVF NUM,W;将需要调用的信号的地址写入W
CALL STABLE;
MOVWF PORTC
RETURN

STABLE:
MOVWF PCL;转到偏移的地址
RETLW B'11111110';1
RETLW B'11111101';2
RETLW B'11111011';3
RETLW B'11110111';4

WRITE:
MOVLW LOW TABLE ;获得TABLE的低8位
ADDWF OFFSET,F;TABLE值加上偏移量
MOVLW HIGH TABLE;获得TABLE的高5位
BTFSC STATUS,C;检测是否翻页
ADDLW 1;翻页则在TABLE的高5位加一
MOVWF PCLATH;将TABLE的高5位写入PCLATH
MOVF OFFSET,W;将需要调用的信号的地址写入W
CALL TABLE;
MOVWF PORTA
RETURN

TABLE:
MOVWF PCL;转到偏移的地址
RETLW B'01101111';9
RETLW B'01111111';8
RETLW B'00000111';7
RETLW B'01111101';6
RETLW B'01101101';5
RETLW B'01100110';4
RETLW B'01001111';3
RETLW B'01011011';2
RETLW B'00000110';1
RETLW B'00111111';0
RETLW B'00000000';NULL——11
RETLW B'00000000';NULL——12
RETLW B'00000000';NULL——13
RETLW B'00000000';NULL——14
RETLW B'01011110';d——15
RETLW B'01111001';E——16
RETLW B'01111001';E————17
RETLW B'01101101';S——18
RETLW B'00000000';NULL——19
RETLW B'00000000';NULL——20
RETLW B'00000000';NULL——21
RETLW B'00000000';NULL——22

SETORIGIN:
MOVLW D'1'
MOVWF CNUM
MOVLW D'4'
MOVWF CNT
MOVF COFFSET,W
MOVWF PA
RETURN

SETPA:
MOVLW D'10'
MOVWF PA
RETURN

SETCOFFSET:
MOVLW D'10'
MOVWF COFFSET
RETURN

DELAY: 
MOVLW 01FH
MOVWF LP0
L0 MOVLW 01FH
MOVWF LP1
L1 DECFSZ LP1,F
GOTO L1
DECFSZ LP0,F
GOTO L0
RETURN

DECRESE_COFFSET:
DECF COFFSET
BTFSC STATUS,Z
CALL SETCOFFSET
RETURN

BLACK:
BANKSEL PORTA
CLRF PORTA
CALL DELAY
RETURN

TMR0_INT:
DECF COFFSET
BTFSC STATUS,Z
CALL SETCOFFSET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;COFFSET减一
RETURN

PORTB_INT:
BANKSEL PORTB
BCF PORTB,4
BANKSEL INTCON
BCF INTCON,RBIF;;;;;;;;;;;;;;;;;;;;;;;;;;PORTB中断标志清除
MOVLW D'10'
MOVWF COFFSET

RETURN

;;;;;;;;;;函数区到此为止;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN
LOOP
MOVF CNUM,W
MOVWF NUM;数码管
MOVF PA,W
MOVWF OFFSET;图案

CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;数码管
CALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;图案

DECF PA
BTFSC STATUS,Z;;;;;;;;;;;;;;;;;;;;;;
CALL SETPA;;;;;;;;;;;;;;;;;;;;;;;;;;

INCF CNUM

DECF CNT
BTFSC STATUS,Z
CALL SETORIGIN

GOTO LOOP
END