LCD1602 写字符

///////////////////////////
// 51单片机 pascal 语言 示例
// LCD1602 写字符
/////////////////////////
Program test4prj;

CONST
LCD1602_DISPLAY_MODE_16X2=%00111000 ; //显示模式 16 x 2;
Table1:string[16]=‘FIRST’ ;
Table2:string[16]=‘two’;
var
LCD1602_RS:boolean absolute P0.4 ; // 数据H/命令L 选择端
LCD1602_RW:boolean absolute P0.3; // 读H / 写L 选择端
LCD1602_EN:boolean absolute P0.2; // 使用能

i:integer;

procedure NOP;assembler;
asm
NOP;
end;

procedure Delay4NOP;assembler;
asm
NOP;
NOP;
NOP;
NOP;
end;

procedure Delay(ms:integer);
var
l,j,k:integer;
begin
for l:=0 to ms do begin
for j:=0 to 6000 do begin
inc(k);dec(k);
end;
end;
end;

procedure LCD1602_Clear;
begin

end;

//检测是否忙碌
function LCD1602_IsBusy:boolean;
begin
LCD1602_RS:=false;
LCD1602_RW:=True;
LCD1602_EN:=True;
Delay4NOP;
Result:=(P2 AND %10000000)<>0;
LCD1602_EN:=FALSE;
end;

//写入命令
procedure LCD1602_WriteCommand(cmd:byte);
begin
while LCD1602_IsBusy do begin
end;

LCD1602_RS:=false;
LCD1602_RW:=false;
LCD1602_EN:=FALSE;
Delay4NOP;
P2:=cmd;

Delay4NOP;
LCD1602_EN:=True;
Delay4NOP;
LCD1602_EN:=FALSE;

end;

//写入数据
procedure LCD1602_WriteData(data:byte);
begin

LCD1602_RS:=TRUE;
LCD1602_RW:=false;
LCD1602_EN:=false;
P2:=data;
Delay4NOP;
LCD1602_EN:=TRUE;
Delay4NOP;
LCD1602_EN:=FALSE;
end;

//初始化
procedure LCD1602_Init;
begin
LCD1602_WriteCommand(LCD1602_DISPLAY_MODE_16X2); //设置显示模式
LCD1602_WriteCommand(%00001100); // 显示开,光标关
LCD1602_WriteCommand(%00000110); // 移动 光标
LCD1602_WriteCommand($01); // 清屏
end;

//设置显示位置
procedure LCD1602_SetCursorPos(pos:byte);
begin
LCD1602_WriteCommand(pos+$80);

end;

//-----------------------------------
begin
LCD1602_Init;
repeat
delay(30);
LCD1602_WriteCommand($01); // 清屏
delay(30);
LCD1602_SetCursorPos(0);
for i:=1 to Length(Table1) do begin
LCD1602_WriteData(byte(Table1[i]));
end;

LCD1602_SetCursorPos($40);
for i:=1 to Length(Table2) do begin
LCD1602_WriteData(byte(Table2[i]));
end;

until FALSE;
end.

猜你喜欢

转载自blog.csdn.net/weixin_43754719/article/details/84405414