51单片机与LCD1602接口电路与程序
一、工作方式:间接工作方式。
二、实现功能:显示“Hope the epidemic will pass soon”。
四、程序源码:
#include
#define LCD1602_DB P0
sbit LCD1602_RS=P1^0;
sbit LCD1602_RW=P1^1;
sbit LCD1602_E=P1^5;
void InitLcd1602();
void LcdWriteCmd(unsigned char cmd);
void LcdWaitReady();
void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str);
void LcdWriteDat(unsigned char dat);
void LcdSetCursor(unsigned char x,unsigned char y);
void main()
{
unsigned char str[]=“Hope the eqidemic”;//显示的字符串
InitLcd1602();//液晶初始化
LcdShowStr(0,0,str);//第一行显示
LcdShowStr(1,1,“will pass soon”);//第二行显示
while(1);
}
void InitLcd1602()//初始化函数
{
LcdWriteCmd(0x38);//显示模式设置
LcdWriteCmd(0x0c);//开显示,不显示光标
LcdWriteCmd(0x06);//指针加一,整屏不移动
LcdWriteCmd(0x01);//指针清零,显示清零
}
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);//判断sta最高位是否为0
}
void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str)//显示函数
{
LcdSetCursor(x,y);
while(*str!=’\0’)
{
LcdWriteDat(*str++);
}
}
void LcdWriteDat(unsigned char dat)
{
LcdWaitReady();
//写数据
LCD1602_RS=1;
LCD1602_RW=0;
LCD1602_DB=dat;
LCD1602_E=1;
LCD1602_E=0;
}
void LcdSetCursor(unsigned char x,unsigned char y)//字符显示函数
{
unsigned char addr;
if(y==0)
addr=0x00+x;
else
addr=0x40+x;
LcdWriteCmd(addr|0x80);
}
五、遇到的问题:
1、Proteus 8中网络标号怎么添加?(两个元器件之间不画线,可以通过引脚的网络标号来连接)
(1) 首先,将一个引脚引出较短的引线,再在下一个引脚处双击,则该引脚上会自动画出相同的引线。
(2)点击工具栏左侧的‘LBL’选项,然后再按‘a’键,会弹出对话框。(若按不出来,试换成大写)
‘LBL’的选项位置:
(3)将String中的内容改为:net=××#(例:net=P0#),其中‘#’表示变化的内容,count代表初始值,increment代表增量。
(4)将鼠标移到要添加标签的 引脚处,等鼠标变成小手,且旁边出现方框时单击左键,标号添加成功。
2、复制keil4中的程序到word时,注释出现乱码?
解决方法:
(2)在’Edit’选项下拉菜单中点击’Configuration’选项。
(3)在’Configuration’选项对话框中有ENCODING复选框,在里面设置Chinese GB231,点击OK。