您的位置:首页 > 健康 > 美食 > Arduino 2线串行 通信 驱动 LCD 12864

Arduino 2线串行 通信 驱动 LCD 12864

2024/12/23 15:36:26 来源:https://blog.csdn.net/avanyway/article/details/142183861  浏览:    关键词:Arduino 2线串行 通信 驱动 LCD 12864
 上效果图片

 

源代码 Arduino 328p
/****************************************************************** 2线 LCD 12864  (屏幕主控芯片 ST7920)******************************************************************//***********************端口/引脚定义区域************************/
#define LCDCS           2//LCD12864片选端口(原RS)/片选可直接VCC
#define LCDDIO          3//LCD12864串行数据输入/输出(原RW)
#define LCDCLK          4//LCD12864串行时钟(原EN)
#define LCDPSB          5//LCD12864串/并行数据选择端口/串行可直接接地
/*************************函数声明区域***************************/
/****************************************************************/
//初始化液晶模块函数LCD12864_init(),无形参和返回值
/****************************************************************/
void LCD12864_init()
{  //LCDPSB=0;//选择串行模式将PSB置“0”或直接接地digitalWrite(LCDPSB, LOW);//LCDCS=1;//片选12864digitalWrite(LCDCS, HIGH);delay(10);//延时等待稳定LCD12864_Write(0x30,0);//选择基本指令集   LCD12864_Write(0x0C,0);//开显示,无游标,不反白LCD12864_Write(0x01,0);//清除显示屏幕,把DDRAM位址计数器调整为00H
}
/****************************************************************/
//逐位写入串行数据函数LCD12864_SBYTE(),有形参byte,无返回值
/****************************************************************/
void LCD12864_SBYTE(unsigned char byte)
{  u8 i;  for(i=0;i<8;i++)//一个字节由8位组成故而循环8次写入  {  //LCDCLK = 0;//拉低时钟线digitalWrite(LCDCLK, LOW); if((byte<<i)&0x80)//取位操作//LCDDIO=1;//写入数据‘1’ digitalWrite(LCDDIO, HIGH);    else  // LCDDIO=0;//写入数据'0'digitalWrite(LCDDIO, LOW);  //LCDCLK = 1;//拉高时钟线 digitalWrite(LCDCLK, HIGH); }   
}
/****************************************************************/
//命令或数据写入函数LCD12864_Write(),有形参cmdordata和writetype
//cmdordata是欲写入数据,writetype是写入类型,无返回值
/****************************************************************/
void LCD12864_Write(unsigned char cmdordata,int writetype)
{if(writetype==0)//判断写入类型LCD12864_SBYTE(0xF8); //“1111 1000”表示写入命令信息elseLCD12864_SBYTE(0xFA);//“1111 1010”表示写入数据信息 LCD12864_SBYTE(0xF0&cmdordata);//取高四位传送LCD12864_SBYTE(0xF0&(cmdordata<<4));//取低四位传送 
}
/****************************************************************/
//字符串显示函数Display12864(),有形参row,col,*string,row表示行
//col表示列,字符指针string指向字符串数据,无返回值
/****************************************************************/
void Display12864(unsigned char row,unsigned char col,unsigned char *string)
{switch(row)//行变量判断{case 1:row=0x80;break;//第一行DDRAM首地址为0x80case 2:row=0x90;break;//第二行DDRAM首地址为0x90case 3:row=0x88;break;//第三行DDRAM首地址为0x88case 4:row=0x98;break;//第四行DDRAM首地址为0x98default:break;}LCD12864_Write(row+col,0);//写入行列地址while(*string!='\0')//输出字符串直到结束标志‘|0’{LCD12864_Write(*string,1);//写入字符数据string++;//指针后移}
}
/****************************************************************/void LCD12864_init();//12864初始化函数声明
void LCD12864_SBYTE(unsigned char byte);//逐位写入串行数据函数声明
void LCD12864_Write(unsigned char cmdordata,unsigned char writetype);//写入液晶模组命令或数据函数声明
void Display12864(unsigned char row, unsigned char col,unsigned char *string);//显示字符串函数声明/**************************主函数区域****************************/
void setup() {// put your setup code here, to run once:pinMode(2, OUTPUT);pinMode(3, OUTPUT);pinMode(4, OUTPUT);pinMode(5, OUTPUT);LCD12864_init();      //初始化12864液晶Display12864(1,0,"===Arduion===");//显示第一行数据Display12864(2,0,"=======OK=======");//显示第二行数据Display12864(3,0,"12864ABCD");//显示第三行数据Display12864(4,0,"20240912");//显示第四行数据}void loop() {// put your main code here, to run repeatedly:}

接口定义

时序介绍
指令表

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com