求单片机大神指导一下,LCD12864一般不是20个引脚的吗?
我的设备里的是12864液晶屏128X64COG液晶模块,有8个脚,和20个的有什么不一样吗?定义的时候注意些什么?(8个脚是LEDA,VSS,VDD,SI,SCL,AO...
我的设备里的是12864 液晶屏 128X64 COG 液晶模块,有8个脚,和20个的有什么不一样吗?定义的时候注意些什么?(8个脚是 LEDA,VSS,VDD,SI,SCL,AO,RST,CS,不清楚这几个什么意思)求大神讲解
展开
展开全部
LEDA:背光电源正极,负极接VSS(公用接地)
VSS:接地端
VDD:供电端(通常为+5V,也有的为+8V)
SI:串行数据线
SCL:串行时钟线
A0:地址 / 数据选择端(0-写指令或地址;1-写数据)
RST:复位端(一般为低有效,但也有例外)
CS:片选端(芯片使能端,一般为低有效)
操作方法与普通全双工串口一样,但与IIC操作方法不同。
以下驱动仅供参考,(具体得根据你的LCD说明书进行修改):
#include <reg52.h> //52系列头文件
#include <intrins.h> //包含_nop_();函数头文件
sbit CS = P2^3; //片选端,低电平有效
sbit RES = P2^4; //复位端,低电平有效
sbit SI = P2^5; //串行数据线
sbit SCL= P2^6; //串行时钟线
sbit A0 = P2^7; //地址/数据选择端
void DelayNOP() //延时约10us
{
_nop_(); //每个空循环约2.5us
_nop_();
_nop_();
_nop_();
}
void Write_Command(uchar c) //写命令函数(带命令参数)
{
uchar i; //定义循环变量 i
SCLK = 0; //拉低时钟线电平,准备写入
CS = 0; //片选有效
A0 = 0; //选择写指令或地址
DelayNOP(); //稍延时
for(i=0;i<8;i++) //循环8次,串口发送一个字节
{
c<<=1; //指令字节每次左移 1 位,最高位进入CY
SDA = CY; //将CY位的值发送到串行数据线上
SCLK = 1; //拉高时钟线电平,上升沿写入
DelayNOP(); //稍延时
SCLK = 0; //拉低时钟线电平,停止写入
}
DelayNOP(); //稍延时
CS = 1; //关闭片选
}
void Write_Data(uchar d) //写数据函数(带数据参数)
{
uchar i; //循环变量定义
SCLK = 0; //拉低时钟线电平,准备写入
CS = 0; //片选有效
A0 = 1; //选择写数据
DelayNOP(); //稍延时
for(i=0;i<8;i++) //循环8次,串口发送一个字节
{
d<<=1; //数据字节每次左移 1 位,最高位进入CY
SDA = CY; //将CY位的值发送到串行数据线上
SCLK = 1; //拉高时钟线电平,上升沿写入
DelayNOP(); //稍延时
SCLK = 0; //拉低时钟线电平,停止写入
}
DelayNOP(); //稍延时
CS = 1; //关闭片选
}
void Init_LCD() //液晶屏模组初始化函数
{
RES = 0; //复位芯片
DelayMS(10); //延时10ms
RES = 1; //复位完成
Write_Command(0xa2); //写命令:
Write_Command(0xa0); //写命令:
Write_Command(0xc8); //写命令:
Write_Command(0x27); //写命令:
Write_Command(0x81); //写命令:
Write_Command(0x1b); //写命令:
Write_Command(0x2c); //写命令:
Write_Command(0x2e); //写命令:
Write_Command(0x2f); //写命令:
Write_Command(0xa4); //写命令:
Write_Command(0xaf); //写命令:
}
VSS:接地端
VDD:供电端(通常为+5V,也有的为+8V)
SI:串行数据线
SCL:串行时钟线
A0:地址 / 数据选择端(0-写指令或地址;1-写数据)
RST:复位端(一般为低有效,但也有例外)
CS:片选端(芯片使能端,一般为低有效)
操作方法与普通全双工串口一样,但与IIC操作方法不同。
以下驱动仅供参考,(具体得根据你的LCD说明书进行修改):
#include <reg52.h> //52系列头文件
#include <intrins.h> //包含_nop_();函数头文件
sbit CS = P2^3; //片选端,低电平有效
sbit RES = P2^4; //复位端,低电平有效
sbit SI = P2^5; //串行数据线
sbit SCL= P2^6; //串行时钟线
sbit A0 = P2^7; //地址/数据选择端
void DelayNOP() //延时约10us
{
_nop_(); //每个空循环约2.5us
_nop_();
_nop_();
_nop_();
}
void Write_Command(uchar c) //写命令函数(带命令参数)
{
uchar i; //定义循环变量 i
SCLK = 0; //拉低时钟线电平,准备写入
CS = 0; //片选有效
A0 = 0; //选择写指令或地址
DelayNOP(); //稍延时
for(i=0;i<8;i++) //循环8次,串口发送一个字节
{
c<<=1; //指令字节每次左移 1 位,最高位进入CY
SDA = CY; //将CY位的值发送到串行数据线上
SCLK = 1; //拉高时钟线电平,上升沿写入
DelayNOP(); //稍延时
SCLK = 0; //拉低时钟线电平,停止写入
}
DelayNOP(); //稍延时
CS = 1; //关闭片选
}
void Write_Data(uchar d) //写数据函数(带数据参数)
{
uchar i; //循环变量定义
SCLK = 0; //拉低时钟线电平,准备写入
CS = 0; //片选有效
A0 = 1; //选择写数据
DelayNOP(); //稍延时
for(i=0;i<8;i++) //循环8次,串口发送一个字节
{
d<<=1; //数据字节每次左移 1 位,最高位进入CY
SDA = CY; //将CY位的值发送到串行数据线上
SCLK = 1; //拉高时钟线电平,上升沿写入
DelayNOP(); //稍延时
SCLK = 0; //拉低时钟线电平,停止写入
}
DelayNOP(); //稍延时
CS = 1; //关闭片选
}
void Init_LCD() //液晶屏模组初始化函数
{
RES = 0; //复位芯片
DelayMS(10); //延时10ms
RES = 1; //复位完成
Write_Command(0xa2); //写命令:
Write_Command(0xa0); //写命令:
Write_Command(0xc8); //写命令:
Write_Command(0x27); //写命令:
Write_Command(0x81); //写命令:
Write_Command(0x1b); //写命令:
Write_Command(0x2c); //写命令:
Write_Command(0x2e); //写命令:
Write_Command(0x2f); //写命令:
Write_Command(0xa4); //写命令:
Write_Command(0xaf); //写命令:
}
展开全部
12864有两种输入输出方式,一是并行DB0-DB7数据口,一是串行,只需时钟线和数据线,所以引脚就少了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
串行方式,注意时序
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
I2C总线接口方式
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |