ST套件數碼管靜態顯示試驗(學習查表程序) ;本實驗的目的是讓大家熟悉數碼管,學習怎樣應用查表程序,本程序的功能是要用PIC來實現一位 ;數碼管顯示,程序復位后先由第一個數碼管從0循環顯示到9,再由第二個數碼管從0顯示到9,然后再 ;由第一個數碼管顯示返復循環。程序中用一個計數器由0計數到9,同時將其在LED上顯示出來。該例給出 ;計數值與顯示碼的轉換方法。 ;PIC單片機學習網-----http://www.pic16.com ;燒寫時應注意:配置位已經在程序中寫明,加載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
|