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 much faster and the code size is reduced. It has been tested from
4 to 32 mhz on M2 parts and also at 64 mhz on X2 parts. The code could be made
to run even faster by converting the subroutines to macros.
http://www.picaxeforum.co.uk/showthread.php?27463-Grove-Catalex-4-digit-7-segment-displays-(TM1637)&highlight=tm1637
Cheers to All
digit LED display to a PICAXE project. Borrowing code from the link below I wrote
a version which runs much faster and the code size is reduced. It has been tested from
4 to 32 mhz on M2 parts and also at 64 mhz on X2 parts. The code could be made
to run even faster by converting the subroutines to macros.
http://www.picaxeforum.co.uk/showthread.php?27463-Grove-Catalex-4-digit-7-segment-displays-(TM1637)&highlight=tm1637
Code:
[color=Green];TM1637_test.bas[/color]
[color=Navy]#picaxe [/color][color=Black]08m2[/color]
[color=Green];segment data for TM1637
;( 0 1 2 3 4 5 6 7 8 9 A b C d E F dash blank)[/color]
[color=Blue]DATA [/color][color=Navy]0[/color][color=Black],[/color][color=Blue]([/color][color=Navy]$3f[/color][color=Black],[/color][color=Navy]$06[/color][color=Black],[/color][color=Navy]$5b[/color][color=Black],[/color][color=Navy]$4f[/color][color=Black],[/color][color=Navy]$66[/color][color=Black],[/color][color=Navy]$6d[/color][color=Black],[/color][color=Navy]$7d[/color][color=Black],[/color][color=Navy]$07[/color][color=Black],[/color][color=Navy]$7f[/color][color=Black],[/color][color=Navy]$6f[/color][color=Black],[/color][color=Navy]$77[/color][color=Black],[/color][color=Navy]$7c[/color][color=Black],[/color][color=Navy]$39[/color][color=Black],[/color][color=Navy]$5e[/color][color=Black],[/color][color=Navy]$79[/color][color=Black],[/color][color=Navy]$71[/color][color=Black], [/color][color=Navy]$40[/color][color=Black], [/color][color=Navy]$00[/color][color=Blue])[/color]
[color=Green];for TM1637[/color]
[color=Blue]symbol dio [/color][color=DarkCyan]= [/color][color=Blue]C.1 [/color][color=Green];TM1637 data pin to 08m2 leg 6[/color]
[color=Blue]symbol clk [/color][color=DarkCyan]= [/color][color=Blue]C.2 [/color][color=Green];TM1637 clock pin to 08m2 leg 5[/color]
[color=Blue]symbol [/color][color=Purple]D3 [/color][color=DarkCyan]= [/color][color=Purple]b2[/color]
[color=Blue]symbol [/color][color=Purple]D2 [/color][color=DarkCyan]= [/color][color=Purple]b3 [/color][color=Green];for all 4 digits[/color]
[color=Blue]symbol [/color][color=Purple]D1 [/color][color=DarkCyan]= [/color][color=Purple]b4[/color]
[color=Blue]symbol [/color][color=Purple]D0 [/color][color=DarkCyan]= [/color][color=Purple]b5[/color]
[color=Blue]gosub [/color][color=Black]brightness [/color][color=Green];set display brightness[/color]
[color=Blue]for [/color][color=Purple]b1 [/color][color=DarkCyan]= [/color][color=Navy]0 [/color][color=Blue]to [/color][color=Navy]17 [/color][color=Green];sequence thru all character
[/color][color=Purple]D3 [/color][color=DarkCyan]= [/color][color=Purple]b1[/color][color=Black]:[/color][color=Purple]D2 [/color][color=DarkCyan]= [/color][color=Purple]b1 [/color][color=Green];bytes stored in the data
[/color][color=Purple]D1 [/color][color=DarkCyan]= [/color][color=Purple]b1[/color][color=Black]:[/color][color=Purple]D0 [/color][color=DarkCyan]= [/color][color=Purple]b1
[/color][color=Blue]gosub [/color][color=Black]DISPLAY
[/color][color=Blue]pause [/color][color=Navy]1000[/color]
[color=Blue]next [/color][color=Purple]b1[/color]
[color=Blue]end[/color]
[color=Green];===========================================================================
;Group of subroutines to read the values from data and output to the display[/color]
[color=Black]DISPLAY:
[/color][color=Green];Enable sequential movement (from one digit to next)
[/color][color=Blue]call [/color][color=Black]i2CStart
[/color][color=Purple]b0 [/color][color=DarkCyan]= [/color][color=Navy]$40
[/color][color=Blue]call [/color][color=Black]i2CWrByte
[/color][color=Blue]call [/color][color=Black]i2CStop
[/color][color=Green];Move to first digit
[/color][color=Blue]call [/color][color=Black]i2CStart
[/color][color=Purple]b0 [/color][color=DarkCyan]= [/color][color=Navy]$C0
[/color][color=Blue]call [/color][color=Black]i2CWrByte
[/color][color=Green];First value
[/color][color=Blue]read [/color][color=Purple]D3[/color][color=Black],[/color][color=Purple]b0
[/color][color=Blue]call [/color][color=Black]i2CWrByte
[/color][color=Green];Second value
[/color][color=Blue]read [/color][color=Purple]D2[/color][color=Black],[/color][color=Purple]b0
[/color][color=Blue]if [/color][color=Purple]b1 [/color][color=DarkCyan]= [/color][color=Navy]17 [/color][color=Blue]then
[/color][color=Purple]b0 [/color][color=DarkCyan]= [/color][color=Purple]b0 [/color][color=DarkCyan]+ [/color][color=Navy]128 [/color][color=Green];add 128 to turn on colon
[/color][color=Blue]endif
call [/color][color=Black]i2CWrByte
[/color][color=Green];Third value
[/color][color=Blue]read [/color][color=Purple]D1[/color][color=Black],[/color][color=Purple]b0
[/color][color=Blue]call [/color][color=Black]i2CWrByte
[/color][color=Green];Fourth value
[/color][color=Blue]read [/color][color=Purple]D0[/color][color=Black],[/color][color=Purple]b0
[/color][color=Blue]call [/color][color=Black]i2CWrByte
[/color][color=Blue]call [/color][color=Black]i2CStop
[/color][color=Blue]return[/color]
[color=Black]i2CStart:
[/color][color=Blue]high clk
high dio
low dio
low clk
return
[/color]
[color=Black]i2CStop:
[/color][color=Blue]low clk
low dio
high clk
high dio
return[/color]
[color=Green];Send a byte[/color]
[color=Black]i2CWrByte: [/color][color=Green];outpinC.1 = dio
[/color][color=Purple]outpinC.1 [/color][color=DarkCyan]= [/color][color=Purple]bit0[/color][color=Black]:[/color][color=Blue]pulsout clk[/color][color=Black], [/color][color=Navy]1
[/color][color=Purple]outpinC.1 [/color][color=DarkCyan]= [/color][color=Purple]bit1[/color][color=Black]:[/color][color=Blue]pulsout clk[/color][color=Black], [/color][color=Navy]1
[/color][color=Purple]outpinC.1 [/color][color=DarkCyan]= [/color][color=Purple]bit2[/color][color=Black]:[/color][color=Blue]pulsout clk[/color][color=Black], [/color][color=Navy]1
[/color][color=Purple]outpinC.1 [/color][color=DarkCyan]= [/color][color=Purple]bit3[/color][color=Black]:[/color][color=Blue]pulsout clk[/color][color=Black], [/color][color=Navy]1
[/color][color=Purple]outpinC.1 [/color][color=DarkCyan]= [/color][color=Purple]bit4[/color][color=Black]:[/color][color=Blue]pulsout clk[/color][color=Black], [/color][color=Navy]1
[/color][color=Purple]outpinC.1 [/color][color=DarkCyan]= [/color][color=Purple]bit5[/color][color=Black]:[/color][color=Blue]pulsout clk[/color][color=Black], [/color][color=Navy]1
[/color][color=Purple]outpinC.1 [/color][color=DarkCyan]= [/color][color=Purple]bit6[/color][color=Black]:[/color][color=Blue]pulsout clk[/color][color=Black], [/color][color=Navy]1
[/color][color=Purple]outpinC.1 [/color][color=DarkCyan]= [/color][color=Purple]bit7[/color][color=Black]:[/color][color=Blue]pulsout clk[/color][color=Black], [/color][color=Navy]1
[/color][color=Blue]pulsout clk[/color][color=Black], [/color][color=Navy]1
[/color][color=Blue]return[/color]
[color=Green];Set the brightness ($88 = on, $88 to $8F are the brightness levels)[/color]
[color=Black]brightness:
[/color][color=Blue]call [/color][color=Black]i2CStart
[/color][color=Purple]b0 [/color][color=DarkCyan]= [/color][color=Navy]$89
[/color][color=Blue]call [/color][color=Black]i2CWrByte
[/color][color=Blue]call [/color][color=Black]i2CStop
[/color][color=Blue]return
[/color]
[color=Green];===========================================================================[/color]
Cheers to All
Last edited: