​ ​ ​ ​ Easy 4 digit LED display
Results 1 to 1 of 1

Thread: Easy 4 digit LED display

  1. #1
    Member
    Join Date
    Jul 2010
    Location
    Colorado USA
    Posts
    59

    Default Easy 4 digit LED display

    The TM1637 LED display is widely available, cheap, and an easy way to add a four
    digit LED display to a PICAXE project. Borrowing code from the link below I wrote
    a version which runs faster and the code size is reduced. It has been tested from
    4 to 32mhz on M2 parts and also at 64mhz on X2 parts. The code could be made
    to run even faster by converting the subroutines to macros.

    Code:
    ;TM1637_test.bas
    
    #picaxe 08m2
    
    ;segment data for TM1637
           ;(0   1   2   3   4   5   6   7   8   9   A   b   C   d   E   F  dash blank)
    DATA 0,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,$77,$7c,$39,$5e,$79,$71, $40, $00)
    
    
    ;for TM1637
    symbol dio = C.1                        ;TM1637 data pin to 08m2 leg 6
    symbol clk = C.2                        ;TM1637 clock pin to 08m2 leg 5
    symbol  D3 = b2
    symbol  D2 = b3                         ;for all 4 digits
    symbol  D1 = b4
    symbol  D0 = b5
    
    
    gosub brightness                        ;set display brightness
    
    for b1 = 0 to 17                        ;sequence thru all character
      D3 = b1:D2 = b1                       ;bytes stored in the data 
      D1 = b1:D0 = b1
      gosub DISPLAY
      pause 1000
    next b1
    end
    
    ;===========================================================================  
    
    ;Group of subroutines to read the values from data and output to the display
    
    DISPLAY:
      ;Enable sequential movement (from one digit to next)
      call i2CStart
      b0 = $40
      call i2CWrByte
      call i2CStop
      
      ;Move to first digit
      call i2CStart 
      b0 = $C0
      call i2CWrByte
    
      ;First value
      read D3,b0
      call i2CWrByte
      
      ;Second value
      read D2,b0
      if b1 = 17 then                                         
      b0 = b0 + 128                         ;add 128 to turn on colon
      endif                                             
      call i2CWrByte              
    
      ;Third value
      read D1,b0
      call i2CWrByte
    
      ;Fourth value
      read D0,b0
      call i2CWrByte
      
      call i2CStop
      return
    
    i2CStart:
      high clk
      high dio
      low dio
      low clk
      return
      
    i2CStop:
      low clk
      low dio
      high clk
      high dio
      return
    
    ;Send a byte
    i2CWrByte:
      if bit0 = 1 then high dio else low dio endif:pulsout clk, 1
      if bit1 = 1 then high dio else low dio endif:pulsout clk, 1
      if bit2 = 1 then high dio else low dio endif:pulsout clk, 1
      if bit3 = 1 then high dio else low dio endif:pulsout clk, 1
      if bit4 = 1 then high dio else low dio endif:pulsout clk, 1
      if bit5 = 1 then high dio else low dio endif:pulsout clk, 1
      if bit6 = 1 then high dio else low dio endif:pulsout clk, 1
      if bit7 = 1 then high dio else low dio endif:pulsout clk, 1
      pulsout clk, 1
      return
    
    ;Set the brightness ($88 = on, $88 to $8F are the brightness levels)
    brightness:
      call i2CStart
      b0 = $89
      call i2CWrByte
      call i2CStop
      return
      
    ;===========================================================================

    http://www.picaxeforum.co.uk/showthr...ghlight=tm1637


    Cheers to All
    Last edited by pxgator; 18-05-2017 at 03:37.

Bookmarks

Posting Permissions

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