12864LCD串行操作C程序.docx
文本预览下载声明
.
12864LCD串行控制 C程序
下面是一个最简单的 12864 液晶串行控制程序, 没什么花样,只是想帮助大家学习掌握控制一个串行的 12864 液晶的基本原理。
无论是 12864 的并行操作还是串行操作, 12864 液晶与 12232 液晶的操作时序几乎完全一样,打家学习的时候可以参考一下 12232 的时序图(方便理解),郭天祥的《 51 单片机 C语言教程》 156 页中就讲到了 12232 液晶的使用例程。
一、时序图
1、 12232 时序图
2、12864 时序图
..
.
二、液晶引脚对应图
三、 12864 液晶与单片机接口(程序中 PSB 没接, RST接高
电平, NC悬空)
..
.
四、程序:
#includereg52.h
#define uint unsigned int
#define uchar unsigned char
sbit CS=P2^6;// 片选信号线,接 12864 的 RS 端
sbit SID=P2^5;// 串行数据线,接 12864 的 RW 端
sbit SCLK=P2^7;// 串行时钟信号线,接 12864 的 EN 端
//uchar a;
uchar code word[]={ 我好喜欢你啊 };//12864LCD 显示内容
//函数声明
void lcd_init();// 声明液晶初始化函数
void write_com(uchar com);// 声明 写入命令控制字节 函数
void write_date(uchar dat);// 声明 写入数据控制字节 函数
void delayms(uint x);// 声明延时函数
//液晶初始化函数
void lcd_init()
{
delayms(10);
write_com(0x30);// 基本指令操作
write_com(0x0c); // 显示开,关光标
write_com(0x10);// 设置地址计数器 AC 为 00H,并将游标移到开头原点位置 write_com(0x06);// 游标及显示右移一位
write_com(0x01);// 清除液晶显示内容
}
//向 12864 写入命令函数
/* 串行数据由三个字节构成,第一个为命令控制字节,
第二个为由命令字节高四位低四位补零构成的字节,
第三个为由命令字节低四位左移四位低四位补零后构成的字节
*/
void write_com(uchar com)
{
uchar i;
uchar i_data;
i_data=0xf8;//0xf8 是命令控制字节,它比表示写入的内容 com 是一个命令
CS=1;// 写入之前令片选信号 CS 为 1(这是时序要求的) SCLK=0;// 写入之前令时钟信号 CLK 为 1(这也是时序要求的) for(i=0;i8;i++)// 写入命令控制字节
{
..
.
SID=(bit)(i_data0x80);
SCLK=1;
SCLK=0;
i_data=i_data1;
}
i_data=com;
i_data=0xf0;
for(i=0;i8;i++)// 写入命令的高四位
{
SID=(bit)(i_data0x80);// 取得命令的最高位给液晶串行总线
SCLK=1;
SCLK=0; //每写一位 SCLK 都要有一个下降沿(时序要求)
i_data=i_data1; // 命令字节左移一位(取命令的次高位给液晶串行总线)
}
i_data=com;
i_data=4;// 命令字节左移 4 位,即把低四位移到高四位
for(i=0;i8;i++)// 写入命令的低四位
{
SID=(bit)(i_data0x80);// 取得命令字节移位后的最高位给液晶串行总线
SCLK=1;
SCLK=0;
i_data=i_data1; // 移位后命令字节左移一位(每一次移位前的次高位给液晶串行
总线)
}
CS=0; //写入命令控制字节后令片选信号 CS 为 0
delayms(10);
}
//向 12864 写入数据函数
void write_date(uchar dat)
{
uchar i;// 第三个为由数据低四位左移四位后低四位补零构成的字节 uchar i_data;
i_data=0xfa;// (数据控制字节为 0xfa )
CS=1;
SCLK=0;
for(i=0;i8;i++)// 写入数据控制字节
{
SID=(bit)(i_data0x80);// 取得数据控制字节的最高位给液晶串行总线 SCLK=1;
..
.
SCLK=0;// 每写一位 SCLK 都要有一个下降沿(时序要求)
i_data=i_data1;// 数据控制字节左移一位 (取命令
显示全部