金沙js5线路(中国)有限公司:台湾麦肯单片机(Micon MDT单片机)亚太地区A级代理商
静态数码管显示实验
本实验的目的是让大家熟悉数码管,学习怎样应用查表程序,本程序的功能是要用PIC来实现一位
;数码管显示,程序复位后先由第一个数码管从0循环显示到9,再由第二个数码管从0显示到9,然后再
;由第一个数码管显示返复循环。程序中用一个计数器由0计数到9,同时将其在LED上显示出来。该例给出
;计数值与显示码的转换方法。
;烧写时应注意:配置位已经在程序中写明,加载HEX文件时会自动加载,烧写时不用再手动设置配置位。
;实验时请注意套件跳线选择;
;****************************************************************
LIST P=16F84A,R=DEC ;定义器件为16F84,默认数制为十进制
;-----------------------------------------------
__CONFIG B'11111111110001';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC
;没有代码保护
;看门狗关闭
;上电廷时器开启
;振荡器模式为XT
;---------------------
PC EQU 02H ;变量单元定义
STATUS EQU 03H
PORTA EQU 05H
PORTB EQU 06H
TRISA EQU 5H
TRISB EQU 6H
;-----------------------STATUS
RP0 EQU 5
;-----------------------
COUNTER EQU 10H
COUNT0 EQU 11H
COUNT1 EQU 12H
COUNT2 EQU 13H
TABADD EQU 14H
;--------------------
ORG 0000H
MAIN
CLRF PORTA
CLRF PORTB ;初始IO口
BSF STATUS,RP0 ;设置数据寄存器体1
MOVLW 00000000B ;设置RB、RA口全部为输出
MOVWF TRISA
MOVWF TRISB
BCF STATUS,RP0 ;恢复数据寄存器体0
;----------------------
LOOPA
MOVLW 0FFH ;让数码所有划先熄灭
MOVWF PORTB
BSF PORTA,2
BCF PORTA,1 ;让第一位数码管显示
LOOP1
MOVLW TABLE ;将转换表的首地址存入TABADD
MOVWF TABADD
CLRF COUNTER ;计数器清0
CLRW
LOOP2
ADDWF TABADD,W ;计数值(W)与转换表的起始地址相加
CALL CONVERT ;存入W后调用转换表子程序
MOVWF PORTB ;取出的七段显示码送RB口显示
CALL DELAY
INCF COUNTER,1 ;计数器加1递增(依次显示0,1,2,…9,。)
MOVLW 11
XORWF COUNTER,0 ;第一位显示完后转第二位显示
BZ LOOPB
MOVFW COUNTER
GOTO LOOP2
;-------------------------
LOOPB
MOVLW 0FFH ;让数码所有划先熄灭
MOVWF PORTB
BSF PORTA,1
BCF PORTA,2 ;让第二位数码管显示
LOOP3
MOVLW TABLE
MOVWF TABADD
CLRF COUNTER
CLRW
LOOP4
ADDWF TABADD,W
CALL CONVERT
MOVWF PORTB
CALL DELAY
INCF COUNTER,1
MOVLW 11
XORWF COUNTER,0
BZ LOOPA ;第二位显示完后转第一位循环显示
MOVFW COUNTER
GOTO LOOP4
;---------------------------------
DELAY ;设置延时常数
MOVLW 3
MOVWF COUNT0
L1
MOVLW 255
MOVWF COUNT1
L2
MOVLW 255
MOVWF COUNT2
L3
DECFSZ COUNT2,1 ;递减循环
GOTO L3
DECFSZ COUNT1,1
GOTO L2
DECFSZ COUNT0,1
GOTO L1
RETLW 0
;-------------------- ----------------------------------
CONVERT
MOVWF PC ;将W寄存器内的7段显示码地址放入PC
TABLE ;PC执行新地址指令, 跳到相对的地址执行
;RETLW指令,将七段显示码存入W后返回
RETLW 081H ;0
RETLW 0E7H ;1
RETLW 092H ;2
RETLW 0A2H ;3
RETLW 0E4H ;4
RETLW 0A8H ;5
RETLW 088H ;6
RETLW 0E3H ;7
RETLW 080H ;8
RETLW 0A0H ;9
RETLW 07FH ;.
;----- -----------------------------------------------
END