|
自己焊接的板子可以显示开发板自带的程序,但自己写的程序可以在开发板上运行,却不能在自己焊接的板子上运行。这是怎么回事?原理图和程序如下/*LCD1602驱动程序*/
#include<reg51.h>
#include<string.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit RS=P2^6;
sbit RW=P2^5;
sbit EN=P2^7;
//延时
void Delay( uint time)
{
while(time--) ;//当晶振为11.0592MHZ,num=10时,延时时间约为70us
}
//通过控制LCD1602的RS、RW、EN三个管脚来获取LCD1602的忙状态
void Busy_Status_LCD1602()
{
while(1)
{
P0=0xFF;
RS=0;
RW=1;
EN=1;
Delay(120);
if((P0&0x80)!=0x80)
{
EN=0;
break;
}
EN=0;
Delay(120);
}
}
//通过控制LCD1602的RS、RW、EN三个管脚向LCD1602传输命令
void Write_Command_LCD1602( uchar command)
{
Busy_Status_LCD1602();
RS=0;
RW=0;
EN=0;
//P2=command;
P0=command;
EN=1;
Delay(120);
EN=0;
}
//通过控制LCD1602的RS、RW、EN三个管脚向LCD1602传输数据
void Write_Data_LCD1602(uchar data_LCD)
{
Busy_Status_LCD1602();
RS=1;
RW=0;
EN=0;
//P2=data_LCD;
P0=data_LCD;
EN=1;
Delay(120);
EN=0;
}
//设置LCD1602的显示模式、数据传输模式等
void Initialize_LCD1602()
{
Write_Command_LCD1602(0x38);//双行显示、显示5x7的点阵字符、8线传输
Delay(120);
Write_Command_LCD1602(0x0C);//显示开、光标关、光标闪烁关
Delay(120);
Write_Command_LCD1602(0x06);//光标移动方向右移、屏幕上所有文字不移动
Delay(120);
Write_Command_LCD1602(0x01); //清屏
Delay(120);
}
void main()
{
uchar i,addr;
Initialize_LCD1602();
Delay(50000);
Delay(50000);
while(1)
{
addr=0x80;
Write_Command_LCD1602(addr);
Write_Data_LCD1602('R');
}
}
LCD1602硬件原理图
|
|