数码之家

 找回密码
 立即注册
搜索
查看: 1789|回复: 10

液晶屏程序只增加了显示字符数就不能正常编译了是啥问题

[复制链接]
发表于 2020-7-4 15:30:39 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
正常编译的程序:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

uchar codetable0[]="ABCDEFGHIJKLMNOPQRST"; //20字符
uchar code table1[]="01234567890123456789";
uchar num;
sbit lcden=P2^7;
sbit lcdrs=P2^6;
void delay(uint z)//延时函数
{
         uintx,y;
         for(x=z;x>0;x--)
                  for(y=110;y>0;y--);
}

void write_com(uchar com)//LCD写指令函数
{
         lcdrs=0;//LCDRS为低时写指令
         P0=com;//LCD数据口送指令
         delay(5);//延时5毫秒
         lcden=1;
         delay(5);
         lcden=0;
}

void write_data(uchar date)//LCD写数据函数
{
         lcdrs=1;//LCDRS为低时写数据
         P0=date;//LCD数据口送数据
         delay(5);//延时5毫秒
         lcden=1;
         delay(5);
         lcden=0;
}

void init()//初始化函数
{

         lcden=0;//LCD使能信号端置零
         write_com(0x38);//LCD写显示模式设置的指令
         write_com(0x0c);//LCD开显示,光标不显示、不闪烁
         write_com(0x06);//当读或写一个字符后地址指针加一且光标加一,整屏显示不移动
         write_com(0x01);//数据指针和所有显示清零
}

void main()
{      
         init();
         //第一行显示
         write_com(0x80+0x00);
         for(num=0;num<20;num++)
         {
                  write_data(table0[num]);
                  delay(200);
         }
         //第二行显示
         write_com(0x80+0x40);  
         for(num=0;num<20;num++)
         {
                  write_data(table1[num]);
                  delay(200);
         }

         while(1);
}
只把下面这两行改动了一下,增加了现实字符数,就编译不过去了是啥原因请高手指点一下。
uchar code table0[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456";  //20字符
uchar code table1[]="01234567890123456789abcdefghijklmnopqrst";

谢谢!
发表于 2020-7-4 19:01:26 | 显示全部楼层
复制编译了一下,并没有错误,除了少了2个空格

打赏

参与人数 1家元 +10 收起 理由
家睦 + 10

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-4 19:49:03 | 显示全部楼层
谢谢楼上的回复。
你说的空格是哪个地方呀?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-4 19:59:46 | 显示全部楼层
编译结果提示:
linking...
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  ?C_START
    MODULE:  .\Objects\STARTUP.obj (?C_STARTUP)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  ?C_START
    MODULE:  .\Objects\STARTUP.obj (?C_STARTUP)
    ADDRESS: 000DH
Program Size: data=9.0 xdata=0 code=15
creating hex file from ".\Objects\lcd40"...
".\Objects\lcd40" - 0 Error(s), 2 Warning(s).
回复 支持 反对

使用道具 举报

发表于 2020-7-4 22:32:36 | 显示全部楼层
缺少两个空格,加上后增加字符编译没有错误也没有警告

error.png

打赏

参与人数 1家元 +10 收起 理由
家睦 + 10

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-5 10:57:27 | 显示全部楼层
谢谢楼上的回复。仔细对比了一下那两个空格在编译软件是正常有的,可能是在来回复制过程中出现了变化。
2020-07-05_104118.png
也不知道那里犯病了,同样的代码编译过程中经常出错。
就这个程序偶然编译通过,烧录到AT59S51中,但是使用结果却达不到要求,明明改为40个字符了,但是显示的还是20个字符。
点阵液晶屏不是只设置字符的显示首位地址吗?我用的40266液晶屏可以显示40个字符,可是我用了好几个代码,只能显示源代码的字符数,改动字符数后还是显示源代码的16或20个字符,不能显示40个字符,不知道哪里出问题了,也请高手给予指点。谢谢!
微信图片_20200626211828.jpg
回复 支持 反对

使用道具 举报

发表于 2020-7-6 20:28:27 | 显示全部楼层
gxjhgxjh 发表于 2020-7-5 10:57
谢谢楼上的回复。仔细对比了一下那两个空格在编译软件是正常有的,可能是在来回复制过程中出现了变化。

也 ...

对于程序,代码,编译器,请不要用犯病这个词。

你不会想知道,到底是什么真的犯病了。
回复 支持 反对

使用道具 举报

发表于 2020-7-8 01:55:56 来自手机浏览器 | 显示全部楼层
gxjhgxjh 发表于 2020-7-5 10:57
谢谢楼上的回复。仔细对比了一下那两个空格在编译软件是正常有的,可能是在来回复制过程中出现了变化。

也 ...

把这下面一段的num<20改为num<40,两个地方都改,试试看。

         for(num=0;num<20;num++)
         {
                  write_data(table0[num]);
                  delay(200);
         }
         //第二行显示
         write_com(0x80+0x40);  
         for(num=0;num<20;num++)
         {

打赏

参与人数 1家元 +20 收起 理由
家睦 + 20

查看全部打赏

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-7-9 10:25:12 | 显示全部楼层
谢谢楼上的回复
问题解决就是你说的原因,因为不懂c语言所以代码改动不完全,通过学习知道了for(num=0;num<20;num++)这句代码的意思,就是要显示多少字就要循环多少次。
还有就是编译过程还是总出现问题,同样教程一样的步骤一样的代码每次编译的结果不同,就是找不出问题出在哪里!
回复 支持 反对

使用道具 举报

发表于 2020-9-29 16:41:13 | 显示全部楼层
等于是要写40次数据过去。。。你没改前只写了20个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-19 18:29 , Processed in 0.296400 second(s), 14 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表