need help pic877 to max7219

Status
Not open for further replies.

pasicr

Advanced Member level 1
Joined
Aug 13, 2005
Messages
440
Helped
39
Reputation
80
Reaction score
29
Trophy points
1,308
Location
Macedonia
Activity points
4,213
Hi all,
please I need some examples code in asm or picbasic for using pic16f877 and max7219 for driven 64 individual led in matrix.
Regards
 

check your personnal inbox i've sent a message there.
 

sush said:
check your personnal inbox i've sent a message there.

Hi
i need it too dear please send it to mee too..

regards
 

how to combine 2 pic16f877 in series
 

May I have some samples please ?

thank you
 

TO SUSH

Please I need info too,
regards
 

I want a simpe program which the 7segment , which is conected to max7219 , counts from 0 to 7 .
Or something similar , is it possible ?

regards
 

hey i need it too
thanks
 

@ fontas: this is program to count from 0 to 9999 and 9999 to 0 using Proton DS

Code:
' This Program demonstrates the use of the MAX7219, seven segment decoder driver
' It also incorporates placing of Decimal point.

    Device 16F84
' ** Set Xtal Value in MHz **
    Declare Xtal = 4                    ' Set Xtal Frequency

' ** Declare Pins Used **
    Symbol Clk    = PORTB.0             ' Data is clocked on rising edge of this pin
    Symbol Dta  = PORTB.1               ' Bits are shifted out of this pin
    Symbol Load = PORTB.2               ' Transfers data to LEDs when Pulsed

' ** Declare Constants **
    Symbol Decode_Reg = 9               ' Decode register, a 1 turns on BCD decoding for each digit.
    Symbol Lum_Reg = 10                 ' Intensity register.
    Symbol Scan_Reg = 11                ' Scan-limit register.
    Symbol Switch_Reg = 12              ' On/Off Register.
    Symbol Test_Reg = 15                ' Test mode register (all digits on, 100% bright)

' Symbol Max_Digit = 5                  ' Amount of LED Displays being used.

' ** Declare Variables **
    Dim Counts   As Word                ' Variable used for the Demo Counting routine
    Dim Max_Disp As Word                ' 16-bit value to be displayed by the MAX7219
    Dim Max_Dp   As Byte                ' Digit number to place Decimal point (0-4)
    Dim Register As Byte                ' Pointer to the Internal Registers of the MAX7219
    Dim R_Val    As Byte                ' Data placed in Each Register
    Dim Digit    As Byte                ' Position of individual numbers within MAX_Disp (0-3)
    Dim Position As Byte                ' Position of each LED display (1-4)

' ** Initialise The MAX7219 **
' Each register address is sent along with its setting data.
' Because the MAX7219 expects to see a packet of 16 bits, then the LOAD pin is pulsed
' Set the scan limit to 3 (4 digits, numbered 0-3)
' Set the Brightness to 5
' BCD decoding to the lower 4 digits
' Switch the display on.
' Turn Off test mode

    Register = Scan_Reg                 ' Point to the Scan Register
    R_Val = 3                           ' Send 3, (Four LED Displays 0-3)
    GoSub Transfer                      ' Transfer this 16-bit Word to the MAX7219

    Register = Lum_Reg                  ' Point to the Luminance Register
    R_Val = 5                           ' Send 5, (Value for Brightness)
    GoSub Transfer                      ' Transfer this 16-bit Word to the MAX7219

    Register = Decode_Reg               ' Point to BCD Decode Register
    R_Val = %00011111                   ' Decode the first 5 digits
    GoSub Transfer                      ' Transfer this 16-bit Word to the MAX7219

    Register = Switch_Reg               ' Point to the Switch Register
    R_Val = 1                           ' Set to One, (switches the display ON)
    GoSub Transfer                      ' Transfer this 16-bit Word to the MAX7219

    Register = Test_Reg                 ' Point to the Test Register
    R_Val = 0                           ' Reset to Zero, (turns off Test mode)
    GoSub Transfer                      ' Transfer this 16-bit Word to the MAX7219


' ***** Main Program *****
' This loop increments and then decrements a 16-bit number
' And displays it on Four LED Displays
' The value to be displayed is held in the variable "Max_Disp"
' The Position of the decimal point is held in Max_DP (0-4)

    Max_Dp = 3                          ' Display number for Decimal Point

Again:
    For Counts = 1 To 9999              ' Increment Counter
        Max_Disp = Counts               ' Load Max_Disp with Value of Counter
        GoSub Display                   ' Display the Value of Counter
        DelayMS 150                     ' Delay, so we can see whats happening
    Next                                ' Close the Loop

    For Counts = 9999 To 1 Step -1      ' Decrement Counter
        Max_Disp = Counts               ' Load Max_Disp with Value of Counter
        GoSub Display                   ' Display the Value of Counter
        DelayMS 150                     ' Delay, so we can see whats happening
    Next                                ' Close the Loop
    GoTo Again                          ' Do it Indefinately


' ** Subroutines **
' Display the Value held in the Variable "MAX_DISP" on the four LED's
' The value held in "MAX_DP" places the decimal point on that LED (0-3)
' Sending the value 15 blanks the display, this allows Zero suppression
' By setting bit-7 of the value sent to the individual LED displays, the decimal point
' Is illuminated

Display:
    Digit = 0                                               ' Start at Digit 0 of Max_Disp Variable
    For Position = 4 To 1 Step -1                           ' Start at Farthest Right of Display
    Register = Position                                     ' Place Position into Register
    R_Val = Dig Max_Disp,Digit                              ' Extract the individual numbers from Max_Disp
    If Max_Disp < 10 And Position = 3 Then R_Val = 15       ' Zero Suppression for the second digit
    If Max_Disp < 100 And Position = 2 Then R_Val = 15      ' Zero Suppression for the Third digit
    If Max_Disp < 1000 And Position = 1 Then R_Val = 15     ' Zero Suppression for the Forth digit
    If Max_Disp < 10000 And Position = 0 Then R_Val = 15    ' Zero Suppression for the Fifth digit
    If Digit = Max_Dp Then R_Val.7 = 1                      ' Place the decimal point, held in Max_DP
    GoSub Transfer                                          ' Transfer the 16-bit Word to the MAX7219
    If Digit >= 3 Then Digit = 0                            ' We only need the first four digits
    Digit = Digit + 1                                       ' Point to next Digit within Max_Disp
    Next                                                    ' Close the Loop
    Return                                                  ' Exit from subroutine

' Send a 16-bit word to the MAX7219
Transfer:
    SHOut Dta,Clk,msbfirst,[Register,R_Val]         ' Shift Out the Register first, then the data
    High Load                                       ' The data is now acted upon
    DelayUS 2                                       ' A small delay to ensure correct clocking times
    Low Load                                        ' Disable the MAX7219
    Return                                          ' Exit from Subroutine
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…