void send_Din(char,unsigned char);
void cs_high_low();
void enable();
void init();
void out_din(char);
void out_clk(char);
void out_cs(char);
#define shutdown 0x0C
#define brightness 0x0A
#define scan_limit 0x0B
#define decode_mode 0x09
// char led_data[8] = {0x18,0x24,0x42,0x42,0x7E,0x42,0x42,0x42};//'A'
char led_data[8] = {0x00,0x41,0x43,0x45,0x49,0x51,0x61,0x41};//'N'
// char led_data[8] = {0x41,0x63,0x55,0x49,0x41,0x41,0x41,0x41};//'M'
// char led_data[8] = {0x41,0x22,0x14,0x08,0x08,0x08,0x08,0x08};//'Y'
// char led_data[8] = {0x1F,0x21,0x21,0x21,0x21,0x21,0x21,0x1F};//'D'
void setup() {
init();
out_cs(0x00);
send_Din(scan_limit,0x07);
send_Din(decode_mode,0x00);
send_Din(brightness,0x0A);
send_Din(shutdown,0x01);
while(1){
for(char i=1;i<9;i++){
send_Din(i,led_data[i-1]);
}
}
}
void send_Din(char addr,unsigned char data){
for(char i=7;i>=0;i--){
out_din((addr>>i)&0x01);
enable();
}
for(char i=7;i>=0;i--){
out_din((data>>i)&0x01);
enable();
}
cs_high_low();
}
void cs_high_low(){
out_cs(0x01);
delay1();
out_cs(0x00);
}
void enable(){
out_clk(0x01);
delay1();
out_clk(0x00);
delay1();
}
void init(){
char *ddr_din = (char*)0x30;
*ddr_din = 0x01;
char *ddr_clk = (char*)0x107;
*ddr_clk = 0x01;
char *ddr_cs = (char*)0x10A;
*ddr_cs = 0x01;
}
void out_din(char data){
char *out = (char*)0x31;
*out = data;
}
void out_clk(char data){
char *out = (char*)0x108;
*out = data;
}
void out_cs(char data){
char *out = (char*)0x10B;
*out = data;
}
void delay1(){
volatile long i;
for(i=0;i<100;i++);
}
void loop() {
// put your main code here, to run repeatedly:
}