大家好,欢迎来到IT知识分享网。
一、LCD12864简介
- LCD12864液晶显示,也就是屏幕上总共有128*64 ,个点,每个点就只有两种状态亮和不亮
- 我这里使用的就是带字库的,直接可以显示中文,不需要自己去编码,发送数据使用8位并行模式。
- 我这里不介绍怎么显示图片,不介绍指令,知识快速入门得到显示结果
二、引脚介绍
1.一共有20个引脚,重要的只有那么几个
- 3~VO就是调节对比度的,相当于调节每个点显示出来的深浅,虽然只有亮与不亮两种选择,但亮的模式下相当于可以调节每个点到底多亮
- 4~RS,为1的时候表示发送的发送的数据,为0表示发送命令
- 5~RW,就是控制我们是往LCD12864读数据(1)还是写数据(0),我们要控制LCD,当然是往里面写数据(0)
- 6~E,使能信号
- 17~RST复位脚
- 接下来的DB0~DB7就是用来传输我们的数据,一个字节八个位刚好
2.官方的引脚图
三、时序图
LCD12864和LCD1602的简直一模一样
四、初始化LCD的代码
1.两个最重要的函数
/ruby 值得注意的是: (1).这两个函数(向LCD写入命令和向LCD写入数据)能够写好正常 整个LCD的初始化代码基本上就写好一大半了,因为后面所有的函数都是不断调用这两个函数 (2).这两个函数可以根据自己的需求合并成一个,两个函数就一个地方不一样CD12864_RS = 0/1 (3).这是根据上面时序图写出来的,和LCD1602的代码也简直一模一样 只需要稍微改变一下,延时函数我也没显示出来,根据自己开发平台来自己写 */ //向12864中写入数据 void LCD12864_Write_Data(unsigned char dat) { LCD12864_E = 0; LCD12864_WR = 0;//选择写模式 LCD12864_RS = 1;//选择数据模式 //延时 delay_10us(1); //将数据准备 LCD12864_Data = dat; delay_10us(1); LCD12864_E = 1;//表示开始写入数据,上升沿写入数据 delay_10us(20); //延时等待数据全部发送完成 } //向12864中写入命令 void LCD12864_Write_Com(unsigned char com) { //首先我们设置片选信号 LCD12864_E = 0;//片选信号一般设置为0表示片选 LCD12864_WR = 0;//选择写模式 LCD12864_RS = 0;//选择命令模式 //延时 delay_10us(1); //将数据准备 LCD12864_Data = com; delay_10us(1); LCD12864_E = 1;//表示开始写入数据,上升沿写入数据 delay_10us(20); }
2.初始化函数
/ 注意: (1).这些指令具体代表什么暂时不用管,如果你想快速看到你的LCD效果 你有时间再去研究,这些指令基本就是一些约束校准的工作 */ //对LCD12864进行初始化 void LCD12864_Init() { //首先对LCD进行复位 LCD12864_REST = 0; delay_ms(30); LCD12864_REST = 1; delay_ms(20); /* 开始初始化的步骤 */ LCD12864_Write_Com(0x30); LCD12864_Write_Com(0x08); LCD12864_Write_Com(0x01); LCD12864_Write_Com(0x06); LCD12864_Write_Com(0x0c); }
3.基本刷屏函数
/* 1.总共分为上下两个屏幕,其中第0->31行和第32->63行的行地址相同 (上 0->31)第一个屏幕的首地址(0x80,0x80) -> ... -> (0x80,0x87) .... (0xa0,0x80) -> ... -> (0xa0,0x87) (下 32->63)第二个屏幕的首地址(0x80,0x88) -> ... -> (0x80,0x90) ... (0xa0,0x88) -> ... -> (0xa0,0x90) 2.每个地址就是控制 一行16个小点,发送两次数据分别控制前8点和后8个点, 例写入的0 0来控制屏幕的点 , 1显示 0不显示 3.先写入行地址,后写入列地址,连续写列地址会自动增加 */ //进行清屏操作 LCD12864_Clear_Screen(0xFF)全亮 //LCD12864_Clear_Screen(0xFF)全灭 void LCD12864_Clear_Screen(unsigned char value) { unsigned char i,j; LCD12864_Write_Com(0x34); LCD12864_Write_Com(0x36); for(i=0;i<64;i++){ if(i<32){ LCD12864_Write_Com(0x80+i); LCD12864_Write_Com(0x80); }else { LCD12864_Write_Com(0x80+(i-32)); LCD12864_Write_Com(0x88); } for(j=0;j<16;j++) LCD12864_Write_Data(value); } }
4.显示中英文字符函数
//显示非中文字符 和 中文字符都差不多,因为自带汉字库,只是注意写汉字的时候要连续写! // 注意这里的坐标变了,一定要注意!!! /* 实际坐标: 0x80 -> 0x87 0x90 -> 0x97 0x88 -> 0x8f 0x98 -> 0x9f //这个坐标我们自己规定的,再换算成上面的实际坐标就可以了 指出坐标(1,1) -> (1,8) (4,1) -> (4,8) 再指出需要显示的字符 */ unsigned char addresses[] = {0x80,0x90,0x88,0x98}; void LCD12864_Display_Char(unsigned char x,unsigned char y,unsigned char dat){ LCD12864_Write_Com(0x30); LCD12864_Write_Com(0x06); //写入地址 LCD12864_Write_Com(addresses[x-1]+(y-1)); //写入数据 LCD12864_Write_Data(dat); } //显示汉字 void LCD12864_Display_Chars(unsigned char x,unsigned char y,unsigned char *dat){ LCD12864_Write_Com(0x30); LCD12864_Write_Com(0x06); //写入地址 LCD12864_Write_Com(addresses[x-1]+(y-1)); //写入数据 while(*dat != '\0'){ LCD12864_Write_Data(*dat); dat++; } }
5.主函数调用一下
void main(){ unsigned char *datas ="LCD液晶显示"; //液晶初始化 LCD12864_Init(); LCD12864_Clear_Screen(0x00); //清屏 while(1){ LCD12864_Display_Char(1,2,'A'); LCD12864_Display_Chars(2,1,datas); } }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/130996.html