LCD12864串行与并行的比较分析

来源:互联网 发布:软件测试计划实例 编辑:程序博客网 时间:2024/06/05 11:36

LCD12864的通讯方式是串行、并口可选的,那么这两种有什么区别呢?

1)串行有查忙,需要加延时,否则会出现乱码;并行没有查忙,可以不用延时,但是反应慢。

2)串行速度相对较慢,但是占用的I/O口少;并行相对速度快,但是占用的I/O口多,需要8+3条I/O口。

3)串行CS要特殊处理一下.控制起来比较耗时占用单片机资源多,当然也有些小技巧解决,如在CS拉低以后要重新工作必须执行0x30指令(默认第一次上电是执行基本指令集的,在片选为0,以后再次选中则需要执行这个指令所以我的光标闪烁指令才能生效),以及在使用总线对其进行驱动的时候,并不是每次通信结束后都需要让CS置零。而并口读写快,特别适合图形方式。
因为我偏好用串行的方法,所以我就写出串行的相关功能代码:

/******************************************文件名:LCD12864.c*描述:该程序实现了LCD12864以串行的方式进行通信*创建人:Echo******************************************/#include "LCD12864.h"/*******************************************名称:LCD12864_Send_Byte()*功能:按照液晶的串口通信协议,发送数据*输入:zdata*输出:无*******************************************/void LCD12864_Send_Byte(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;}}/*****************************************名称:LCD12864_Write_Com()*功能:写串口指令*输入:cmdcode*输出:无******************************************/void LCD12864_Write_Com(unsigned char cmdcode){  CS = 1;  LCD12864_Send_Byte(0xf8);  LCD12864_Send_Byte(cmdcode & 0xf0);  LCD12864_Send_Byte((cmdcode << 4) & 0xf0);  delay_us(200);}/******************************************功能:lcdinit()*功能:初始化函数*输入:cmdcode*输出:无*****************************************/void lcdinit(){  RST = 0;  delay_ms(20);  RST = 1;  delay_s(4);  LCD12864_Write_Com(0x30);  delay_ms(10);  LCD12864_Write_Com(0x0c);  delay_ms(10);}/*****************************************名称:LCD12864_Write_Data()*功能:写数据*输入:cmdcode*输出:无******************************************/void LCD12864_Write_Data(unsigned char Dispdata){  CS = 1;  LCD12864_Send_Byte(0xfa);  LCD12864_Send_Byte(Dispdata & 0xf0);  LCD12864_Send_Byte((Dispdata << 4) & 0xf0);  delay_us(200);}/*****************************************名称:LCD12864_Dis_String()*功能:显示字符串*输入:*s*输出:无*****************************************/void LCD12864_Dis_String(unsigned char code *s){  while(*s > 0){  LCD12864_Write_Data(*s);  s++;  delay_ms(10);}}/*******************************************名称:LCD12864_Dis_Err()*功能:显示错误提示*输入:无*输出:无******************************************/void LCD12864_Dis_Err(void){  LCD12864_Write_Com(0x03);  delay_ms(10);  LCD12864_Write_Com(0x81);  LCD12864_Dis_String("Err");}


0 0