Hi jefrem
New improved code. Pauses not required. Address set command now works. If you don't write to all 16 displays some segments of displays not written to turn on when they shouldn't, therefore it is best to write to all 16 displays and over-write these segments.
Phil
Code:'PIC18F2550 @ 48mHz, USB bootloader, JY-LM1640 16 x 7 seg display DEFINE OSC 48 DEFINE RESET_ORG 1000h dat_com_inc VAR BYTE 'Display command for auto inc address dat_com_fix VAR BYTE 'Display command for fixed address dis_com_off VAR BYTE 'Display command OFF dis_com_on VAR BYTE 'Display command ON address VAR BYTE 'Display address ($00 - $0F) brightness VAR BYTE 'Brightness value (0 - 7) dat VAR BYTE 'Data to send to TM1640 digit VAR BYTE '7 seg display (0 - 15) n VAR BYTE 'Counter dat_com_inc = %01000000 'Data command ADDRESS auto + 1 dat_com_fix = %01000100 'Data command FIXED address dis_com_off = %10000000 'Switch display OFF dis_com_on = %10001000 'Switch display ON brightness = %00000011 'Display brightness (0 = MIN 7 = MAX) address = %11000000 'Display ADDRESS $00 din VAR LATB.7 sclk VAR LATB.6 TRISC = %00111000 LATC = 0 TRISB = %00111111 din = 1 'Data pin HIGH to start sclk = 1 'Clock pin HIGH to start PAUSE 500 '---------- Start of program ------------------------------------ FOR digit = 0 TO 4 'Scroll to right, increase brightness GOSUB PRINT: NEXT FOR digit = 3 TO 0 STEP -1 'Scroll to left, decrease brightness GOSUB PRINT: NEXT END '---------- Print to display ------------------------------------ PRINT: dat = dat_com_inc 'Data command setting GOSUB COMMAND: dat = address + digit 'Set address din = 0 : sclk = 0 'Start transmission process SHIFTOUT din,sclk,0,[dat] 'LSB first, clock idles low FOR n = 0 TO 15 'Print 16 characters LOOKUP n,[0,115,6,57,6,127,113,91,109,109,63,0,64,64,64,64],dat SHIFTOUT din,sclk,0,[dat] 'Print message NEXT sclk = 1 : din = 1 'End transmission process dat = dis_com_on + digit 'Set brightness GOSUB COMMAND: PAUSE 1000 RETURN '---------------------------------------------------------------- COMMAND: din = 0 : sclk = 0 'Start transmission process SHIFTOUT din,sclk,0,[dat] 'LSB first, clock idles low sclk = 1 : din = 1 'End transmission process RETURN '----------------------------------------------------------------




Bookmarks