;************************************* ; Author : Mike Baird ; Program : 4x7 Segment Template ; Date : September 7th, 2009 ;************************************* List P=16F628a #include "P16F628a.INC" __CONFIG _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_ON & _LVP_OFF & _CP_OFF & _MCLRE_OFF ;*** Cblock *** CBLOCK 0x20 d1 ; d2 ; Number1 ; Number2 ; Number3 ; Number4 ; Numb1 ; Numb2 ; Numb3 ; Numb4 ; X ; ENDC ;*** Defines *** #Define Bits PORTA,0 #Define Clock PORTA,7 #Define Latch PORTA,6 #Define Ten PORTA,3 #Define Hundred PORTA,2 #Define Thousand PORTA,1 #Define TenThou PORTA,4 ;*** Macro *** HC595 MACRO Var,Var1 Local Loop ; Local Label MOVLW .8 ; Transfer 8 bits MOVWF Var1 ; Initializing counter Loop RLF Var,f ; Rotate "Var" one place to the left BTFSS STATUS,C ; Is carry 1? BCF Bits ; If not set data line to 0 BTFSC STATUS,C ; Is carry 0? BSF Bits ; If not set data line to 1 BSF Clock ; Generate one clock BCF Clock ; DECFSZ Var1,f ; Has 8 bits been sent? GOTO Loop ; If not, repeat BSF Latch ; If all 8 bits have been sent, set latch BCF Latch ; RLF Var,f ; Restore Original Variable ENDM ;*** START OF RAM *** ORG 0x000 ; Start of program vector GOTO Start ; ORG 0x004 ; Interrupt vector ;*** Configuration *** Start: MOVLW 0x07 ; Turn comparators off and enable pins for I/O MOVWF CMCON ; ^ CLRF PORTA ; PortA all low CLRF PORTB ; PortB all low BSF STATUS,RP0 ; Bank 1 MOVLW b'00100000' ; MOVWF TRISA ; PortA all output except MCLR CLRF TRISB ; PortB all output BCF STATUS,RP0 ; Bank 0 CLRF Number1 ; MOVLW 0x02 MOVWF Number2 MOVLW 0x03 ; MOVWF Number3 MOVLW 0x04 ; MOVWF Number4 ; Main: Call TurnOffNumbers MOVF Number1,W Call Table ; MOVWF PORTB MOVWF Numb1 HC595 Numb1,X BSF Ten Call Delay Call TurnOffNumbers MOVF Number2,W Call Table ; MOVWF PORTB MOVWF Numb2 HC595 Numb2,X BSF Hundred Call Delay Call TurnOffNumbers MOVF Number3,W Call Table ; MOVWF PORTB MOVWF Numb3 HC595 Numb3,X BSF Thousand Call Delay Call TurnOffNumbers MOVF Number4,W Call Table ; MOVWF PORTB MOVWF Numb4 HC595 Numb4,X BSF TenThou Call Delay GOTO Main TurnOffNumbers BCF Ten BCF Hundred BCF Thousand BCF TenThou Return Table ADDWF PCL RETLW b'01000000' ; Dash RETLW b'00000000' ; Clear RETLW b'00111111' ; 0 RETLW b'00000110' ; 1 RETLW b'01011011' ; 2 RETLW b'01001111' ; 3 RETLW b'01100110' ; 4 RETLW b'01101101' ; 5 RETLW b'01111101' ; 6 RETLW b'00000111' ; 7 RETLW b'01111111' ; 8 RETLW b'01101111' ; 9 ; *** Delay *** Delay: MOVLW d'4' ; 4* 255 = ~3mS delay MOVWF d2 D2: DECFSZ d1,F GOTO D2 DECFSZ d2,F GOTO D2 RETURN ;*** END ;********************************************************** ; Table ; (f) Left Top = bit5 ; __ (a) Top = bit0 (b) Righ Top = bit1 ; |__| (g) Middle = bit6 (e) Left Bot = bit4 ; |__| (d) Bottom = bit3 (c) Righ Bot = bit2 ; ; = b'00000000' ;0 = b'00111111' ;1 = b'00000110' ;2 = b'01011011' ;3 = b'01001111' ;4 = b'01100110' ;5 = b'01101101' ;6 = b'01111101' ;7 = b'00001111' ;8 = b'01111111' ;9 = b'01101111' ; ; That's all folks! ;*************************************