某些12864液晶可选串行或并行两种数据传输方式,如常用的ST7920驱动的12864。一般使用并行方式较多,较简单,但有时为了节约IO口选择串行方式,不过其传输速率较慢。
(1)硬件连接电路
(2)串行时序图
(3)底层驱动程序
/****************************************************************
函数名称:Write_Byte
函数功能:串行方式向12864写入一字节数据
入口参数:dat 8bit
出口参数:无
备 注:
*****************************************************************/
void Write_Byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
sclk=0;
DelayUs(1);
if(dat&0x80)
sid=1;
else
sid=0;
sclk=1;
DelayUs(1);
sclk=0;
DelayUs(1);
dat=dat<<1;
}
}
串行数据传送共分三个字节完成:
第一字节 串口控制—格式 11111ABC
A为数据传送方向控制 H表示数据从LCD 到 MCU L表示数据从 MCU到LCD
B为数据类型选择 H表示数据是显示数据 L表示数据是控制指令
C固定为 0
第二字节 (并行)8 位数据的高4 位—格式 DDDD0000
第三字节 (并行)8 位数据的低4 位—格式 0000DDDD
/****************************************************************
函数名称:Write_Com
函数功能:向12864写入命令
入口参数:com
出口参数:无
备 注:
*****************************************************************/
void Write_Com(uchar com)
{
cs=1;
Write_Byte(0xf8); //11111RWRS0 RW=0,RS=0
Write_Byte(com&0xf0); //写入xxxx0000格式
Write_Byte(0xf0&com<<4); //先执行<<,写入0000xxxx格式
cs=0;
}
/****************************************************************
函数名称:Write_Data
函数功能:向12864写入数据
入口参数:dat
出口参数:无
备 注:
*****************************************************************/
void Write_Data(uchar dat)
{
cs=1;
Write_Byte(0xfa); //11111RWRS0 RW=0,RS=1
Write_Byte(dat&0xf0); //写入xxxx0000格式
Write_Byte(0xf0&dat<<4); //先执行<<,写入0000xxxx格式
cs=0;
}
其余驱动程序(包括各存储器的显示)与并行方式相同,参照上一篇文章。
用户679222 2012-6-16 18:22