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

发布者:beup001最新更新时间:2016-12-29 来源: eefocus关键字:点阵液晶  显示模块  HJ12864M-1 手机看文章 扫描二维码
随时随地手机看文章

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  

#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

  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);  

 }  

}  


关键字:点阵液晶  显示模块  HJ12864M-1 引用地址:12864点阵液晶显示模块的原理和实例程序(HJ12864M-1)

上一篇:51隐藏的初始化程序
下一篇:单片机练习 - 模拟电话键盘

推荐阅读最新更新时间:2024-03-16 15:27

[C51代码]LCD12864驱动[待续][左右屏]
型号:HY-12864 驱动器:HD61202 DDRAM地址表 /CS1=0 /CS2=0 Y= 0 1 62 63 0 1 62 63 行号 DB0 DB0 DB0 DBO DBO DBO DBO DBO DBO DBO 0
[单片机]
STC89C52R并行驱动LCD12864(asm/c51)
/*已实验论证 AT89C52与LCD12864 未用BF(忙信号)查询,延时1ms 不能进行BF查询*/ rs bit p2.4 rw bit p2.5 e bit p2.6 psb bit p2.1 res bit p2.3 com equ 30h date equ 31h org 0000h sjmp main org 0030h main:mov p0,#00h mov p2,#10000111b lcall delay setb res mov sp,#60h lcall init lcall page1 clr p1.7 sjmp $ init:mov com,#00110000b;基本
[单片机]
STC89C52R并行驱动LCD<font color='red'>12864</font>(asm/c51)
单片机--数码管显示模块(C51)
下面是51单片机数码管显示模块的代码,具体说明在注释里表达得比较清楚。 #include reg52.h #define uchar unsigned char #defind uint unsigned int sbit seg_oe=P1^3; //数码管显示使能端,低电平有效 sbit duanxuan=P1^4; //数码管的段选端 sbit weixuan=P1^5; //数码管的位选端 uchar code smg_duan ={ //数码管段选码表,我们的数码管是共阴极数码管 0x3F,0x06,0x5B,0x4F, 0x66,0x6d,0x7d,0x07, 0x7
[单片机]
单片机驱动ds18b20用12864液晶显示温度程序
全部完整的源代码下载: http://www.51hei.com/bbs/dpj-20391-1.html 下面是ds18b20.h文件:/*------------------------------------ 名称:ds18b20驱动及其显示模块 编写:YuMin_Dong 时间:2013.01.21 ------------------------------------*/ #ifndef _DS18B20_H_ #define _DS18B20_H_ /*------------------------------------ 位定义 ---------------------------------
[单片机]
单片机驱动ds18b20用<font color='red'>12864</font><font color='red'>液晶</font><font color='red'>显示</font>温度程序
TEC9503AM/FM接收频率显示模块及应用
    摘要: TEC9503是专门为显示音响设备功能状态而设计的专用集成电路,可提供多种状态显示。文中介绍了TEC9503收音机AM/FM三位半接收频率显示模块的功能和特点,并给出了TEC9503的实际应用电路。     关键词: AM  FM  本机振荡  IF中频  LCD显示  TEC9503 1 模块简介 TEC9503电路是专为显示音响设备各功能状态而设计的专用集成电路模块,具有三位半LCD数据显示功能,可对音响集成子系统中的AM/FM频段的状态控制信息进行显示,并可供全球不同国家和地区在AM中频标准中使用,适用于全球AM/FM妆收发送标准模块。TEC9503能直接接收FM频率状态
[电源管理]
简单菜单系统 Proteus pg12864 液晶
Mega16单片机 程序 interface.h /* 移植时要实现以下函数: LcdClrScrn(); //清屏 ShowARROW(SysSclt); //在某一行显示箭头 DisShowARROW(SysSclt); //在某一行不显示箭头 ShowLine(0, Copy Right ); //在某一行显示字符串 uchar GetKey(); //按键检测函数。 返回Key_Up Key_Down Key_Right Key_Left */ #ifndef __INTERFACE_H__ #define __INTERFACE_H__ #include K
[单片机]
简单菜单系统 Proteus pg<font color='red'>12864</font> <font color='red'>液晶</font>
51单片机+带字库液晶12864+DS1302数字时钟C源程序
经过两天的搜索与调试,在别人程序的基础上,不断修改,终于调试成功了这个程序。 目前还不能修改时间与日期,只是以预定时间以始。 适用于开发板:51单片机(AT89S52)+带字库液晶12864(ST7920)+DS1302(实时时钟) 实现功能:简单,数字时钟+日期(以后会不断完美)。 C语言源程序如下: #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int /*DS1302 端口设置 */ sbit SCK=P3^6; //DS1302时钟 sbit SDA=P3^4; //DS1
[单片机]
P80C592芯片在基于CAN总线显示通讯模块中应用
1 P80C592芯片简介 P80C592是PHILIPS公司采用先进的COMS工艺制造的高性能8位单片机。该单片机的指令集与80C51 完全兼容,但在80C51标准特性的基础上又增加了一些对于应用具有重要作用的硬件功能。P80C592是P8XC592的无片内ROM版本,是现有P8XC522和Philips CAN控制器PCA82C200功能相结合的产物。该器件具有下列特性: ●带有80C51中心处理单元(CPU); ●带2 256 B的片内RAM,外部可扩展至64kB; ●具有两个标准的16位定时器/计数器; ●新增一个包括四个捕捉和三个比较寄存器的16位定时器/计数器; ●具有8路模拟量输进的10位A
[单片机]
P80C592芯片在基于CAN总线<font color='red'>显示</font>通讯<font color='red'>模块</font>中应用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved