12864点阵液晶显示模块(LCM)就是由 128*64个液晶显示点组成的一个128列*64行的阵列。每个显示点对应一位二进制数,1表示亮,0表示灭。存储这些点阵信息的RAM称为显示数据存 储器。要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。图形或汉字的点阵信息当然由自己设计,问题的关键就是显示点在液晶屏上的位置 (行和列)与其在存储器中的地址之间的关系。

由于多数液晶显示模块的驱动电路是由一片行驱动器和两 片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits显示数据RAM。左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。(少数厂商为了简化用户设计,在模块中增加译码电路,使得 128*64液晶屏就是一个整屏,只需一个片选信号。)

显示点在64*64液晶屏上的位置由行号 (line,0~63)与列号(column,0~63)确定。512*8 bits RAM中某个存储单元的地址由页地址(Xpage,0~7)和列地址(Yaddress,0~63)确定。每个存储单元存储8个液晶点的显示信息。

为了使液晶点位置信息与存储地址的对应关系更直观关, 将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*64列个点阵。每列中的8行点阵信息构成一个8bits二进制数,存储在一个存储单元中。 (需要注意:二进制的高低有效位顺序与行号对应关系因不同商家而不同)存放一个显示块的RAM区称为存储页。即64*64液晶屏的点阵信息存储在8个存储 页中,每页64个字节,每个字节存储一列(8行)点阵信息。因此存储单元地址包括页地址(Xpage,0~7)和列地址(Yaddress,0~63)。

例如点亮128*64的屏中(20,30)位置上的液 晶点,因列地址30小于64,该点在左半屏第29列,所以CS1有效;行地址20除以8取整得2,取余得4,该点在RAM中页地址为2,在字节中的序号为 4;所以将二进制数据00010000(也可能是00001000,高低顺序取决于制造商)写入Xpage=2,Yaddress=29的存储单元中即点 亮(20,30)上的液晶点。

/LCD12864液晶屏测试程序(已通过)//
液晶屏型号:HJ12864M-1//
///#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int  //8bit数据接入IO口
#define Part P0    //P0接8位数据线
//控制数据端
sbit LCD_RS=P2^5;  //定义12864液晶RS端,寄存器选择信号 H:数据寄存器 L:指令寄存器
sbit LCD_RW=P2^6;  //定义12864液晶RW端,读/写信号  H:读   L:写
sbit LCD_EN=P2^7;  //定义12864液晶LCDEN端, 片选信号  下降沿触发,锁存数据
//
sbit LCD_PSB=P3^2;  //定义12864液晶PSB端, H:并行 L:串行
sbit LCD_RST=P3^4;  //定义12864液晶RST端, H:不复位  L:复位
uchar code dis1[]={"床前明月光"};
uchar code dis2[]={"疑是地上霜"};
uchar code dis3[]={"举头望明月"};
uchar code dis4[]={"低头思故乡"};
//=====================================
//毫秒延时函数
void delay(uint xms)
{  uint i,j;  for(j=0;i<xms;j++)  for(i=0;i<110;i++);
}
//====================================
//LCD忙检测函数
bit lcd_busy()
{  bit result;  LCD_RS=0;    LCD_RW=1;  LCD_EN= 1;  result=(bit)(Part & 0x80);  LCD_EN=0;  return result;
}
//=====================================
//液晶写命令函数
void lcd_write_cmd(uchar com)
{  while(lcd_busy());  LCD_RS=0;  //选择指令寄存器  LCD_RW=0;  //写  LCD_EN=0;    Part=com;    //指令值赋给P0口  delay(5);  LCD_EN=1;  delay(5);  LCD_EN=0;
}
//=====================================
//液晶写一个字符数据函数
void lcd_write_dat(uchar date)
{  while(lcd_busy());  LCD_RS=1;  //选择数据寄存器  LCD_RW=0;  //写  LCD_EN=0;  P0=date;    //数据值赋给P0口  delay(5);  LCD_EN=1;  delay(5);  LCD_EN=0;
}
//=====================================
//液晶写一个字符串函数
void lcd_write_string(uchar *str)
{  while(*str!='\0')  //未结束  {  lcd_write_dat(*str++);  delay(5);  }
}
//=====================================
//液晶显示位置函数
void lcd_pos(uchar x,uchar y)  //从第X行的第Y位置开始显示
{  uchar pos;  if(x==1)        //第一行  { x=0x80;}  else if(x==2)  //第二行  { x=0x90;}  else if(x==3)  //第三行  { x=0x88;}  else if(x==4)  //第四行  { x=0x98;}  pos=x+y-1;     //首地址为0X80  lcd_write_cmd(pos);
}
//=====================================
//液晶初始化函数
void lcd_init()
{  LCD_PSB=1;  //并行方式  LCD_RST=1;  //不复位  lcd_write_cmd(0x30);  delay(5);  lcd_write_cmd(0x0c);  //开显示,不显示光标  delay(5);  lcd_write_cmd(0x06);  //写一个字符后地址指针自动加1  delay(5);  lcd_write_cmd(0x01);   //清屏  delay(5);
}
//=====================================
//主函数函数
void main()
{
// uchar i;  lcd_init();  while(1)  {  lcd_pos(1,1);  // lcd_write_string(dis1);  lcd_write_string("床前明月光");  delay(5);  lcd_pos(2,1);  // lcd_write_string(dis2);  lcd_write_string("疑是地上霜");  delay(5);  lcd_pos(3,1);  // lcd_write_string(dis3);  lcd_write_string("举头望明月");  delay(5);  lcd_pos(4,1);  // lcd_write_string(dis4);  lcd_write_string("低头思故乡");  delay(500);  }
}

