1602液晶显示,程序显示不了东西
#define LCD P0
sbit EN=P2^7;
sbit RW=P2^5;
sbit RS=P2^6;
void DINGSHIQI() //定时器设置
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
}
void delay(char H,char L)//延时函数
{
TF0=0;TH0=H;TL0=L;
}
void lcdwritecom(char com)
{
RW=0;
RS=0;
EN=1;
delay(0xf4,0x48);//延时
LCD=com;
delay(0xf4,0x48);
EN=0;
}
void lcdwritedata(char dat)
{
RW=0;
RS=1;
EN=1;
delay(0xf4,0x48);
LCD=dat;
delay(0xf4,0x48);
EN=0;
}
void lcdchushihua()//1602初始化
{
lcdwritecom(0x01);
lcdwritecom(0x06);
lcdwritecom(0x0f);
lcdwritecom(0x14);
lcdwritecom(0x80);
}
/*-------------------------------------*/
void main()
{
char T[]="STARBUCKS";
int i;
lcdchushihua();
for(i=0;i<9;i++)
{
lcdwritedata(T[i]);
}
while(1)
{
}
}
他就是显示不了任何东西,真的很郁闷,我是新手,才刚开始学1602,之前写过一个类似的显示的还好,这个就不知道哪出问题了,调不出来。
PS:程序不够标准,望误喷。
void DINGSHIQI() //定时器设置
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
}
void delay(char H,char L)//延时函数
{
TF0=0;TH0=H;TL0=L;
}请问这是什么延时程序?
这是我看别人的,后来我也在思考,感觉这个不能延时,那我想请问一下子,用定时器做定时的基本套路有么?
还有我改了一下:
#include<reg51.h>
#define t P0
sbit RS=P2^6;
sbit RW=P2^5;
sbit EN=P2^7;
void delay(int c)
{
char a,b;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
void lcdwritecom(char com)
{
RS=0;
RW=0;
EN=1;
delay(10);
t=com;
delay(10);
EN=0;
}
void lcdwritedata(char dat)
{
RS=1;
RW=0;
EN=1;
delay(10);
t=dat;
delay(10);
EN=0;
}
void lcdchushihua(void)
{
lcdwritecom(0x01);//清屏
lcdwritecom(0x0c);//开显示,开光标,光标闪烁
lcdwritecom(0x06);//AC自加一
lcdwritecom(0x14);//八位数据总线,显示双行
lcdwritecom(0x80);//初始地址
}
void main()
{
char lcd[]="MH370 GO HOME ;MH370 GO HOME";
int i;
lcdchushihua();
for(i=0;i<27;i++)
{
lcdwritedata(lcd);
}
while(1)
{
}
}
他还是啥也不出,我真的不晓得哪里出错了,请你帮看下。
刚学,或许是基本的使用没掌握,但自己搞不明白,写的略乱,见谅。
char lcd[]="MH370 GO HOME ;MH370 GO HOME";
这个为什么写在main里面?
for(i=0;i<27;i++)
{
lcdwritedata(i);//这个值为 i
}
我改了,还是不对,还有,我想输出一个字符串,里面为啥只是个 i 呢?这个字符串定义在里面会有什么影响么?
他这个写在MAIN里面是没有问题的!MAIN开头是允许定义变量的!
for(i=0;i<27;i++)
{
lcdwritedata(lcd);
}四楼说对了!
for(i=0;i<27;i++)
{
lcdwritedata(lcd[i]);
}四楼说对了!
没细看,不过使用定时的时器延时的时候不使用延时最好使用查询法,不要使用中断
呵呵,没那么写过!
你的lcd初始化和写命令写数据的程序有错
#include<reg51.h>
#define LCD P0
sbit EN=P2^7;
sbit RW=P2^5;
sbit RS=P2^6;
void DINGSHIQI() //定时器设置
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
}
void delay(char H,char L)//延时函数
{
TF0=0;TH0=H;TL0=L;
}
void lcdwritecom(char com)
{
RW=0;
RS=0;
EN=0;
LCD=com;
delay(0xf4,0x48);//延时
EN = 1;
delay(0xf4,0x48);
EN=0;
}
void lcdwritedata(char dat)
{
RW=0;
RS=1;
EN=0;
delay(0xf4,0x48);
LCD=dat;
delay(0xf4,0x48);
EN = 1;
delay(0xf4,0x48);
EN=0;
}
void lcdchushihua()//1602初始化
{
lcdwritecom(0x38);
lcdwritecom(0x0C);
lcdwritecom(0x06);
lcdwritecom(0x01);
lcdwritecom(0x80);
}
/*-------------------------------------*/
void main()
{
char T[]=" STARBUCKS";
int i;
lcdchushihua();
for(i=0;i<10;i++)
{
lcdwritedata(T[i]);
}
while(1)
{
}
}