#ifndef _LCD_H_
NPq2C8: #define _LCD_H_
!}m8]& Gwk@X/q #ifndef uchar
x6P^IkL: #define uchar unsigned char
#f@53Pxb #endif
9{&x-ugM ~$Yuxo #ifndef uint
%tjEVQa #define uint unsigned int
y!Eh /KD #endif
[)KfRk?};2 UcIR0BYa #include<reg51.h>
S!bvU2d #define LCD_Datapin P0
!1]xKNp] 8 F 1ga15 sbit LCD_RS = P2^6;
3 g!h4?^ sbit LCD_RW = P2^5;
\8H"lcj: sbit LCD_EN = P2^7;
;!Mg,jlQ void DelayMs(uint x);
'c]&{-w<i uchar LCD_Busy();
iE{ SqX void LCD_Write(uchar date,bit j);
EkPSG&6RZ void LCDInit();
iWsIc\!+, void LCD_Display_byte(uchar x,uchar y,uchar date );
IEj`:]d void LCD_Display_String(uchar x,uchar y,uchar table[]);
B!lw>rUMQ 6Vo}Uaq4 zj}efv<e S|i
//I%_ !o7.L%S Il[WXt<S #include<LCD.h>
7hQl,v< 5 #include<intrins.h>
gnec#j #include<string.h>
r,\(Y@I AUd}) UR void DelayMs(uint x) //毫秒的延时函数
C8-q<t#SF {
pgarGaeq uint t;
^8*.r+7p while(x--)
P^r8JhDJ {
36z{TWF for(t=0;t<120;t++);
LNWp$" SJmri]4K }
A1@a:P= }
4O'ho0w7 /*******
e!yt<[ph U bXz`i 判断LCD是否忙碌状态要求
[&&4lKC}u 1.使用读时序
:JmNy< 2.读出D7的状态是0还是1,0表示不忙 ,1表示忙碌中
[VHt#JuN, ********/
QS_xOQ ' uchar LCD_Busy() //判断LCD是否忙碌状态
*HUqW}_r {
]cK@nq) uchar LCD_Status;
)XWL'':bF LCD_RS = 0;
Smo'&x LCD_RW = 1;
Yp$lc^)c> LCD_EN = 1;
(G
Y`O DelayMs(1);
0&|-wduR= LCD_Status = (P0&0x80); //
)ALcmC?!# LCD_EN = 0 ;
92R{V%)G return LCD_Status;
~V5jjx* VEk|lX;2 }
n%}0hVu 3zkq'lZ //写指令数据程序 j为0时写命令 j为1写数据
OmW|\d PU void LCD_Write(uchar date,bit j)
{Ffr l(* {
uQ}kq7gd while(LCD_Busy());
43YusUv LCD_RW = 0;
fQ@["b LCD_RS = j;
DBRTZES LCD_Datapin = date;
+Aq}BjD# LCD_EN = 1;
;NEHbLH#F LCD_EN = 0;
O-RiDYej W# $rC<Jh] }
;C3]( .*+&>m7 //LCD初始化
&F)lvtt| void LCDInit()
GauIe0qV {
;)*Drk*t, DelayMs(5);
`%VrT` LCD_Write(0x38,0);
.nnAI@7E DelayMs(5);
i=+ "[ h^ LCD_Write(0x38,0);
%NuS!v> LCD_Write(0x08,0);
d] {^ LCD_Write(0x01,0);
Xg"=,j2 LCD_Write(0x06,0);
[>fE{~Y LCD_Write(0x0c,0);
5u8 YHv }
|1EM )zh6 n#iL[
&/Aw // 显示单个字符 x为0写在第一行 x为1写在第二行 y数据显示的地址 Z写入的数据
6w'^,V void LCD_Display_byte(uchar x,uchar y,uchar date )
u+N[Cgh {
gC?k6)p$N if(x==0)
D n^RZLRhy {
MCvjdc3: LCD_Write(0x80+y,0);//写显示地址
KQh'5o& }
3;&N3:,X else
6<2 7}S {
y37@4p^@9 LCD_Write(0xc0+y,0); //写显示地址
2Tp.S3 }
0@>3fR $?7}4u, LCD_Write(date,1);//写数据
FXIQS' }
XWk^$ " yZKj>P1 //写字符串
Wn|w~{d{ void LCD_Display_String(uchar x,uchar y,uchar table[])
(%".=x- {
tH$Z_(5
uchar t;//记录table字符串的长度
N(Cfv3{ if(x==0)
,+f'%)s_x {
|<OZa;c+ LCD_Write(0x80+y,0);//写显示地址
zg|]Ic }
yB&s2J else
V7.EDE2A3 {
Pr" 2d\ LCD_Write(0xc0+y,0); //写显示地址
jGId)f!) }
'wDNP_ v~j21` t= strlen(table);
i-$]Tg if(t<=16)
k#U?Xs> {
"gYn$4|R7* for(t=0;t<17;t++)
z@dHXj ) {
uSH.c> LCD_Write(table[t],1);
4]B(2FR[8 }
'z@(,5 }
AFyf7^^k }
#49,7OBU PXWBc\ sdrALl;w| YajUdpJi ?
3Td>x d(<[$3. #include<reg51.h>
[+UF]m%W #include<LCD.h>
Ft'?43J uchar table[]={"qq:1111111111"};
*1|&uE&_R void main()
d=`hFwD9 {
;BsyN[bF w(0's' LCDInit();
]FP(,:Yw LCD_Display_byte(0,1,'B');
R]H/Jv\' LCD_Display_String(1,2,table);
,iV|^]X3$/ r1f## while(1);
NvY%sx, }
qq
G24**9v p{gJVP#l'Z #endif请大佬们帮我看看代码需要怎么修改
63 F@Ft qf#Ou :@mb.'%*! [ 此帖被醴郓龙在2018-01-06 16:50重新编辑 ]