Forum code test

hippy

Technical Support
Staff member
Rich (BB 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:  ;outpinC.1 = dio
  outpinC.1 = bit0:pulsout clk, 1
  outpinC.1 = bit1:pulsout clk, 1
  outpinC.1 = bit2:pulsout clk, 1
  outpinC.1 = bit3:pulsout clk, 1
  outpinC.1 = bit4:pulsout clk, 1
  outpinC.1 = bit5:pulsout clk, 1
  outpinC.1 = bit6:pulsout clk, 1
  outpinC.1 = bit7: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
  
;===========================================================================
 
Top