void Ht1621_Wr_Cmd(u8 Cmd) { LCD_SPI_CS_LOW(); Ht1621_Delay(HT1621_BIT_DELAY); Ht1621_Wr_Data(0x80, 4); //写入命令标志100 Ht1621_Wr_Data(Cmd, 8); //写入命令数据 LCD_SPI_CS_HIGH(); Ht1621_Delay(HT1621_BIT_DELAY); }
/******************************************************************************* Func:LCD写入命令 Date:2016-3-11 Note: *******************************************************************************/ void Ht1621Wr_Cmd(u8 Cmd) //写命令也可以连续写,这里一次只写一次 { GPIO_ResetBits(GPIOA,HT1621_CS); //CS = 0; 先拉底,准备传数据 Ht1621_Delay(3); Ht1621Wr_Data(0x80, 4); //写入命令标志 "100+0",命令格式="100+0+8位的命令字节" Ht1621Wr_Data(Cmd, 8); //写入命令数据 GPIO_SetBits(GPIOA,HT1621_CS); //不写数据就再次拉高 Ht1621_Delay(4); //写数据结束 }
/******************************************************************************* Func:LCD写入寄存器 Date:2016-3-11 Note: *******************************************************************************/ void Ht1621_WriteReg(u8 Addr, u8 Data) //可以控制四个段 { GPIO_ResetBits(GPIOA,HT1621_CS); //CS = 0; 先拉底,准备传数据 Ht1621_Delay(3); Ht1621Wr_Data(0xa0, 3); //写入数据标志101 Ht1621Wr_Data(Addr << 2, 6); //写入地址数据 因为数据是八位的,只用 Ht1621Wr_Data(Data << 4, 4); //写入数据 这个道理如上,只用后4位。 GPIO_SetBits(GPIOA,HT1621_CS); //拉高,终止传数据 }
void Ht1621_Wr_Data(u8 W_Data, u8 Num) { u8 i; for (i = 0; i < Num; i++) { LCD_SPI_CLK_LOW(); Ht1621_Delay(HT1621_BIT_DELAY); if(W_Data & 0x80){ LCD_SPI_DATA_HIGH(); } else{ LCD_SPI_DATA_LOW(); } Ht1621_Delay(HT1621_BIT_DELAY); LCD_SPI_CLK_HIGH(); Ht1621_Delay(HT1621_BIT_DELAY); W_Data <<= 1; } }
/******************************************************************************* Func:LCD写入数据 Date:2016-3-11 Note: *******************************************************************************/ void Ht1621Wr_Data(u8 Data, u8 cnt) { u8 i; for (i = 0; i < cnt; i++) { GPIO_ResetBits(GPIOA,HT1621_WR); Ht1621_Delay(3); if (Data & 0x80) { GPIO_SetBits(GPIOA,HT1621_DAT); } else { GPIO_ResetBits(GPIOA,HT1621_DAT); } Ht1621_Delay(3); GPIO_SetBits(GPIOA,HT1621_WR); Data <<= 1; Ht1621_Delay(1); } }
void lcd_ht1621_init(void) { LCD_spi_gpio_Init(); lcd_backlight_ctrl(TRUE); Ht1621_Delay(HT1621_INI_DELAY); //延时使LCD工作电压稳定 Ht1621_Wr_Cmd(HT1621_BIAS); Ht1621_Wr_Cmd(HT1621_RC256); //使用内部振荡器 Ht1621_Wr_Cmd(HT1621_SYSDIS); Ht1621_Wr_Cmd(HT1621_WDTDIS); Ht1621_Wr_Cmd(HT1621_SYSEN); Ht1621_Wr_Cmd(HT1621_LCDON); //Ht1621_Wr_Cmd(HT1621_LCDOFF); disp_buf_clear(); sys_printf(" lcd_ht1621_init "); }