本帖最后由 suoma 于 2010-2-23 12:26 编辑
求教1602的问题这是一个1602两行显示的程序
请注意红色while的死循环语句
当我加上这句时,1602不显示。(为什么?)
当去掉这句时,1602循环显示(正确的):
Temperature:
Speed:
还有就是当我主函数中只执行初始化函数时,1602仍然是第一行全黑第二行全白。难道是我的初始化函数有问题?
请教了
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^4;
sbit RW=P2^5;
sbit E =P2^6;
uchar code table[]="Temperature:";
uchar code table1[]="Speed:";
void delay(uint t); //函数声明
void SendCommandByte(uchar);
void SendDataByte(uchar);
void InitLcd();
void DisplayMsg(uchar *p);
//==================================================
void main()
{
uchar num;
delay(1000);
InitLcd();
SendCommandByte(0x80);
for(num=0;num<12;num++)
{
SendDataByte(table[num]);
delay(100);
}
SendCommandByte(0x80+0x40);
for(num=0;num<6;num++)
{
SendDataByte(table1[num]);
delay(100);
}
while(1);
}
//-----------------------------------------------------
void delay(uint t) // 延时函数
{
for(;t!=0;t--) ;
}
//------------------------------------------------------
void SendCommandByte(uchar cmd) // 向LCD写命令;
{
RS=0;
P0=cmd;
delay(1000);
E=1;
delay(1000);
E=0;
}
//-------------------------------------------------------
void SendDataByte(uchar dat) // 向LCD写数据
{
RW=0;
RS=1;
P0=dat;
delay(1000);
E=1;
delay(1000);
E=0;
}
//-------------------------------------------------
void InitLcd() // 初始化LCD
{
P0=0xff;
E=0;
SendCommandByte(0x38); //设置工作方式,不检测忙信号
delay(100);
SendCommandByte(0x38);
delay(100);
SendCommandByte(0x38);
delay(100);
SendCommandByte(0x38);
SendCommandByte(0x08); //显示关闭
SendCommandByte(0x01); //清屏
SendCommandByte(0x06); //显示状态设置
SendCommandByte(0x0f); //输入方式设置
} |