📄 1602.c
字号:
#include<reg51.h>
#include<stdio.h>
#define RW P1_1
#define RS P1_0
#define Enable P1_2
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
void LcdWriteCommand(char cmd,char attrib);
void Lcd_Ini(void);
void delay(int k);
void LcdWriteData(char character,unsigned char position);
void DelayMs(char num);
unsigned char str[28]={"I love Practical Elctronics!"};
void main(void)
{
unsigned char i,z;
Lcd_Ini();
for(z=32;z>-32;z--)
{
for(i=0;i<28;i++)
LcdWriteData(str[i],i+z);
delay(700);
}
}
void Lcd_Ini(void)
{
DelayMs(15);
LcdWriteCommand(0x38,0);
DelayMs(5);
LcdWriteCommand(0x38,0);
DelayMs(5);
LcdWriteCommand(0x38,0);
LcdWriteCommand(0x38,1);//MPU DB wide 8 bits,two lines,5*7charater
LcdWriteCommand(0x06,1);//display optic pointer,increase the pointer;
LcdWriteCommand(0x0c,1);//only display the character,no optic pointer
LcdWriteCommand(0x01,1);//clear the screen
}
void LcdWriteCommand(char cmd,char attrib)
{
switch(attrib)
{
case 1:P2=0xff;
RS=0;
RW=1;
Enable=1;
Enable=1;
while(P2&0x80);
Enable=0;
case 0:RS=0;RW=0;P2=cmd;
Enable=1;Enable=1;Enable=0;break;
default:break;
}
}
/*****************************/
/*LCD position & character */
/*****************************/
void LcdWriteData(char character,unsigned char position)
{
if(position<16)
LcdWriteCommand(position|0x80,1);
else
{
position-=16;
LcdWriteCommand(position|0xc0,1);
}
P2=0xff;RS=0;RW=1;Enable=1;
Enable=1;
while(P2&0x80);
Enable=0;
RS=1;RW=0;
P2=character;
Enable=1;Enable=1;
Enable=0;
}
void delay(int k)
{
unsigned char j;
int i;
for(i=0;i<k;i++)
for(j=0;j<121;j++);
}
void DelayMs(char num)
{
TMOD=0X11;
TR0=0;
TF0=0;
switch(num)
{
case 1:TH0=0XfC;TL0=0X18;break;
case 5:TH0=0XEC;TL0=0X78;break;
case 15:TH0=0XC5;TL0=0X68;break;
case 20:TH0=0Xb1;TL0=0Xe0;break;
case 50:TH0=0X3C;TL0=0XB0;break;
default: break;
}
TR0=1;
while(!TF0);
TR0=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -