找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2468|回復: 8
打印 上一主題 下一主題
收起左側

keil編譯1602滾動顯示程序,總是有一處語法錯誤

[復制鏈接]
跳轉到指定樓層
樓主
ID:454913 發(fā)表于 2018-12-25 21:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我這個打的有問題嗎,為什么總是有一處語法錯誤,求大佬指教。

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).
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:446654 發(fā)表于 2018-12-25 22:51 | 只看該作者
是不是要這樣啊write_data(t0[i]);
回復

使用道具 舉報

板凳
ID:371527 發(fā)表于 2018-12-26 07:29 | 只看該作者
不是錯誤,是警告,編譯可運行,有1個子程序在main內未使用
回復

使用道具 舉報

地板
ID:164602 發(fā)表于 2018-12-26 08:10 | 只看該作者
新手的典型錯誤。。。!
警告是說,你的display()函數沒有用上,我一看你的程序,果然是這個錯誤:
while(1);
這里不能有那個分號。。。。!
回復

使用道具 舉報

5#
ID:213173 發(fā)表于 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);
}
回復

使用道具 舉報

6#
ID:134430 發(fā)表于 2018-12-26 09:35 | 只看該作者
while(1);  這里的分號造成了{}里的delay函數不運行,程序在分號處死循環(huán),也就是停在這里,什么也不干。
回復

使用道具 舉報

7#
ID:357520 發(fā)表于 2018-12-26 11:49 | 只看該作者
語法錯誤應該不能編譯成功吧,看到樓主寫的代碼,就想起自己寫的了,感同身受,我們要努力學習
回復

使用道具 舉報

8#
ID:455797 發(fā)表于 2018-12-26 19:55 | 只看該作者
只是一個警告,不是錯誤,編譯就行
回復

使用道具 舉報

9#
ID:134430 發(fā)表于 2018-12-26 22:33 | 只看該作者
wulin 發(fā)表于 2018-12-26 08:44
void main()
{
        init_lcd();

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

5樓兄臺,這里整理完還是有問題的吧?while(1),永遠跳不出這個循環(huán),這里除了顯示其他什么都不做,而且顯示也不能調控,有什么意思嗎?想跳出來就應該加break;
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表