标题: keil编译1602滚动显示程序,总是有一处语法错误 [打印本页]

作者: 浮生若梦。    时间: 2018-12-25 21:47
标题: keil编译1602滚动显示程序,总是有一处语法错误
我这个打的有问题吗,为什么总是有一处语法错误,求大佬指教。

main.c
#include"main.h"
void main()
{
        init_lcd();
        while(1);
        {
                display();
        }
}
1602. C
#include"1602.h"

unsigned char code t0[]="Welcome to the";
unsigned char code t1[]="world of MCU!!!";
unsigned char code t2[]="Fighting!!!!!";

void delay(unsigned int time)
{
        unsigned int i,j;
        for(i=0;i<time;i++)
                for(j=0;j<200;j++);
}

void write_com(unsigned char com)
{
        lcdrs=0;
        P0=com;
        delay(1);
        lcden=1;
        delay(1);
        lcden=0;
}

void write_date(unsigned char date)
{
        lcdrs=1;
        P0=date;
        delay(1);
        lcden=1;
        delay(1);
        lcden=0;
}

void init_lcd()
{
        lcden=0;
        lcdrw=0;
        write_com(0x0f);
        write_com(0x38);
        write_com(0x01);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x80);
}

void display()
{
        unsigned int i;

        write_com(0x80);
        for(i=0;i<16;i++)
        {
                write_date(t0);
        }
        delay(500);
        write_com(0x80+0x40);
        for(i=0;i<16;i++)
        {
                write_date(t1[ i]);
        }
        delay(500);
        write_com(0x01);
        write_com(0x80);
        for(i=0;i<16;i++)
        {
                write_date(t1[ i]);
        }
         delay(500);
        write_com(0x80+0x40);
        for(i=0;i<16;i++);
        {
                write_date(t2);
        }
        delay(500);
        write_com(0x01);
}
Main.h
#include"reg52.h"
#include"1602.h"
1602.H
#include"reg52.h"
sbit lcdrs=P2^0;
sbit lcdrw=P2^1;
sbit lcden=P2^2;

void delay(unsigned int time);
void write_com(unsigned char com);
void write_com(unsigned char date);
void init_lcd();
void display();

Build target 'Target 1'
compiling main.c...
compiling 1602.c...
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?DISPLAY?1602
Program Size: data=11.0 xdata=0 code=329
creating hex file from "main"...
"main" - 0 Error(s), 1 Warning(s).

作者: luolina    时间: 2018-12-25 22:51
是不是要这样啊write_data(t0[i]);
作者: 1113634577    时间: 2018-12-26 07:29
不是错误,是警告,编译可运行,有1个子程序在main内未使用
作者: HC6800-ES-V2.0    时间: 2018-12-26 08:10
新手的典型错误!!!!!
警告是说,你的display()函数没有用上,我一看你的程序,果然是这个错误:
while(1);
这里不能有那个分号啊!!!!!
作者: wulin    时间: 2018-12-26 08:44
void main()
{
        init_lcd();
        while(1);//多了分号
        {
                display();
        }
}
整理后的程序
#include"reg52.h"
sbit lcdrs=P2^0;
sbit lcdrw=P2^1;
sbit lcden=P2^2;
unsigned char code t0[]="Welcome to the";
unsigned char code t1[]="world of MCU!!!";
unsigned char code t2[]="Fighting!!!!!";
void delay(unsigned int time);
void write_com(unsigned char com);
void write_com(unsigned char date);
void init_lcd();
void display();

void main()
{
        init_lcd();
        while(1)
        {
                display();
        }
}

void delay(unsigned int time)
{
        unsigned int i,j;
        for(i=0;i<time;i++)
                for(j=0;j<200;j++);
}

void write_com(unsigned char com)
{
        lcdrs=0;
        P0=com;
        delay(1);
        lcden=1;
        delay(1);
        lcden=0;
}

void write_date(unsigned char date)
{
        lcdrs=1;
        P0=date;
        delay(1);
        lcden=1;
        delay(1);
        lcden=0;
}

void init_lcd()
{
        lcden=0;
        lcdrw=0;
        write_com(0x0f);
        write_com(0x38);
        write_com(0x01);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x80);
}

void display()
{
        unsigned int i;       
        write_com(0x80);
        for(i=0;i<16;i++)
        {
                write_date(t0);
        }
        delay(500);
        write_com(0x80+0x40);
        for(i=0;i<16;i++)
        {
                write_date(t1[ i]);
        }
        delay(500);
        write_com(0x01);
        write_com(0x80);
        for(i=0;i<16;i++)
        {
                write_date(t1[ i]);
        }
        delay(500);
        write_com(0x80+0x40);
        for(i=0;i<16;i++);
        {
                write_date(t2);
        }
        delay(500);
        write_com(0x01);
}

作者: wh8010jky    时间: 2018-12-26 09:35
while(1);  这里的分号造成了{}里的delay函数不运行,程序在分号处死循环,也就是停在这里,什么也不干。
作者: jll586    时间: 2018-12-26 11:49
语法错误应该不能编译成功吧,看到楼主写的代码,就想起自己写的了,感同身受,我们要努力学习
作者: DamnS    时间: 2018-12-26 19:55
只是一个警告,不是错误,编译就行
作者: wh8010jky    时间: 2018-12-26 22:33
wulin 发表于 2018-12-26 08:44
void main()
{
        init_lcd();

void main()
{
        init_lcd();
        while(1)
        {
                display();
        }
}

5楼兄台,这里整理完还是有问题的吧?while(1),永远跳不出这个循环,这里除了显示其他什么都不做,而且显示也不能调控,有什么意思吗?想跳出来就应该加break;




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1