转载于:https://www.cnblogs.com/alanfeng/p/4832468.html

12864点阵液晶显示模块的原理和实例程序(HJ12864M-1)相关推荐

  1. 12864点阵液晶显示模块的原理

    12864点阵液晶显示模块的原理 12864点阵液晶显示模块(LCM)就是由128*64个液晶显示点组成的一个128列*64行的阵列. 每个显示点对应一位二进制数,1表示亮,0表示灭.存储这些点阵信息 ...

  2. TFT型液晶显示模块能够依据不同的需求分为几类?

    一,依据显现内容: TFT型液晶显示模块能够分为三品种型的LCD模块:笔段型.字符型.图形点型. 1.笔画段类型TFT型液晶显示模块主要显现7个笔画段的数字8字符和固定图标. 优点:LCD控制驱动与单 ...

  3. LCM液晶显示模组是什么,液晶显示模块有几种类型呢

    液晶显示屏以其微功耗.体积小.显示内容丰富.薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用.接下来,深圳兴宇合技术人员给网友们介绍一下LCM液晶显示模组是什么东西,液晶显示模块有 ...

  4. 液晶显示模块(LCM)介绍

    液晶显示模块是一种将液晶显示器件.连接件.集成电路.PCB线路板.背光源.结构件装配在一起的组件.英文名称叫"LCD Module",简称"LCM",中文一般称 ...

  5. alientek ministm32液晶显示程序_佳显12864中文字库液晶专业生产液晶显示模块

    GDRAM:(Graphic Display RAM):图形显示RAM,这一块区域用于绘图,往里面写啥,屏幕就会显示啥,它与DDRAM的区别在于,往DDRAM中写的数据是字符的编码,字符的显示先是在C ...

  6. 如何为编程爱好者设计一款好玩的智能硬件(九)——LCD1602点阵字符型液晶显示模块驱动封装(下)...

    六.温湿度传感器DHT11驱动封装(下):如何为编程爱好者设计一款好玩的智能硬件(六)--初尝试·把温湿度给收集了(下)! 七.点阵字符型液晶显示模块LCD1602驱动封装(上):如何为编程爱好者设计 ...

  7. 点阵LCD的显示原理

    点阵LCD的显示原理 在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果.对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可.而对于中文,常 ...

  8. 点阵LCD12864的显示原理(不带字库)

    点阵LCD12864的显示原理(不带字库) 在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果.对于显示英文操作,由于英文字母种类很少,只需要8位(一字节 ...

  9. 单片机入门教程:第七章 1602LCD液晶显示模块

    在单片机的人机交互系统中,常常需要显示系统运行中的某些信息和数据,例如,字符.汉字或者图形等.液晶显示器(LCD)正好可以完成此项任务,它是一种功耗很低的显示器,在电子表.计算器.数码相机.计算机的显 ...

最新文章

  1. 零基础学Java程序有什么好的建议
  2. JAVA SE学习day16:reflect
  3. python怎么实现音乐快进,python将音频进行变速的操作方法
  4. MySQL - 剖析MySQL索引底层数据结构
  5. 只允许运行一个实例的方法
  6. html 无效源,IE bug无效源HTML5音频 - 解决方法
  7. 理解T-SQL: 脚本和批处理
  8. 在Airtest中如何使用无线模式控制手机
  9. mysql 更改一行_mysql怎么修改数据表里一行数据?
  10. git commit报错(husky > commit-msg hook failed)
  11. 2个相同的 stm32 can通讯不成功_STM32芯片的几种烧写方式简介
  12. Groovy模板引擎
  13. Docker概述 官方文档 Google翻译
  14. python 输出语句
  15. 技术公众号怎样运营?
  16. 样条函数--spline
  17. python使用requests库爬取淘宝评论
  18. 电影评论分类:二分类问题(IMDB数据集)
  19. 12306网站专家:拟采取办法应对抢票软件
  20. 最新AI产品经理求职动态:卡年龄、卡学历,这么卷,怎么办?

热门文章

  1. 蛋花花:人工智能对于绿色发展的意义
  2. vue3.2使用vue-wechat-title及路由导航守卫实现浏览器动态标题、替换浏览器的vue小图标
  3. 一本能改变你人生的好书 - 《富爸爸 - 商学院》
  4. win7 linux error15,Win7开机黑屏error 15:file not found如何解决?
  5. aptana php 插件,Eclipse新插件为Java,PHP 和Rails增加Aptana云计算
  6. SNS平台ConcourseConnect
  7. 交通物流模型 | Python实现基于张量分解的交通流量时空模式挖掘(出租车车载GPS数据、公交卡刷卡数据、POI的分布数据)
  8. php正则匹配sg-nc-wap_Pandas基础操作(上)
  9. Flash 特效原理:震动效果
  10. coreldraw铺花纹_coreldraw中制作环形花边教程