1、12864LCD串行控制C程序 下面是一个最简单的12864液晶串行控制程序,没什么花样,只是想帮助大家学习掌握控制一个串行的12864液晶的基本原理。无论是12864的并行操作还是串行操作,12864液晶与12232液晶的操作时序几乎完全一样,打家学习的时候可以参考一下12232的时序图(方便理解),郭天祥的51单片机C语言教程156页中就讲到了12232液晶的使用例程。1、 时序图1、12232时序图2、12864时序图二、液晶引脚对应图三、12864液晶与单片机接口(程序中PSB没接,RST接高电平,NC悬空)四、程序:#include#define uint unsigned int
2、#define uchar unsigned charsbit CS=P26;/片选信号线,接12864的RS端sbit SID=P25;/串行数据线,接12864的RW端sbit SCLK=P27;/串行时钟信号线,接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);/声明延时
3、函数/液晶初始化函数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
4、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_data&0x80); SCLK=1;SCLK=0;i_data=i_data1; i_data=com;i_data&=0xf0;for(i=0;i8;i+)/写入命令的高四位 SID=(bit)(i_data&0x80);/取得命令的最高位给液晶串行总线 SCLK=1
5、; SCLK=0;/每写一位SCLK都要有一个下降沿(时序要求)i_data=i_data1; /命令字节左移一位(取命令的次高位给液晶串行总线)i_data=com;i_data=4;/命令字节左移4位,即把低四位移到高四位for(i=0;i8;i+)/写入命令的低四位 SID=(bit)(i_data&0x80);/取得命令字节移位后的最高位给液晶串行总线 SCLK=1;SCLK=0;i_data=i_data1; /移位后命令字节左移一位(每一次移位前的次高位给液晶串行总线)CS=0; /写入命令控制字节后令片选信号CS为0delayms(10);/向12864写入数据函数void wr
6、ite_date(uchar dat) uchar i;/第三个为由数据低四位左移四位后低四位补零构成的字节uchar i_data;i_data=0xfa;/(数据控制字节为0xfa)CS=1;SCLK=0;for(i=0;i8;i+)/写入数据控制字节 SID=(bit)(i_data&0x80);/取得数据控制字节的最高位给液晶串行总线 SCLK=1;SCLK=0;/每写一位SCLK都要有一个下降沿(时序要求)i_data=i_data1;/数据控制字节左移一位(取命令控制字节的次高位给液晶串行总线) i_data=dat;i_data&=0xf0;/取数据字节的高四位for(i=0;i
7、8;i+)/写入数据的高四位 SID=(bit)(i_data&0x80);/(以下跟写入命令函数的注释同理) SCLK=1;SCLK=0;i_data=i_data1;i_data=dat;i_data=4;for(i=0;i8;i+)/写入数据的低四位 SID=(bit)(i_data&0x80); SCLK=1;SCLK=0;i_data=i_data0;j-) for(i=110;i0;i-);/主函数void main() uchar b;/定义计算写入显示内容数量的变量 lcd_init();/初始化液晶 write_com(0x90);/写入显示位置 for(b=0;b12;b+) /b要12是因为要显示6个中文 write_date(wordb); /写入要显示的内容 while(1);