微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 1602液晶显示,程序显示不了东西

1602液晶显示,程序显示不了东西

时间:10-02 整理:3721RD 点击:
#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=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)
{
}
}








Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top