#include <reg51.h>
#define LCD1602_DB P0
sbit LCD1602_RS = P2^5;
sbit LCD1602_RW = P2^6;
sbit LCD1602_EN = P2^7;
#define LCD_MODE_PIN8 0x38//8位数据口,两行,5*8点阵
#define LCD_MODE_PIN4 0x28//4位数据口,两行,5*8点阵
#define LCD_SCREEN_CLR 0x01//清屏
#define LCD_CURSOR_RST 0x02//光标复位
#define LCD_DIS_CUR_BLK_ON 0x0F
#define LCD_DIS_CUR_ON 0x0E
#define LCD_DIS_ON 0x0C
#define LCD_DIS_OFF 0x08
#define LCD_CURSOR_RIGHT 0x06
#define LCD_CURSOR_LEFT 0x04
#define LCD_DIS_MODE_LEFT 0x07
#define LCD_DIS_MODE_RIGHT 0x05
#define LCD_CUR_MOVE_LEFT 0x10 //光标左移
#define LCD_CUR_MOVE_RIGHT 0x14 //光标右移
#define LCD_DIS_MOVE_LEFT 0x18 //显示左移
#define LCD_DIS_MOVE_RIGHT 0x1C //显示右移
//void timer3_Init(void) //100微秒
//{
// TMOD &= 0x0f;
// TMOD |= 0x;
//}
//void timer3_ISR(void) interrupt 3
//{
//
//}
//下边是测量脉冲宽度代码
unsigned int High,Low;
sbit K=P3^3;
void Init_T3()
{
TMOD=0x90;
TH1=0;
TL1=0;
}
void Message_Width()
{
while(K);
TR1=1;
while(!K);
while(K);
TR1=0;
High=TH1;
Low=TL1;
}
//下边是LCD显示操作代码
void DelayXms(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
{
for(j=124;j>0;j--)
{
}
}
}
void LCDReadBF()//忙位检测,state最高位为1时,程序在忙,等待
{
unsigned char state;
unsigned char i;
LCD1602_DB = 0xFF;//IO口先置1,做输入
LCD1602_RS = 0;
LCD1602_RW = 1;
do
{
LCD1602_EN = 1;
state = LCD1602_DB;
LCD1602_EN = 0;
i++;
if(i>50)
break;//防止忙位信号出现问题
}
while(state & 0x80);
}
void LCDWriterCmd(unsigned char cmd)
{
LCDReadBF();//等待忙检测,不忙时操作
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DB = cmd;
LCD1602_EN = 1;
LCD1602_EN = 0;//单片机执行速度为1ms,大于150ns
}
void LCDWriterData(unsigned char dat)
{
LCDReadBF();//等待忙检测,不忙时操作
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DB = dat;
LCD1602_EN = 1;
LCD1602_EN = 0;//单片机执行速度为1ms,大于150ns
}
void LCDInit()
{
LCDWriterCmd(LCD_MODE_PIN8);//显示模式设置,为2行,5*8点阵
LCDWriterCmd(LCD_DIS_ON);//显示开,光标关
LCDWriterCmd(LCD_CURSOR_RIGHT);//光标右移
LCDWriterCmd(LCD_SCREEN_CLR);//清屏
}
void LCDShowStr(unsigned char x,unsigned char y,unsigned char *str)
{
if(y == 0)
{
LCDWriterCmd(0x80 | x);
}
else
{
LCDWriterCmd(0x80 | (0x40 + x));
}
while(*str != '\0')
{
LCDWriterData(*str);
str++;
}
}
void main()
{
unsigned char str[] = "Hello LCD 1602";
//****************
unsigned int num;
unsigned char stg[] = {};
Init_T3();
Message_Width();
num = High*256+Low;
itoa(num,stg,10);
//****************
LCDInit();
DelayXms(10);
LCDShowStr(0,0,stg);
while(1);
}
请问大家,为什么会出现这样的问题呢,弄了半天还没整好