.I Qg]I8C,P[u)O0软件设计电子园51单片机学习网&[\E i!K5PHwN d7Nc,Y
---软件采用Keil C51语言开发,主要包括三个部分:第一部分是写指令和写数据等面向液晶显示模块硬件的驱动程序;第二部分包括液晶显示模块初始化和清屏等通用子程序;第三部分是汉字、字符和图形的显示程序。
*yjb3AY^_GB0电子园51单片机学习网"zC$VPm
1 写指令、写数据子程序电子园51单片机学习网4k7MhuOzX
---这部分是液晶显示模块的驱动程序,所有对液晶显示模块的操作都是通过调用这部分程序实现的。液晶显示模块的指令通道地址为0xf1,数据通道的地址为0xf3,具体驱动程序如下。电子园51单片机学习网P'`i+]*D#K(S
#define LCD_Cmd 0xf1 //模块指令通道地址
2zy2R C7~3x$fv0#define LCD_Data 0xf3 //模块数据通道地址
&An+G'YGA uQ/?4G0//写指令子程序
@+D{7r,@$}0void Write_LCD_Cmd(unsigned char cmd)电子园51单片机学习网s^:F%E,G h
{
[]"rm7xT`2u0while ((PBYTE[LCD_Cmd]&3)!=3);电子园51单片机学习网5QA^KW+QAH
PBYTE[LCD_Cmd]=cmd;
:l(jJcn:O~7G0}电子园51单片机学习网Y+mj#~(`Ad
//写数据子程序
YMPNN]m*Cc0void Write_LCD_Data(unsigned char dat)电子园51单片机学习网"R)C0m)kDZ{l
{
a3Y$K s&`j&gQ0while ((PBYTE[LCD_Cmd]&3)!=3);电子园51单片机学习网*C'm{"cc;_8T@
PBYTE[LCD_Data]=dat;电子园51单片机学习网#^2V:b-U.I/E o
}电子园51单片机学习网"XA/|2x IW
电子园51单片机学习网"R2~9X#nWyP
2 初始化子程序电子园51单片机学习网C2V V~,\T R
---这部分程序是液晶显示模块进行显示之前的必要工作,包括设置文本页首地址、图形页首地址、文本页地址、图形页地址、初始化和清屏等子程序。本文中把液晶显示模块的显示存储器分为16个文本页和6个图形页。文本页的起止地址为0x0000~0x1fff;图形页的起止地址为0x2000~0x7fff。
:i$i gmG0//设定文本页首地址子程序
`"As\ T G8N0void Text_Home_Address(unsigned char tpage)电子园51单片机学习网 gcV/w6Sl(j(X#h
{电子园51单片机学习网A#N vq3y[
Write_LCD_Data(0);
%Cq8@x n I _0Write_LCD_Data(tpage*0x02);电子园51单片机学习网oi `fcR
Write_LCD_Cmd(0x40); }
G9XC%Gb(|^I W&ggQ0//设定图形页首地址子程序
j#[@,X(x4j8|0void Graph_Home_Address(unsigned char gpage)
6k&o?;BFT0{电子园51单片机学习网*L#j w(B}7G8U ]
gpage+= 2;
Y)_ Iyr%D0Write_LCD_Data(0);
!zIp];n:N gTJ"s0Write_LCD_Data(gpage*0x10);
SKBkn I0Write_LCD_Cmd(0x42); }电子园51单片机学习网(k;T#wl1^ iH8L{
//设定文本页地址子程序电子园51单片机学习网:Uo"xOGN
void Text_Address(unsigned char x, unsigned char y)
l@-SL@@0{电子园51单片机学习网v3s)N Q.Dk,I;s
extern unsigned char textpage;
T$}!}B7f/cT$h*J0unsigned int xy;
]CWB oOw5Vr+h0xy=y*32+x+textpage*0x0200;
OKu6`nQ0Write_LCD_Data(xy&0xff);电子园51单片机学习网9M6r*\'Q!J#o$s
Write_LCD_Data(xy/256);
r:B;P^k^3k7PM?O0Write_LCD_Cmd(0x24);电子园51单片机学习网L9R*tidz't
}电子园51单片机学习网W VS#s`QQ
//设定图形页地址子程序
e3Vz`*H*~md@0void Graph_Address(unsigned char x,电子园51单片机学习网m[;U:H j
unsigned char y)电子园51单片机学习网U j%Kgy:}
{
-W%J/I5c/y et0extern unsigned char graphpage; unsigned int xy;电子园51单片机学习网7pY7e OVt;|%d Z
graphpage+=2;
#i%Bn2_%gy.A-g wy0xy=y*32+x+graphpage*0x1000;
7aT2vXP1n0Write_LCD_Data(xy&0xff);
)\w"^u#f"A}0Write_LCD_Data(xy/256);
xn^QH7C&E0Write_LCD_Cmd(0x24);电子园51单片机学习网w#`.@.ct1d
}电子园51单片机学习网0veT-Y!sx
//初始化子程序电子园51单片机学习网7iE&eAoZ S9RmX
void Init_LCD(void)
'w H-V-p5rm0{
2apoy+VEa+UR0Write_LCD_Cmd(0x90);
7UKI uB,v`_0Write_LCD_Data(0x20);
4O8V7\%T n9XQYe0Write_LCD_Data(0x00);
"x,}w&Hf+ME#L0Write_LCD_Cmd(0x41);
Bf3M*zr*m/|7h8Q0Write_LCD_Data(0x20);
z3F ] I qz|'eG0Write_LCD_Data(0x00);电子园51单片机学习网#jZ^p(}:^ s
Write_LCD_Cmd(0x43);
^8ou,_,y2kx*D*P.I0Write_LCD_Cmd(0x89);电子园51单片机学习网LL/H*~,AY)rM;n.F-IW
Write_LCD_Cmd(0xa1);电子园51单片机学习网P-HD ZbE!| X
Write_LCD_Data(0x0F);
u^Zb;`IUf3B-mv0Write_LCD_Data(0x00);
,Ku9b0~ez6mA.W0Write_LCD_Cmd(0x22);
@r\:\s vZrJ9c K0Write_LCD_Cmd(0x9c);
n EPPm ^Q0}电子园51单片机学习网 n9H_,x"y,Y2{.z
电子园51单片机学习网U xf5r9c4[
3 汉字、字符和图形的显示程序
^%a:~ ykp-nf0---通过调用前面编写的驱动、初始化和清屏程序就可以方便的实现汉字、字符和图形的显示。本文以汉字显示为例介绍显示程序的编制。汉字既可以以文本方式显示也可以以图形方式显示。以文本方式显示时,每次开机都要先把汉字字模写进液晶显示模块的CGRAM,浪费了时间,而且由于CGRAM的容量只有2kb,显示的汉字有限,所以一般用图形方式显示汉字。以图形方式显示时先把汉字字模写在Flash存储器中,显示时再从Flash存储器中取出来,这样不用每次开机时都写汉字字模,节约时间,而且显示的汉字数量多。下面给出以图形方式显示汉字的通用子程序。汉字字模存储在Flash存储器中。
@/U.Hw;@ d0a0void put_hanzi (char c)
"d:E-x3F"_7V0{电子园51单片机学习网OA^5hX,D`
unsigned char kk="c";
m3Y iS%K5z0unsigned int order;
2V9T2V'_Yt^"KO0unsigned int aaa;
uH#m DS.We0static unsigned char previous="0x00";
lP klj Q0if(previous==0) previous="c";
`*w!QE(Bv9R#Nq0else
6u ~GI6^#R0{
+_my5v$A&^.mO0order=((unsigned int)电子园51单片机学习网!fHks h%Z F;o\
(previous-0xa1)*94+kk-0xa1);
yR*iS(HNk0Z7`0previous=order%8;电子园51单片机学习网nt[ g G*P1z
aaa=32*previous;电子园51单片机学习网(|2v%C)G(c
order=order/8;
&E9\.X5h"h&Q/F)YT;n1~0SCON=0;电子园51单片机学习网/b VG-V#t7_&[
SBUF=concode[0x52];电子园51单片机学习网$eQ*a4Qw|+b)G+c
kk=order/128;电子园51单片机学习网`&U$U2o8njgr
while(!TI);
f.t:t#Yvw4T4E0SCON=0;
(QcL-I2tXj0SBUF=concode[kk]; kk="order"%128;电子园51单片机学习网]!B2\#g"~8a
kk<<=1;
(Apn1`+F!_xAR0while(!TI);电子园51单片机学习网 _ NRD$`d?;TR
SCON=0;
L w+R ES4xG y0SBUF=concode[kk]; kk="aaa"%256;
2KJ6punO t0while(!TI);
D:F5g M*o0SCON=0;
r _8q#x}TK!b0SBUF=concode[kk]; for(kk=0;kk<4;kk++)电子园51单片机学习网W dY]7j+mb u5\
{
L2@eoZ {0while(!TI);电子园51单片机学习网7g JS toA2i,f
SCON=0;电子园51单片机学习网+[&H8qX8N m+Vd[%q
SBUF=concode[0xff]; }电子园51单片机学习网 r:nU&cZw]P,U
while(!TI);
uM Nc1F$vx/?0SCON=0x10;电子园51单片机学习网} C#V d$`
for (kk=0;kk<16;kk++)电子园51单片机学习网HOU.o7qa a
{
*n6k'i8f\Z#C"Rp0Graph_Address(x,y*8+kk);电子园51单片机学习网Xn%dR"T$V$I
while(!RI);
Me?"Y,VM0previous=SBUF;
A \)A2k[^0SCON=0x10;电子园51单片机学习网x/L*H/sk,R(~
write_lcd(concode[previous]);电子园51单片机学习网l_hu#[4k;X
ctrl(0xc0);电子园51单片机学习网6x"x/pomL`[I
while(!RI);
$u3}*n-Tyie!Rd$D-a0previous=SBUF;
e)H)?1{6e U r(m0SCON=0x10;
~7WN5r+}$cF9o6n0write_lcd(concode[previous]);
C)P4U&Q,[#Pi0ctrl(0xc0);
.i2e n`$eR {n0}电子园51单片机学习网 |!Qi*fa/W/w A+U
previous=0x00;电子园51单片机学习网6t+}bTS"nf
}
:n|6G3uCf0}电子园51单片机学习网%ms;Re[QC.B
:R#T0W5[(wE0结束语
5JA%S|u(w0---随着现代测控技术的发展,良好的人机界面也越来越受到设计者的重视。本文介绍的液晶显示模块已成功应用在便携式轨头断面激光检测仪中,由于其具有与MCU接口方便、显示功能强和编程简单等优点,具有广泛的应用价值。电子园51单片机学习网~yIsLpR9x
参考文献电子园51单片机学习网+wWis3IZB| z
1 郭强等. 液晶显示应用技术. 电子工业出版社. 2000电子园51单片机学习网OI*}2mH&K0p
2 王建校等. 51系列单片机及C51程序设计. 科学出版社. 2002
1{F`#O"dME+Q2r03 李朝青. 单片机原理及接口技术. 北京航空航天大学出版社. 1999电子园51单片机学习网U2S w]f!~%my
文章评论(0条评论)
登录后参与讨论