+ Reply to Thread
Results 1 to 3 of 3
  1. #1
    Join Date
    Feb 2012
    Location
    PERTH AUSTRALIA
    Posts
    765

    Default TM1637 - display module include example

    Hi guys ,

    have had a need to use the TM1637 4 digit display module

    please refer to link for the display module circuit and display unit used

    http://www.picbasic.co.uk/forum/showthread.php?t=23968

    Thanks to richard for help on the start/stop/ write timing section

    hope it of use to save some time when using this module


    cheers

    Sheldon

    Code:
    '*  Version : 0.0                                                              *
    '*  Notes   : Driver Libary for TM1637 chip                                    *
    '*          : For use on 4 digit with centre colon only                        *
    '*          : Note: Driver does not support the keyscan option                 *
    '*******************************************************************************
    ' Description:                                                                 *
    '             This include supports 4 digits, no Decimal Points on each digit  *
    '             and 1 colon in centre of 4 digits only                           *
    '             No keyscan support setup on the TM1637 fuctions                  *
    '                                                                              *
    ' Operation:                                                                   *
    '             min voltage for Red, Yellow LED digits is 3.3 volt               *
    '             min voltage for Green , Blue LED digits is 5v                    *
    '             min clock width = 400ns                                          *
    '             min data setup = 100ns + hold =100ns                             *
    '             The Clock and Data Pin have pull up 4k7 resitor,                 *
    '             with a 100pf cap to ground to reduce interfance buit into module *
    '             The 2 colon led segments are connected to anode Com2,cath= seg8  *
    '                                                                              *
    '  Features :                                                                  *
    '            Use either raw segment values or decimal numbers                  *
    '            (with and without leading zero)                                   *
    '            Set either the whole display or any digit independently           *
    '            Control the brightness                                            *
    '            Test display segments display                                     *
    '=============================================================================='
    '           TM1637 4 DIGIT COMMON ANODE - 1 COLON DISPLAY MODULE               *
    '                                                                              *
    '          Note: COLON = Grid2 - seg8(dp)- No other DP on this display         *
    '       -----------------------------------------       DISPLAY FACING         *
    '       |                                        |                             *
    '       |   ______   _____     _____    _____    |                             *
    '       |  |  A  |  |     |   |     |  |     |   |                             *
    '       |  |F   B|  |     |   |     |  |     |  0 ----- CLK                    *
    '       |  |_____|  |_____| O |_____|  |_____|  o ----- DIO                    *
    '       |  |  G  |  |     |   |     |  |     |  0 ----- VCC                    *
    '       |  |E   C|  |     | O |     |  |     |  0 ----- GND                    *
    '       |  |__D__|  |_____|   |_____|  |_____|   |                             *
    '       |   dig1     dig2      dig3     dig4     |                             *
    '       |   grid1    grid2     grid3    grid4    |                             *
    '       -----------------------------------------                              *
    '                                                                              *
    ' =============================================================================*
    ' Command byte information TM1637                                              *
    ' Note: Bit5= 0 ,bit4 = 0 always                                               *
    '    bit7 : Bit6                                                               *
    '     0   :  1    = Data Command                                               *
    '     1   :  0    = Display control Command                                    *
    '     1   :  1    = Address command                                            '   
    '  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *
    '  Data Command table ( bit7 = 1 , bit6 = 0 , bit5=0,bit4 =0) Hex value $4x    *
    '                                                                              *
    ' Bit1:Bit0                                                                    *
    '  0 : 0   = Write Data to display                                             *
    '  1 : 0   = Read key scan                                                     *
    '  0 : 1   = reserved                                                          *
    '  1 : 1   = reserved                                                          *
    ' Bit2  0 = Auto Address Adding , 1= Fixed Address                             *
    ' Bit3  0 = Normal Mode  1 = Test Mode                                         *
    ' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =* 
    '  Display Control Commnad table ( bit7=1 , Bit6 =0)  hex value $8x            *
    '  Bit2:Bit1:Bit0 - display brightness control level 0 = low , level 7 = high  *
    '   0  : 0  : 0   Display Brightness  1/16 - level 0                           *
    '   0  : 0  : 1   Display Brightness  2/16 - level 1                           *
    '   0  : 1  : 0   Display Brightness  4/16 - level 2                           *
    '   0  : 1  : 1   Display Brightness 10/16 - level 3                           *
    '   1  : 0  : 0   Display Brightness 11/16 - level 4                           *
    '   1  : 0  : 1   Display Brightness 12/16 - level 5                           *
    '   1  : 1  : 0   Display Brightness 13/16 - level 6                           *
    '   1  : 1  : 1   Display Brightness 14/16 - level 7                           *
    '                                                                              *
    ' Bit3 0 = Display Off 1 = Display On                                          *
    '                                                                              *
    ' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =*  
    '  Grid Segment Address Command Table ( Bit7= 1 ,Bit6 = 1 ) Hex Value = $Cx    *
    '  Display Adreess Registers                                                   *
    '  Bit3-Bit0  $C0 = Grid1(dig1), $C1 = Grid2(dig2+colon) ,$C2=Grid3 ,$C3=Grid4 *
    '                                                                              *
    ' Eech bit for each Grid byte controls a digit led Segment                     *
    ' Bit7=Seg8(DP,COlON),Bit6=Seg7(led-G),Bit5=Seg6(led-F),Bit4=Seg5(led-E)       *
    ' Bit3=Seg3(led-D),Bit2=Seg2(led-C),Bit1=Seg1(led-B),Bit0=Seg1(led-A)          *
    '                                                                              *
    '==============================================================================*
    
    TM_DIO_OUT     var  LATB.2          ' Data Pin OUT TM1637 include - 4dig 7seg Display Module  
    TM_DIO_IN      VAR  PORTB.2         ' Data Pin In  ( not used )
    TM_CLK         var  LATB.3          ' Clock Pin- set in TM1637 include - 4dig 7seg Display Module 
    DIR_TM_DIO     var  TRISB.2         ' Direction control for tm_dio pin  0 = out  1 = in
    
    
    TM1637_WR          con $40          ' write data command , with auto Address adding , display mode = normal 
    TM1637_WR_fixed    con $44          ' write data command , with fixed Address , display mode = normal
    Cmd_Dig_Seg        con $C0          ' Grid Segment Address Command $C0 - $C3 used on this module 
    TM1637_Dsp_CTL     con $80          ' display bright control command , bit3-0=display off 1= on ,bit2-0 brightness 0 - low 7 = high  
    
    Dig_7seg      var byte[4]           ' 4 byte array byte for each digit in use  
    TM1637_Data   var byte              ' value for each digit / segment in send command  
    YY            var byte              ' geneeral loop varable 
    g_num         var word              ' reqested number or chr to be dipslayed 
    TM1637_Bright var byte              ' display brightness value (0-7) 0=low to 7=high brighness 
    Colon_On      var bit               ' select if the colon segment is on/off 
    TM1637_On     var bit               ' select display on / off bit for command3  
    R_Justfy      var bit               ' set leading 0 if digit value 0 displayed over the digits  
    
    
     DIR_TM_DIO = 0     ' set direction output as start 
     TM_CLK     = 1     ' SET HIGH AT START   - modual has pullups 
     TM_DIO_out = 1      ' set high at start - module has pullups 
    
    goto Jumpover_TM1637
    '======================================
    
    TM1637_Startup:
    ' Command to do test pattern at device starup
    '---- each digit turn on in seq, all digits 
        
          Dig_7seg(0) = 0
          Dig_7seg(1) = 0 
          Dig_7seg(2) = 0 
          Dig_7seg(3) = 0 
          TM1637_on = 1 
          for g_num = 0 to 3 
             Dig_7seg(g_num) = $FF 
              TM1637_On = 1 
              TM1637_Bright = 7
             gosub WR_4dig 
             pause 200
          next g_num
          gosub TM1637_flash   ' flash the display 3 times 
          gosub TM1637_off     ' turn off display 
     return 
    
    
    ' -------------------------------
    TM1637_flash:
    ' flash the display 3 times with current values and brightness 
    ' if display was off prior to call , will leave it off after , visa versa if display was on prior      
         for g_num = 0 to 5         ' flash display on / off 3 times
              toggle TM1637_On  
              TM1637_Bright = 7
              gosub WR_Disp_Command3 
              pause 300
         next g_num    
    return
    
    '---------------------------------------------------------
       TM1637_Off:
     ' turn off the tm1637 display 
     
       TM1637_On = 0           ' set bit to 0 turn off display
       gosub WR_Disp_Command3  ' send the commands to display, other values dont care as display tuned off 
     return  
    '--------------------------------------  
    
     WR_4dig:
    ' assumes each digit data 7 segment info varable ( dig1_7seg,dig2_7seg, dig3_7seg dig4_7seg ) 
    ' assumes brightness setting value for command3  ( tm1637_bright) 
    ' assumes colon bit,TM1637_ON Bit , Dig_7seg(0-3) value 
    
    
     '     TM1637_On = 1
     '     Colon_On = 1
     '     TM1637_Bright = 7
    
        gosub Start_data                               ' start seq
        TM1637_Data =  TM1637_WR                       ' set write data command1 , with auto Address increment , display mode = normal 
        Gosub Write_Tm1637                             ' write to module 
        gosub Stop_data                                ' stop seq after data command1 
        
        gosub Start_data                               ' start seq for command2  
        TM1637_Data = Cmd_Dig_Seg                      ' grid1 start address for auto increment  
        Gosub Write_Tm1637                             ' write to module 
        
        TM1637_Data = Dig_7seg(3)                      ' digit 4 Data on grid1  
        Gosub Write_Tm1637                             ' write to module 
        
        TM1637_Data = Dig_7seg(2)                      ' digit 3 Data on Grid2 
        TM1637_Data = TM1637_Data + (Colon_On << 7)    ' add colon bit setting  (bit7) to  digit2 data for grid2  
        Gosub Write_Tm1637                             ' write to module 
        
        TM1637_Data = Dig_7Seg(1)                      ' digit 2 data for grid3  
        Gosub Write_Tm1637                             ' write to module  
        
        TM1637_Data = Dig_7Seg(0)                      ' digit 1 data for grid4 
        Gosub Write_Tm1637                             ' write to module 
        Gosub Stop_data                                ' send stop seq to show end of address data 
    
    WR_Disp_Command3:                                  ' Label to write display command3 only  , assumes dig_7seg(0-3)+ colon setting, brightness , display on /off setting  
        gosub Start_data                               ' start seq  for command 3 to start 
        TM1637_Data = TM1637_Dsp_CTL                   ' build display command3 byte
        TM1637_Data = TM1637_Data +(TM1637_On <<3)     ' add display on/off bit setting(bit3)to command3  
        TM1637_Data = TM1637_Data + TM1637_Bright      ' add display brighness value ( 0-7 ) to byte command3
        Gosub Write_Tm1637                             ' write to module 
        gosub Stop_data                                ' stop seq 
        
      return 
    
     
    '-----------------------------------------------------------------------------
    ' digits placed and display left to right with 4th digit first 1digit last 
    ' routine can set all 4 values
    ' assumes R_Justfy value, g_num  
     Put_4dig:
        TM1637_Data = g_num DIG 3            ' get 4th digit value into temp varable 
        gosub lookup_dig                        ' convert value to 7seg display value 
        Dig_7seg(3) = TM1637_Data               ' place 7seg value into digit1 including "0" 
        if TM1637_Data = $3F then               ' if it 7seg "0" then 
           if R_Justfy = 0 then Dig_7seg(3) = 0 ' if flag not set dont show digit   
        endif       
    
     Put_3dig:
        TM1637_Data = g_num DIG 2            ' get 3rd digit value into temp varable 
        gosub lookup_dig                        ' convert value to 7seg display value 
        Dig_7seg(2) = TM1637_Data               ' place 7seg value into digit1 including "0" 
        if TM1637_Data = $3F then               ' if it 7seg "0" then 
           if R_Justfy = 0 then Dig_7seg(2) = 0 ' if flag not set dont show digit   
        endif       
     
     Put_2dig:
        TM1637_Data = g_num DIG 1           ' get 2nd digit value into temp varable 
        gosub lookup_dig                        ' convert value to 7seg display value 
        Dig_7seg(1) = TM1637_Data               ' place 7seg value into digit1 including "0" 
        if TM1637_Data = $3F then               ' if it 7seg "0" then 
           if R_Justfy = 0 then Dig_7seg(1) = 0 ' if flag not set dont show digit   
        endif       
     
     Put_1dig:
    	TM1637_Data = g_num DIG 0            ' get 1st digit value into temp varable 
        gosub lookup_dig                        ' convert value to 7seg display value 
        Dig_7seg(0) = TM1637_Data               ' place 7seg value into digit1 including "0" 
       
     return 
    '------------------------------------------------------------------------------
    lookup_dig: 
    ' converts selected dec value to 7seg display value 
    ' digits display      0   1   2   3   4   5   6   7   8   9   
     lookup TM1637_Data,[$3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F],TM1637_Data
    
    return
    
    '-----------------------------------------------------------------------------
    test_txt:
    
    ' place "CH:" txt and current Rf CH value onto display ,
    ' use R_justfy leading 0 for 2 digits   
       Dig_7seg(3) = $39   '"C"
       Dig_7seg(2) = $76   '"H"
       Colon_On = 1        '":"
      g_num  = 1    ' get the current RF CH value 
       R_Justfy = 1        ' set leading 0 if single digit 
       gosub put_2dig      ' put 2 digits values for location dig3, dig4
       
       TM1637_Bright = 7   ' Set display  to full brightness  - value (0-7) 0=low to 7=high brighness 
       TM1637_On  = 1      ' select display on in command3 
       gosub WR_4DIG       ' write the values to display
    return
    
     '--------------------------------------------
    ' signal requirments at start of command 
     Start_data:
       tm_CLK = 1
       tm_DIO_out = 1 
    @ NOP   
       Tm_DIO_out = 0
    @ NOP
       tm_CLK = 0
     return
    '------------------------------------
    ' signal requirement after command is sent 
     Stop_data:
       tm_CLK = 0
       tm_DIO_out = 0
       tm_CLK = 1
    @ NOP
       tm_DIO_out = 1
    @ NOP 
     return
    
    '--------------------------------------------
    Write_TM1637:
    ' assumes TM1637_Data 
    ' commands/ data  sent LSbit first    
          yy= 0
          for yy = 0 to 7                   ' send 8 bits of data 
             tm_CLK = 0  
             tm_dio_out = TM1637_Data.0(yy)
             tm_CLK = 1 
    @ NOP
          Next yy
          tm_CLK = 0                 ' clock in data to look for the Ack from TM1637 
          DIR_TM_DIO = 1             ' set Data pin direction to input , release  
          tm_CLK = 1                 ' clock in ACK data on rising edge from TM1637 
    @ NOP                            ; allow time for input of ACK 
    @ NOP
    @ NOP
          tm_CLK = 0                 ' release DIO on oomplete 9th clock 
    @ NOP 
          DIR_TM_DIO = 0             ' set Data pin direction to output
        
     return
     
     '----------------
    'show_number:
    'send number example 
         g_num = 32
         R_Justfy = 1      ' place leading 0 in display 
         gosub Put_4dig    ' place 4 digit values 
         
         TM1637_On = 1
         Colon_On = 0
         TM1637_Bright = 7
         gosub WR_4dig 
    
    
    'return
    '-------------------------------------
     
     
     
     
     
    '==========================================================================
    
     Jumpover_TM1637:    'Jumpover code for PBP compile requirements

  2. #2
    Join Date
    May 2011
    Location
    Bangalore, India
    Posts
    22

    Default Re: TM1637 - display module include example

    Hi longpole001,
    Thanks for posting some useful info on TM1637 display module. Based on your post and and some details obtained from the Net, I am trying to write code in PBP 2.60C for pic 12F1840. But so far, I have not been able to make the display work. I have checked the display connecting it to Arduino and it works fine.

    I have tried at 32MHz and 16MHz (internal oscillator), but to no avail. Can you please post the complete working code including PBP version, Osc speed, PIC used and any other relevant information. Thanks.
    - Bala

  3. #3
    Join Date
    Mar 2005
    Location
    CROATIA
    Posts
    38

    Default Re: TM1637 - display module include example

    Hi,
    i have module with TM1638 lot led buttons and 8 digit, it was really cheap,
    but I didn't use it yet, if chip has similarity maybe it is good start point.

Similar Threads

  1. Tm1637 libary - has it been done
    By longpole001 in forum PBP3
    Replies: 3
    Last Post: - 4th August 2018, 12:25
  2. 3642bh display module pinouts on tm1637 module
    By longpole001 in forum Schematics
    Replies: 0
    Last Post: - 31st July 2018, 18:09
  3. Graphic LCD display module design advice
    By munromh in forum General
    Replies: 1
    Last Post: - 21st March 2013, 20:55
  4. Do you have to initialize an on-Screen Display module?
    By Ramius in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 28th April 2011, 00:53
  5. Replies: 1
    Last Post: - 27th July 2008, 06:14

Members who have read this thread : 32

You do not have permission to view the list of names.

Posting Permissions

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