Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

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

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top