void display_clear() { for(uint8_t i = 0; i < 8; i ++){ display_digits[i] = 0; max7219_write(i + 1, 0); } }
void display_init() { // enable port DDRB |= (1 << MAX7219_DIN) | (1 << MAX7219_CLK) | (1 << MAX7219_LOAD); // set initial values max7219_write(MAX7219_REG_DECODE, 0); max7219_write(MAX7219_REG_SCAN, 7); max7219_write(MAX7219_REG_TEST, 0); max7219_write(MAX7219_REG_SHUTDOWN, 1); // set brightness max7219_write(MAX7219_REG_BRIGHTNESS, 0x08); display_clear(); }
int main(int argc, char* argv[]) { int n; api_io.init(MAX7219_CS, OUT_PUSH_PULL); //初始化引脚 api_io.init(MAX7219_DAT, OUT_PUSH_PULL); api_io.init(MAX7219_CLK, OUT_PUSH_PULL); MAX7219_CS_HIGH; //三个引脚设置为高电平 MAX7219_CLK_HIGH; MAX7219_DAT_HIGH; max7219_init(); u8_t bits[8] = {0x3c, 0x42, 0xa5, 0x81, 0xa5, 0x99, 0x42, 0x3c}; //:-) // {0x3c, 0x42, 0x99, 0xa9, 0xa9, 0x9d, 0x42, 0x3c}; //symbol @ for(n = 0; n < sizeof(bits); n++) max7219_write(n+1, bits[n]); //write to 7219 buf LOG_INFO("main: MAX7219 starting...\r\n"); return ADDON_LOADER_GRANTED; //err_exit: // return ADDON_LOADER_ABORT; }
void display_set_dots(uint8_t enabled) { if(enabled) { SET_BIT(display_digits[7], 2); } else { CLR_BIT(display_digits[7], 2); } max7219_write(8, display_digits[7]); }
void display_set_dot(uint8_t position, uint8_t enabled) { uint8_t shift = 6 - position; if(enabled) { SET_BIT(display_digits[6], shift); } else { CLR_BIT(display_digits[6], shift); } max7219_write(7, display_digits[6]); }
int JSON_RPC(draw)(jsmn_node_t* pjn, fp_json_delegate_ack ack, void* ctx) //继承于fp_json_delegate_start { int ret = STATE_OK; char* err_msg = NULL; u8_t bits[8], n; LOG_INFO("DELEGATE max7219.draw.\r\n"); /* { "method":"draw", "params":"0123456789ABCDEF" // 8bytes = 16hexs } */ // pjn->js point to very begining of json string. // pjn->tkn is the token object which points to json element "0123456789ABCDEF" // Google "jsmn" (super lightweight json parser) for detailed info. if(NULL == pjn->tkn || JSMN_STRING != pjn->tkn->type || //must be string STATE_OK != jsmn.tkn2val_xbuf(pjn->js, pjn->tkn, bits, sizeof(bits), NULL)){ //parse string into binary array ret = STATE_ERROR; err_msg = "param error."; LOG_WARN("max7219:%s.\r\n", err_msg); goto exit_err; } char str[64]; utl.snprintf_hex(str, sizeof(str), bits, sizeof(bits), 0x80|' '); //Just print to debug console, 0x80 means up case,' 'means seperate by space LOG_INFO("max7219: %s \r\n", str); for(n = 0; n < sizeof(bits); n++) max7219_write(n+1, bits[n]); //write to 7219 buf //exit_safe: if(ack) jsmn.delegate_ack_result(ack, ctx, ret); //just reurn {"result":0} return ret; exit_err: if(ack) jsmn.delegate_ack_err(ack, ctx, ret, err_msg); //return {"error":{"code":xxx, "message":"yyyy"}} return ret; }
void display_set_char(uint8_t position, char ch) { uint8_t shift = 6 - position; uint8_t bitmask = charset[ch - 32]; for(uint8_t pos = 0; pos < 8; pos++) { if((bitmask & (1 << pos))) { SET_BIT(display_digits[pos], shift); } else { CLR_BIT(display_digits[pos], shift); } max7219_write(pos + 1, display_digits[pos]); } }
void display_set_brightness(uint8_t brightness) { max7219_write(MAX7219_REG_BRIGHTNESS, brightness); }