#ifndef _LCD_H_
^EdY:6NJ=A #define _LCD_H_
-z)I;R I9h?Z&n5 #ifndef uchar
7Q7z6p/\v #define uchar unsigned char
e*;-vS9H #endif
u~=>$oT't Sp: `Z1kH #ifndef uint
Lj6$?(x} #define uint unsigned int
&ok2Xw #endif
3de<H=H' @5K/z<p% #include<reg51.h>
;>{BK, #define LCD_Datapin P0
LSv0zAIe/ |Tuk9d4] sbit LCD_RS = P2^6;
P(8zJk6h), sbit LCD_RW = P2^5;
!>W _3Ea sbit LCD_EN = P2^7;
OWT5Bjl void DelayMs(uint x);
N>giFj[dD uchar LCD_Busy();
WBLfxr void LCD_Write(uchar date,bit j);
yxh8sAZ void LCDInit();
);$_|]# void LCD_Display_byte(uchar x,uchar y,uchar date );
SsiAyQ|Ma void LCD_Display_String(uchar x,uchar y,uchar table[]);
*[t@j*al B@D3aOvO E#X(0(A) N|Mzj|i. Ufd{.o[{- ZgVYC4=Q-\ #include<LCD.h>
xH#R_ #include<intrins.h>
z)I.^ #include<string.h>
pwU
l&hwte !%>p;H%0 void DelayMs(uint x) //毫秒的延时函数
vzA)pB~; {
9ar+P h@* uint t;
}a6tG while(x--)
DS0c0lsx {
}t#uSz^ for(t=0;t<120;t++);
o Y{L0B[ me"}1REa }
Elw fqfO }
*P]FX-D3 /*******
*J,VvO9 J@ZIW%5 判断LCD是否忙碌状态要求
?G%C}8a 1.使用读时序
'M+iw:R__ 2.读出D7的状态是0还是1,0表示不忙 ,1表示忙碌中
b7 %Z~ ********/
Ucr$5^ME uchar LCD_Busy() //判断LCD是否忙碌状态
#e:cB' f {
VgLrufJ uchar LCD_Status;
qC]6g LCD_RS = 0;
h3U| ~h LCD_RW = 1;
|Am
+f. LCD_EN = 1;
l0N~mes DelayMs(1);
s>hNwb/ LCD_Status = (P0&0x80); //
y5gTd_- LCD_EN = 0 ;
mDZ/Kp{ return LCD_Status;
}wZ9#Ll OOJg%y*H }
=E?kxf[X 1P i_V //写指令数据程序 j为0时写命令 j为1写数据
91'i7&~xdG void LCD_Write(uchar date,bit j)
1$nlRQi {
x{y}pH "H while(LCD_Busy());
=Ji+GJ<,9 LCD_RW = 0;
s?r:McF` LCD_RS = j;
@$o.Z;83`r LCD_Datapin = date;
=Ts2a"n LCD_EN = 1;
ypyqf55gK LCD_EN = 0;
g{0a]'ph mN+
w, }
/o@6?UH ;$=kfj9 :7 //LCD初始化
gp@X(d void LCDInit()
R|4a9G {
K[{hh;7 DelayMs(5);
NL`}rj LCD_Write(0x38,0);
mmSC0F DelayMs(5);
t@=*k9 LCD_Write(0x38,0);
$aIq>vJO9 LCD_Write(0x08,0);
[\|`C4@3a LCD_Write(0x01,0);
ol^uM .k%_ LCD_Write(0x06,0);
VS.~gHx LCD_Write(0x0c,0);
(.r9bl }
Y
1v9sMN, l=+hs // 显示单个字符 x为0写在第一行 x为1写在第二行 y数据显示的地址 Z写入的数据
,v^A;,q void LCD_Display_byte(uchar x,uchar y,uchar date )
wg-qq4Q\ {
8kn> ? if(x==0)
al#BfcZW {
~bC-0^/
8| LCD_Write(0x80+y,0);//写显示地址
8s+9PE }
YCMXF#1 else
"INIP? {
b({K6#?'[ LCD_Write(0xc0+y,0); //写显示地址
/sU~cn^D5 }
goa@e LpV2XL$p># LCD_Write(date,1);//写数据
D^m`&asC }
-q&K9ZCl` d1[;~) //写字符串
\t=ls void LCD_Display_String(uchar x,uchar y,uchar table[])
MP
LgE.n {
:r+BL@9 uchar t;//记录table字符串的长度
}Mv$Up if(x==0)
r]+/"~a {
'}$]V>/ LCD_Write(0x80+y,0);//写显示地址
Yo-$Z-ud }
EOj.Jrs~ else
LdH23\ {
D(X:dB50@ LCD_Write(0xc0+y,0); //写显示地址
JKjVrx>
@ }
fo$s9g^< a62'\wF>D t= strlen(table);
r*F^8_YMK if(t<=16)
g6D7Y<}d {
4{v?<x8 for(t=0;t<17;t++)
GEs5@EH {
w/49O;r V LCD_Write(table[t],1);
{9c_T!c }
r9
5hW }
[<nmJ-V }
lWyg_YO@ }+/F?_I=
% -J&
b~t@ qx'F9I 4 (>8tP\Y eWk
W,a #include<reg51.h>
#qcF2&a% #include<LCD.h>
O>c2*9PM uchar table[]={"qq:1111111111"};
j>I.d+ void main()
-)pVgf {
<)]j;Tl J|uSj/8 LCDInit();
9Od|R"aS| LCD_Display_byte(0,1,'B');
).i :C(| LCD_Display_String(1,2,table);
9O{b8=\} _8{6&AmIw while(1);
%;ZDw@_< }
U|jip1\ .a_xQ]eQ #endif请大佬们帮我看看代码需要怎么修改
#I-qL/Lm 8b|m6 6#| ":vF[6K6 [ 此帖被醴郓龙在2018-01-06 16:50重新编辑 ]