程琳 开封仪表厂
1. 特点 LCM101为北京卫信杰科技发展有限公司生产的10位多功能8段液晶显示模块,内含看门狗(WDT)/时钟发生器及两种频率的蜂鸣器驱动电路,并有内置显示RAM,可显示任意字段笔划,具有3-4线串行接口,可与任何单片机、IC接口。功耗低,显示状态时电流为2μA(典型值),省电模式时小于1μA,工作电压2.4~3.3V,显示清晰,稳定可靠,使用编程简单。是仪器仪表、电话系列、智能充电器等仪表设备的最佳通用型显示模块。 2. 模块尺寸及引脚说明 LCM101型液晶显示模块的外形尺寸如图1所示。图中数据单位为mm。表1为其引脚说明。
LCM101液晶显示模块的LED背光源驱动由两个发光二极管分别串联100Ω电阻组成的灯式背光来完成。输入电压应在2.5V以上。 3. 基本参数及时序 表2列出了LCM101液晶显示模块的基本参数。图2和图3分别为其读存贮器RAM数据时序和写命令/数据RAM存贮器时的时序。
4. 读/写格式及指令 4.1读格式 只读显示RAM 100 0 A4 A3 A2 A1 A0 共9位 模式 RAM ADDR
4.2 写命令 101 0 C7 C6 C5 C4 C3 C2 C1 C0 共12位 模式 命令代码 4.3写数据 101 0 A4 A3 A2 A1 A0 D0 D1 D2 0 共13位 模式 ADDR DATA 10位显示字符 左起为第1位;右止为第10位 4.4 代码定义 代码定义如表3所列。
5. 编程实例 图4为LCM101与单片机AT89C2051的连接电路,在模块上电后,应先延时100ms以上再送命令。应首先开振荡器,其次写读模块专用初始化命令100 001001000定义模块,然后送其它命令或显示数据。为实现微功耗方式,每次读/写命令或数据之后,应将CS、RD、WR、DATA置高电平或悬空。利用LCM101.C进行10位显示的程序如下: #include<reg51.h> #include<stdio.h> #include<intrins.h> #include<stdlib.h> sbit P1_5=P1∧5; sbit P1_4=P1∧4; sbit P1_3=P1∧3;sbit P1?=P1∧2; unsigned char a; void d_com(unsigned char g); void w_data(unsigned char m,unsigned char n); void dl5(); void dl25m(); void dl1s(); void dl500(); main() { unsigned int i; unsigned int d_mem[31]; dl1s(); aa:P1=0x0; dl500(); P1_5=1; dl500(); P1_5=0; dl500(); P1_5=1; dl500(); P1_5=0; a=0x02; d_com(a); a=0x00; d_com(a); a=0x01; d_com(a); a=0x24; d_com(a); a=0x03; d_com(a); for (i=0;i<31;i++) { d_cem[i]=0x07; } for (i=0;i<31;i++) { w_data(i,d_mem[i]); } goto aa; } void d_com(unsigned char g) { unsigned int i; a=0x04; P1_5=0; dl5(); P1_5=1; dl5(); a=a<<5; for (i=0;i<3;i++) { P1_3=1; dl5(); if(a>=0x80) {P1_3-0;} else {P1_2=1;} dl5(); P1_3=0; dl5(); a=-crol?a,l); } for(i=0;i<8;i++) { P1_3=1; dl5(); if(g>=0x80) {P1_2=0} else {P1_2=1;} dl5(); P1_3=0; dl5(); g=crol?g,1); } P1-3=1; dl5(); P1_2=1; dl5(); P1_3=0; dl5(); } void w_data(unsigned char m,unsigned char n) { unsigned int i; a=0x05; d15(); P1_3=0; dl5(); P1?=1; dl5(); a=a<<5; for(i=0;i<3;i++) { P1_3=1; dl5(); if(a>=0x80) {P1_2=0;} else {P1_2=1;} dl5(); P1_3=0; dl5(); a=_crol_(a,1); } P1_3=1; dl5(); P1_2=1; dl5(); P1_3=0; dl5(); a=m; a=a<<3; for(i=0;i<5;i++) { P1_3=1; dl5(); if(a>=0x80); {P1_2=0;} else {P1_3=1;} dl5(); P1_2=0; dl5(); a=_crol_(a,1); } a=n; for(i=0;i<4;i++) { a=_cror_(a,1); P1_3=1; if(a>=0x80) {P1_2=0;} else {P1_2=1;} P1_3=0; } } void dl5() { _nop? _nop? _nop? _nop? } void dl25m() { unsigned int i; for(i=0;i<250;i++) { dl5(); dl5(); } } void dl1s() { unsigned int i; for(i=0;i<20;i++) { dl25m(); dl25m(); } } void dl500() { unsigned int i; for(i=0;i<5;i++) { dl25m; dl25m; } }
|