;ST套件数码管静态显示试验(学习查表程序) ;本实验的目的是让大家熟悉数码管,学习怎样应用查表程序,本程序的功能是要用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