void i2c_init() { SET_CLOCK(); SET_DATA(); MAKE_CLOCK_OUTPUT(); MAKE_DATA_OUTPUT(); }
static void pulse_clock() { i2c_delay_us(100); SET_CLOCK(); i2c_delay_us(100); CLEAR_CLOCK(); }
char TOS_COMMAND(I2C_init)(){ printf("i2c_init\n"); SET_CLOCK(); SET_DATA(); MAKE_CLOCK_OUTPUT(); MAKE_DATA_OUTPUT(); VAR(state) = 0; VAR(data) = 0; return 1; }
static void i2c_end() { MAKE_DATA_OUTPUT(); CLEAR_DATA(); i2c_delay_us(100); SET_CLOCK(); i2c_delay_us(100); SET_DATA(); }
//---------结束信号------------------- void panel_tm1635_stop(void) { CLR_CLOCK();//clk = 0; Tm1635_DelayNTimes(2); CLR_DATA();//dio = 0; Tm1635_DelayNTimes(2); SET_CLOCK();//clk = 1; Tm1635_DelayNTimes(3); SET_DATA();//dio = 1; }
//---------读按键数据子程序----------- uint32_t panel_tm1635_read(void) { uint32_t x, key; uint64_t data; panel_tm1635_set_portin(g_PanelTM1635Config.m_chDataPin); Tm1635_DelayNTimes(2); CLR_CLOCK();//clk = 0; Tm1635_DelayNTimes(2); key = 0; for(x=0;x<8;x++) //读按键数据开始 { CLR_CLOCK();//clk = 0; Tm1635_DelayNTimes(3); SET_CLOCK();//clk = 1; //data=panel_tm1635_get_data(DATA); Tm1635_DelayNTimes(1); g_PanelTM1635Config.m_tPanelPublicConfig.m_PanelGetGpioLevelFun(g_PanelTM1635Config.m_chDataPin, &data); key = key<<1; if(data) key |= 1; //SET_CLOCK();//clk = 1; Tm1635_DelayNTimes(2); } panel_tm1635_set_portout(g_PanelTM1635Config.m_chDataPin); Tm1635_DelayNTimes(2); CLR_CLOCK();//clk = 0; Tm1635_DelayNTimes(2); SET_DATA();//dio = 1; Tm1635_DelayNTimes(2); SET_CLOCK();//clk = 1; Tm1635_DelayNTimes(3); panel_tm1635_set_portin(g_PanelTM1635Config.m_chDataPin); Tm1635_DelayNTimes(2); Tm1635_DelayNTimes(2); panel_tm1635_set_portout(g_PanelTM1635Config.m_chDataPin); Tm1635_DelayNTimes(2);//for the ack 应答信号 return(key); }
static void i2c_start() { SET_DATA(); SET_CLOCK(); MAKE_DATA_OUTPUT(); i2c_delay_us(100); CLEAR_DATA(); i2c_delay_us(100); CLEAR_CLOCK(); }
void panel_tm1635_start(void) { SET_CLOCK(); //clk = 1; //给芯片发送开始信号 SET_DATA();//dio = 1; Tm1635_DelayNTimes(2); CLR_DATA();//dio = 0; Tm1635_DelayNTimes(2); CLR_CLOCK();//clk = 0; //开始信号传送完 Tm1635_DelayNTimes(1); }
static inline void pulse_clock(){ wait(); wait(); wait(); wait(); SET_CLOCK(); wait(); wait(); wait(); wait(); CLEAR_CLOCK(); }
void panel_tm1635_write(uint8_t wr_data) { unsigned int i; //GXPIO_Data_t whether_key; panel_tm1635_set_portout(g_PanelTM1635Config.m_chDataPin); for(i=0;i<8;i++)//开始传送8位数据,每循环一次传送一位数据 { CLR_CLOCK();//clk =0; Tm1635_DelayNTimes(2); if((wr_data & 0x1)) { SET_DATA(); } else { CLR_DATA(); } wr_data >>= 1;//移位数据,低位在前! Tm1635_DelayNTimes(3); SET_CLOCK();//clk =1; Tm1635_DelayNTimes(2); } //8位数据传送完1 CLR_CLOCK();//clk = 0;//判断芯片发过来的ACK应答信号 Tm1635_DelayNTimes(2); SET_DATA();//dio = 1; Tm1635_DelayNTimes(2); SET_CLOCK();//clk = 1; Tm1635_DelayNTimes(2); panel_tm1635_set_portin(g_PanelTM1635Config.m_chDataPin); Tm1635_DelayNTimes(2); Tm1635_DelayNTimes(2); panel_tm1635_set_portout(g_PanelTM1635Config.m_chDataPin); Tm1635_DelayNTimes(2); }
static unsigned char read_bit() { unsigned char i; MAKE_DATA_INPUT(); i2c_delay_us(100); SET_CLOCK(); i2c_delay_us(100); i = (unsigned char) GET_DATA(); CLEAR_CLOCK(); return i; }
void i2c_end(){ MAKE_DATA_OUTPUT(); CLEAR_DATA(); wait(); wait(); wait(); wait(); SET_CLOCK(); wait(); wait(); wait(); wait(); SET_DATA(); printf(" i2c_end\n"); }
void i2c_start(){ SET_DATA(); SET_CLOCK(); MAKE_DATA_OUTPUT(); wait(); wait(); wait(); wait(); CLEAR_DATA(); wait(); wait(); wait(); wait(); CLEAR_CLOCK(); printf(" i2c_start\n"); }
char read_bit(){ char i; MAKE_DATA_INPUT(); wait(); wait(); wait(); wait(); SET_CLOCK(); wait(); wait(); wait(); wait(); i = GET_DATA(); CLEAR_CLOCK(); return i; }
//led显示 void font_pannel_led_scan(void) { uint8_t a; SET_DATA();//dio = 1; SET_CLOCK();//clk = 1; panel_tm1635_start(); //调用开始信号 panel_tm1635_write(0x44);//写命令40H(数据设置),固定地址模式 panel_tm1635_stop(); //调用结束信号,一个字节命令发送完毕,可以发送下一个命令 Tm1635_DelayNTimes(4); for(a=0;a<5;a++) { panel_tm1635_start(); //调用开始信号 panel_tm1635_write(0xc0+a);//写起始地址命令(0C0H),地址从00H单元开始。 panel_tm1635_write(gs_chLedValue_1635[a]);//给显示寄存器写显示数据,值可根据实参改变 panel_tm1635_stop(); //将所有数据送完后,发结束信号,可以发送下一条命令 } Tm1635_DelayNTimes(3); panel_tm1635_start(); //调用开始信号 panel_tm1635_write(0x8f); //送开屏命令,(8BH),亮度可以根据低三位调节。 panel_tm1635_stop(); //调用结束信号,一个字节命令发送完毕,可以发送下一个命令 }
void gx_stb_panel_tm1635_unlock(void) { gs_chLedValue_1635[4] &= (~BIT_B_1635); SET_DATA();//dio = 1; SET_CLOCK();//clk = 1; panel_tm1635_start(); //调用开始信号 panel_tm1635_write(0x44);//写命令40H(数据设置),固定地址模式 panel_tm1635_stop(); //调用结束信号,一个字节命令发送完毕,可以发送下一个命令 Tm1635_DelayNTimes(4); // for(a=0;a<5;a++) { panel_tm1635_start(); //调用开始信号 panel_tm1635_write(0xc0+4);//写起始地址命令(0C0H),地址从00H单元开始。 panel_tm1635_write(gs_chLedValue_1635[4]);//给显示寄存器写显示数据,值可根据实参改变 panel_tm1635_stop(); //将所有数据送完后,发结束信号,可以发送下一条命令 } Tm1635_DelayNTimes(3); panel_tm1635_start(); //调用开始信号 panel_tm1635_write(0x8f); //送开屏命令,(8BH),亮度可以根据低三位调节。 panel_tm1635_stop(); }
//----------判按键子程序----------- void font_pannel_key_scan(void) { static uint8_t chOldKey = 0; static uint8_t chCnt = 0; static uint8_t chFirst = 0; //uint32_t KeyValue=0; uint32_t key_VALUE=0; SET_DATA(); SET_CLOCK(); panel_tm1635_start(); //调用开始信号 panel_tm1635_write(0x42); //送读按键命令(42H), key_VALUE = panel_tm1635_read(); //读8位按键数据,其中高三位为0,低5位为按键编码。编码表见说明书第5页。 panel_tm1635_stop(); //发结束信号,按键读取完毕。 if(chOldKey !=key_VALUE) { chCnt = 0; chFirst = 0; chOldKey = key_VALUE; } else { //bsp_printf("chFirst = %d\n",chFirst); if(0 == chFirst) { chCnt ++; if(chCnt == 40) { chCnt = 0; chFirst = 1; } else { return ; } } else { chCnt ++; //bsp_printf("chCnt = %d\n",chCnt); if(chCnt == 20) { chCnt = 0; } else { return ; } } } if(key_VALUE != 0xff) { //bsp_printf("key == 0x%x\n",key_VALUE); } switch(key_VALUE) { case 0xef: //KeyValue = STB_KEY_OK; gx_stb_panel_tm1635_send_keymsg(6); break; case 0x4f: //KeyValue = STB_KEY_DOWN; gx_stb_panel_tm1635_send_keymsg(3); break; case 0x2f: //KeyValue = STB_KEY_RIGHT; gx_stb_panel_tm1635_send_keymsg(4); break; case 0xaf: //KeyValue = STB_KEY_UP; gx_stb_panel_tm1635_send_keymsg(2); break; case 0x8f: //KeyValue = STB_KEY_LEFT; gx_stb_panel_tm1635_send_keymsg(5); break; case 0x6f: //KeyValue = STB_KEY_MENU; gx_stb_panel_tm1635_send_keymsg(7); break; case 0xcf: //KeyValue = STB_KEY_EXIT; gx_stb_panel_tm1635_send_keymsg(1); break; default: return; } }