www.pudn.com > st-asm.rar > 84seg1.asm


;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