Interfacing MAX6952
This is a driver to interface MAX6952(5 x 7 dot-matrix LED display driver ) with PIC Micro. Compiled with CCS PICC
#define max_sdi PIN_C5
#define max_sdo PIN_C4
#define max_clk PIN_C3
#define max_cs PIN_C2
const int8 user_font[120]= {0x77,0x6B,0x5D,0x6B,0X77,
0x1C,0x22,0x7F,0x22,0x1C,
0x77,0x6B,0x5D,0x6B,0X77,
0x1C,0x22,0x7F,0x22,0x1C,
0x77,0x6B,0x5D,0x6B,0X77,
0x1C,0x22,0x7F,0x22,0x1C,
0x77,0x6B,0x5D,0x6B,0X77,
0x1C,0x22,0x7F,0x22,0x1C,
0x77,0x6B,0x5D,0x6B,0X77,
0x1C,0x22,0x7F,0x22,0x1C,
0x77,0x6B,0x5D,0x6B,0X77,
0x1C,0x22,0x7F,0x22,0x1C,
0x77,0x6B,0x5D,0x6B,0X77,
0x1C,0x22,0x7F,0x22,0x1C,
0x77,0x6B,0x5D,0x6B,0X77,
0x1C,0x22,0x7F,0x22,0x1C,
0x77,0x6B,0x5D,0x6B,0X77,
0x1C,0x22,0x7F,0x22,0x1C,
0x77,0x6B,0x5D,0x6B,0X77,
0x1C,0x22,0x7F,0x22,0x1C,
0x77,0x6B,0x5D,0x6B,0X77,
0x1C,0x22,0x7F,0x22,0x1C,
0x77,0x6B,0x5D,0x6B,0X77,
0x1C,0x22,0x7F,0x22,0x1C};
#define config_addr 0x04
#define font_addr 0x05
#define test_addr 0x07
#define plane01_addr 0x20
#define plane02_addr 0x21
#define plane03_addr 0x22
#define plane04_addr 0x23
#define plane11_addr 0x40
#define plane12_addr 0x41
#define plane13_addr 0x42
#define plane14_addr 0x43
int8 config_byte;
void write_to_6952(int8 cmd,int8 data)
{
int8 i;
int16 ser_data;
ser_data=make16(cmd,data);
//shift_right(&ser_data,2,0);
output_low(max_clk);
output_low(max_cs);
for(i=1;i<=16;++i)
{
output_bit(max_sdi,shift_left(&ser_data,2,0));
output_high(max_clk);
delay_us(10);
// if(i<16)
output_low(max_clk);
//delay_us(6);
}
output_high(max_cs);
output_low(max_clk);
}
void write_user_font()
{
int8 j;
write_to_6952(font_addr,0x80);
for(j=0;j<120;j++)
{
write_to_6952(font_addr,user_font[j]);
}
}
/*******************************************************************
if state=1,normal operation
if state=0,shutdown
if wrt=1,write to 6952,otherwise update the config_byte register
*******************************************************************/
void shutdown(int1 state, int1 wrt)
{
if(state)
config_byte |= 0x01;
else
config_byte &= 0xFE;
if(wrt)
write_to_6952(config_addr,config_byte);
}
/*******************************************************************
if state=1,enable blinking
if state=0,disable blinking
if wrt=1,write to 6952,otherwise update the config_byte register
*******************************************************************/
void blink_enable(int1 state,int1 wrt )
{
if(state)
config_byte |= 8;
else
config_byte &= 0xF7;
if( wrt )
write_to_6952(config_addr,config_byte);
}
/*************************************************************************
if state=1,put the display in test mode
if state=0,normal mode
Does not affect plane data - original display is restored when set 0.
**************************************************************************/
void display_test(int1 state )
{
if(state)
write_to_6952(test_addr,1);
else
write_to_6952(test_addr,0);
}