[mw_shl_code=cpp,true]//模拟串口发送一字节数据给LCD
void sendData(u8 data)
{
u8 i;
for(i=0;i<8;i++)
{
CLK_LOW();
if((data&(0x80>>i))==0)
SID_LOW();
else
SID_HIGH();
CLK_HIGH();
DelayMs(1);
CLK_LOW();
}
}
//写命令
void writeCmd(u8 cmd)
{
CS_HIGH();
sendData(CMD);
sendData(cmd&0xF0);
sendData((cmd<<4)&0xF0);
CS_LOW();
}
//写数据
void writeData(u8 data)
{
CS_HIGH();
sendData(DATA);
sendData(data&0xF0);
sendData((data<<4)&0xF0);
CS_LOW();
}
//初始化LCD
void Lcd12864_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin=CSPin|SIDPin|CLKPin;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStruct);
CS_LOW();
CLK_LOW();
writeCmd(0x30);
DelayMs(10);
writeCmd(0x0c);
DelayMs(10);
writeCmd(0x01);
DelayMs(10);
writeCmd(0x02);
DelayMs(10);
}
//显示字符串
void Lcd12864_DisplayString(u8 line,u8 * string)
{
u8 addr, i;
switch (line)
{
case 1:
addr=0x80;
break;
case 2:
addr=0x90;
break;
case 3:
addr=0x88;
break;
case 4:
addr=0x98;
break;
}
writeCmd(addr);
DelayMs(10);
for(i=0;i<16;i++)
{
writeData(string);
DelayMs(3);
}
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>