4 bit 7 segment display with two 74HC595


Results 1 to 24 of 24

Threaded View

  1. #19
    Join Date
    May 2013
    Location
    australia
    Posts
    2,645


    Did you find this post helpful? Yes | No

    Default Re: 4 bit 7 segment display with two 74HC595

    digit order reversed,scan 4mS
    and I moved the lookup out of the isr into the foreground (reduce isr overhead)





    Code:
    '****************************************************************
    '*  Name    : 4 bit 7 segment display                           *
    '*  Author  : RICHARD                                           *
    '*  Notice  :                                                   *
    '*          :                                                   *
    '*  Date    : 18. 2. 2018                                       *
    '*  Version : 1.0                                               *
    '*  Notes   :                                                   *
    '*  MCU     : PIC 12F1822 @32MHZ                                *
    '****************************************************************
    #CONFIG
      __config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_ON & _FCMEN_ON
      __config _CONFIG2, _WRT_OFF & _PLLEN_ON & _STVREN_ON & _BORV_19 & _LVP_OFF
    #ENDCONFIG
    
     goto overasm
    ASM
       
    seg_val 
        CHK?RP  _TM_TMP
        MOVWF   _TM_TMP
        SUBLW   0x21
        btfsc   STATUS, C
        retlw   0   ;" "
        MOVF    _TM_TMP,W
        SUBLW   0x2f
        btfsc   STATUS, C
        retlw   64   ;"-"
        MOVF    _TM_TMP,W
        MOVLW   0X40
        SUBWF   _TM_TMP,W
        btfsC   STATUS, C
        GOTO    TM_ALPHA
        MOVF    _TM_TMP,W
        ANDLW   0X0F
        GOTO    TM_LU
    TM_ALPHA 
        ANDLW   0xdf    ;ucase
        SUBLW   6
        btfsS   STATUS, C
        retlw   0       ;ERROR
        MOVLW   0X37
        SUBWF   _TM_TMP,W
        ANDLW   0xdf    ;ucase
    TM_LU     
        BRW                                         
        retlw 	0X3F    ;0   
        retlw 	6            	
        retlw 	0X5B   
        retlw 	0X4F 
        retlw 	0X66
        retlw 	0X6D                        
        retlw 	0X7D  
        retlw 	7   
        retlw 	0X7F          
        retlw 	0X67    ;9
        retlw 	0X77    ;A
        retlw 	0X7C    ;b
        retlw 	0X39    ;C
        retlw 	0X5E    ;d
        retlw 	0X79    ;E
        retlw 	0X71    ;F 
    endasm 
    
    
    
     overasm:
    
    DEFINE OSC 32            ; Use internal clock 
    ANSELA=0
    SSP1CON1=$22  
    SSP1STAT=$40
    OSCCON=$70
    
    INCLUDE "DT_INTS-14.bas" ; Base Interrupt System
    
    TRISA = %11111000
    @LPORT=LATA 
    LPIN CON 2     ;var LATa.2         ; Latch
    DPIN var porta.0         ; Data  SDO
    CPIN var porta.1         ; Clock SCK
    
    segment var byte
    value var word
    d_index var byte
    buff var byte[5]
    seg_buff   var byte[4]
    seg_cnt    var byte
    seg_dat    var byte 
    tmp var byte 
    TM_TMP    var byte         
    d_pointer      var byte  
    
    timer1_reload con    33543  ;4mS
                           
    ASM
    INT_LIST macro ; IntSource, Label, Type, ResetFlag?
        INT_Handler TMR1_INT, _DISP, ASM, yes
      endm
      INT_CREATE ; Creates the interrupt processor
    ENDASM
    
    @ INT_ENABLE TMR1_INT ; enable Timer 1 interrupts
    T1CON = $1
    d_index=0
    ;---[simple counter 0 - to ffff]------------------------------------------------ 
    Main:
        for value = 0 to 65535
            arraywrite buff ,[HEX4 value,0]
            gosub load_seg
            pause 100
        next value
        value = 0
    GOTO Main
    
    load_seg :
        for seg_cnt=0 to 3
            seg_dat= buff[seg_cnt]
            asm
                MOVE?BA  _seg_dat 
                L?CALL seg_val
                MOVE?AB _seg_dat
            endasm
            seg_buff[seg_cnt]= seg_dat
        next
    return
    
    
    
    
    ;---[TMR1 - interrupt handler]--------------------------------------------------
    DISP:
    
    asm
        MOVE?CT 0, T1CON, TMR1ON ; 1 stop timer
        MOVLW LOW(_timer1_reload) ; 1 Add TimerReload to the 
        ADDWF TMR1L,F ; 1 value in Timer1
        BTFSC STATUS,C ; 1/2
        INCF TMR1H,F ; 1
        MOVLW HIGH(_timer1_reload) ; 1
        ADDWF TMR1H,F ; 1
        MOVE?CT 1, T1CON, TMR1ON ; 1 start timer
        MOVE?CB  high _seg_buff, FSR0H         ;load highbyte 
        MOVE?CB  low  _seg_buff, FSR0L         ;load low byte
        MOVE?BA  _d_index  
        ADDWF  FSR0L,F
        MOVF   INDF0,W
        ;L?CALL seg_val
        MOVE?AB _segment
        MOVE?BB  _d_index ,_tmp
        BANKSEL   _tmp
        MOVLW 1
        ADDWF  _tmp,F
        MOVLW 16
        BANKSEL   _d_pointer
        movwf _d_pointer
        BcF STATUS ,C
    N_BIT 
        BANKSEL   _d_pointer
        RRF    _d_pointer,F
        BANKSEL   _tmp
        DECFSZ  _tmp,F
        GOTO N_BIT 
        MOVLW 1
        BANKSEL  _d_index
        ADDWF  _d_index,F
        MOVLW 3 
        ANDWF  _d_index,F
        BANKSEL  LPORT
        BCF LPORT ,_LPIN
        BANKSEL PIR1
        BCF     PIR1,3 
        BANKSEL  _segment
        MOVF    _segment,W   ;COMMENT USED TO INVERT DATA FOR COMMON cathode DISPLAY
        ;COMF    _segment,W  ;COMMENT USED TO INVERT DATA FOR COMMON ANODE DISPLAY
        BANKSEL SSP1BUF
        movwf   SSP1BUF
        BANKSEL PIR1
        BTFSs   PIR1,3
        GOTO    $-1
        BANKSEL  _d_pointer
        COMF    _d_pointer,W   ;COMMENT USED FOR COMMON cathode DISPLAY
        ;MOVF    _d_pointer,W  ;COMMENT USED FOR COMMON ANODE DISPLAY
        BANKSEL PIR1
        BCF     PIR1,3 
        BANKSEL SSP1BUF
        movwf   SSP1BUF
        BANKSEL PIR1
        BTFSs   PIR1,3
        GOTO    $-1
        BANKSEL  LPORT
        BSF LPORT ,_LPIN
        BANKSEL 0
        INT_RETURN
    endasm
    Last edited by richard; - 19th February 2018 at 23:07.
    Warning I'm not a teacher

Similar Threads

  1. 7 segment display
    By lerameur in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 13th January 2015, 13:24
  2. 1 Pin 7-Segment Display
    By Mike, K8LH in forum Schematics
    Replies: 0
    Last Post: - 23rd November 2009, 12:35
  3. 7-segment display with P16F84
    By spitfire in forum mel PIC BASIC Pro
    Replies: 16
    Last Post: - 3rd March 2009, 19:22
  4. Display Using Cascaded 74hc595
    By charudatt in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 7th December 2004, 06:05
  5. Multiplex two 7 segment display
    By Fernando Santos in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 20th July 2003, 13:26

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts