HT1622驱动如下:
void HT1622_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //ʹÄÜPA¿ÚʱÖÓ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6; //PA.3,PA.4,PA.5,PA.6
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÍÆÍìÊä³ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //
GPIO_Init(GPIOA, &GPIO_InitStructure); //ÅäÖòÎÊý
GPIO_SetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6); //³õʼ»¯LCD_CS--PA.3ƬѡʧЧ
delay_init(72); //ÑÓʱº¯Êý³õʼ»¯
SendCmd(0x0); //¹Ø±ÕϵͳÕñµ´Æ÷ºÍLCDÇý¶¯
delay_us(10);
SendCmd(0x52); //¹Ø±ÕϵͳÕñµ´Æ÷ºÍLCDÇý¶¯
delay_us(10);
SendCmd(0x02); //´ò¿ªÏµÍ³Õñµ´Æ÷
delay_us(10);
SendCmd(0x04); //¹Ø±ÕLCDÏÔʾ
delay_us(10);
SendCmd(0x06); //´ò¿ªLCDÏÔʾ
delay_us(10);
}
#if 1
void SendBit_1621(u8 data,u8 cnt)
{
u8 i;
for(i =0; i <cnt; i ++)
{
if((data&0x80)==0) LCD_DA=0;
else LCD_DA=1;
LCD_WR=0;
delay_us(10);
LCD_WR=1;
data<<=1;
delay_us(10);
}
}
void SendDataBit_1621(u8 data,u8 cnt)
{
u8 i;
for(i =0; i <cnt; i ++)
{
if((data&0x01)==0) LCD_DA=0;
else LCD_DA=1;
LCD_WR=0;
delay_us(10);;
LCD_WR=1;
data>>=1;
delay_us(10);
}
}
void SendCmd(u8 command)
{
LCD_CS=0;
delay_us(10);
SendBit_1621(0x80,4);
SendBit_1621(command,8);
delay_us(10);
LCD_CS=1;
}
void Write_1621(u8 addr,u8 data)
{
LCD_CS=0;
delay_us(10);
SendBit_1621(0xa0,3);
SendBit_1621(addr,6);
SendDataBit_1621(data,4);
delay_us(10);
LCD_CS=1;
}
void WriteAll_1621(u8 addr,u8 data)
{
u8 i;
LCD_CS=0;
delay_us(10);
SendBit_1621(0xa0,3);
SendBit_1621(addr,6);
for(i =0; i <32; i ++)
{
SendDataBit_1621(data,8);
}
delay_us(10);
LCD_CS=1;
}
#endif
|