|
程序在开发板上尝试过,没有任何问题,但是到了仿真里面就是只能显示一两秒,求教!附上完整代码和仿真。
代码:
#include "reg52.h"
#define LCD_DB P1 //宏定义P1口
sbit RW = P3^5;
sbit RS = P3^6;
sbit E = P3^4; //位定义LCD1602的RW、RS和E端口
void delay(unsigned int i);
void LCD_WriteCom(unsigned char com);
void LCD_WriteData(unsigned char dat);
void LCD_Init(void);
void LCD_WriteString(unsigned int x,unsigned int y,unsigned char *p);
void delay(unsigned int i) //延时程序
{
while(i--);
}
void LCD_WriteCom(unsigned char com) //写入命令
{
LCD_DB = com; //待传送代码放入P0口
delay(100); //延时,等待数据稳定
RS = 0; //选择发送命令
RW = 0; //选择写入
E = 1; //写入时序
delay(100); //下降沿保持时间
E = 0;
}
void LCD_WriteData(unsigned char dat) //写入数据
{
LCD_DB = dat; //待传送代码放入P0口
delay(100); //延时,等待数据稳定
RS = 1; //选择输入数据
RW = 0; //选择写入
E = 1; //写入时序
delay(100); //下降沿保持时间
E = 0;
}
void LCD_Init(void) //LCD初始化子程序
{
LCD_WriteCom(0x38); //功能设定,设置双行显示,8位数据总线DB0~DB7,5X7点阵/字符
LCD_WriteCom(0x0c); //显示开关设定,开显示,不显示光标
LCD_WriteCom(0x06); //进入模式设定,写一个数据后光标向右移动,显示屏不移动
LCD_WriteCom(0x01); //清屏,清空DDRAM的内容
}
/*显示字符串函数,x为行数:1~2,y为列数:1~16,*p是要显示的字符串指针*/
void LCD_WriteString(unsigned int x,unsigned int y,unsigned char *p)
{
x--;
y--;
while(*p != '0') //如果没显示到字符串结尾时,就进入循环
{
if(x==0) //在第一行显示
{
y|=0x80;
LCD_WriteCom(y); //将需要显示的列数位置与0x80相与,得到在该行下的具体位置
LCD_WriteData(*p); //显示p中的字符
y++; //显示完一个字符后,列数+1
p++; //指针地址+1,显示下一个字符
}
if(x==1) //在第二行显示
{
y|=0xc0;
LCD_WriteCom(y); //将需要显示的列数位置与0xc0相与,得到在该行下的具体位置
LCD_WriteData(*p); //显示p中的字符
y++; //显示完一个字符后,列数+1
p++; //指针地址+1,显示下一个字符
}
}
}
void main(void)
{
LCD_Init();
while(1)
{
LCD_WriteString(1,1,"LCD1602"); //在第一行第五列开始显示字符串
}
}
|
|