我单片机学得不是很好,因为我是自学的,师傅还没有教到,而且程序是复制别人的,程序我还不是全部都理解,但是编译没有出现错误,求指导
单片机源程序如下:
#include<reg52.h>
#define Lcd1602_DB P2
sbit Lcd1602_RS = P3^0;
sbit Lcd1602_RW = P3^1;
sbit Lcd1602_E = P3^2;
void InitLcd1602();
void Lcdwritecmd(unsigned char cmd);
void LcdWaitReady();
void LcdShowstr(unsigned char x, unsigned char y, unsigned char *str);
void Lcdcursor(unsigned char x, unsigned char y);
void LcdWritedat( unsigned char str);
void main()
{
InitLcd1602();
LcdShowstr(5, 0, "L Z Y");
LcdShowstr(3, 1, "come on!!!");
while(1);
}
//初始化1602液晶
void InitLcd1602()
{
Lcdwritecmd(0x38);//16*2显示,5*7点阵,8位数据口
Lcdwritecmd(0x0C); //显示器开,光标关闭
Lcdwritecmd(0x06);//文字不动,地址自动加+1
Lcdwritecmd(0x01);//清屏
}
//向LCd1602写入一个一字节命令,cmd为待写入命令值
void Lcdwritecmd(unsigned char cmd)
{
LcdWaitReady();
Lcd1602_RS = 0;
Lcd1602_RW = 0;
Lcd1602_DB = cmd;
Lcd1602_E = 1;
Lcd1602_E = 0;
}
//等待液晶准备好
void LcdWaitReady()
{
unsigned char sta;
Lcd1602_DB = 0xFF;
Lcd1602_RS = 0;
Lcd1602_RW = 1;
do{
Lcd1602_E = 1;
sta = Lcd1602_DB;//读取状态字
Lcd1602_E = 0;
}while(sta & 0x80);//bit7等于1表示液晶正忙,重复检测直到其等于0为止
}
//在液晶上显示字符串,(x,y)为对应屏幕上的起始坐标,str为字符指针
void LcdShowstr(unsigned char x, unsigned char y, unsigned char *str)
{
Lcdcursor(x, y);//设置起始地址
while(*str != '\0')//连续写入字符串数据,直到检测到结束符
{
LcdWritedat(*str++);//先取str指向的数据,然后str自加1
}
}
//设置显示RAM起始地址,亦即光标位置,(x,y)为对应屏幕上的字符坐标
void Lcdcursor(unsigned char x, unsigned char y)
{
unsigned char addr;
if(y == 0)//由输入的屏幕坐标计算显示RAM的地址
{
addr = 0x00 + x; //第一行字符坐标地址从0x00起始
}
else
{
addr = 0x40 + x;//第二行字符地址从0x40起始
}
Lcdwritecmd(addr | 0x80);//设置RAM地址
}
//向液晶写入一个一字节数据,dat为待写入数据值
void LcdWritedat(unsigned char str)
{
LcdWaitReady();
Lcd1602_RS = 1;
Lcd1602_RW = 0;
Lcd1602_E = 1;
Lcd1602_DB = str;
Lcd1602_E = 0;
} |