百度了好长时间都没有找到带字库的12864使用串口如何接线,后来参阅了一下12864的产品说明,终于摸索出来了,本人是刚入门单片机,还有好多的不懂的,我把接线的方式还有实例程序分享出来,只要对大家有一丁点的帮助就满足了。首先看引脚定义
RS=CS; R/W=SID; E=CLK; FSB高电平为并行接口,用并口时接高电平,FSB接低电平时为串口,高低电平可以直接接VCC或者GND也可以用软件去控制,实现并口和串口的切换。RET不接线也能使用,用串口时除了DB0--DB7就不再使用外,其他的接口按手册上说明使用。下面是测试代码,也是参阅从51黑电子论坛的不过有些错误无法显示,已经更改。
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit CS=P3^5; //片选信号
sbit SID=P3^6; //数据信号
sbit SCLK=P3^4; //时钟信号
sbit RST=P2^2; //复位信号
sbit CH = P3^7; //并行、串行选择信号
/********************************************************************
* 名称 : delay()
* 功能 : 延时,延时时间为 100us * t。这是通过软件延时,有一定误差。
* 输入 : t
* 输出 : 无
***********************************************************************/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0; i
for(j=0; j<10; j++);
}
/********************************************************************
* 名称 : sendbyte()
* 功能 : 按照液晶的串口通信协议,发送数据
* 输入 : zdata
* 输出 : 无
***********************************************************************/
void sendbyte(unsigned char zdata)
{
unsigned int i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
SID = 1;
}
else
{
SID = 0;
}
SCLK = 0;
SCLK = 1;
}
}
/********************************************************************
* 名称 : write_com()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_com(unsigned char cmdcode)
{
CS = 1;
sendbyte(0xf8);
sendbyte(cmdcode & 0xf0);
sendbyte((cmdcode << 4) & 0xf0);
delay(2);
}
/********************************************************************
* 名称 : write_data()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_data(unsigned char Dispdata)
{
CS = 1;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay(2);
}
/********************************************************************
* 名称 : lcdinit()
* 功能 : 初始化函数
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void lcdinit()
{
RST = 0;
delay(100);
RST = 1;
delay(20000);
write_com(0x30);
delay(50);
write_com(0x0c);
delay(50);
}
/********************************************************************
* 名称 : hzkdis()
* 功能 : 显示字符串
* 输入 : *s
* 输出 : 无
***********************************************************************/
void hzkdis(unsigned char code *s)
{
while(*s > 0)
{
write_data(*s);
s++;
delay(50);
}
}
/********************************************************************
* 名称 : Test()
* 功能 : 显示子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Test()
{
write_com(0x03);
delay(50);
write_com(0x80);
hzkdis("铅酸电池放电仪");
write_com(0x90);
hzkdis("电压");
write_com(0x92);
hzkdis("16.8v 13.2v");
write_com(0x98);
hzkdis(" 电子爱好者");
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main()
{
CH = 0;
delay(1);
lcdinit();
delay(10);
while(1)
{
Test(); a++;
delay(5000);
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』