horalxi 发表于 2012-4-17 21:20:27

51单片机求助

字符串的结束标志位'\0',
我以'\0'判断字符串的结束,
无法正确判断,代码如下:
uchar code tempstr[]="You are welcome.";

void display()
{
        for(i=0;;i++)
        {
               if(tempstr!='\0')
               {
                        SBUF=tempstr;
                        write_com(0x80+i);
                        delay(2);
                        write_date(tempstr);
                }
                       
        }
}

而如下代码测试没有问题,

void display()
{
        for(i=0;i<16;i++)
        {

                        SBUF=tempstr;
                        write_com(0x80+i);
                        delay(2);
                        write_date(tempstr);
                       
        }
}

请各位高手帮忙看看。

hhxb 发表于 2012-4-17 21:27:15

for(i=0;;i++)这里没有上限,程序会一直执行下去可能已经跑飞了。

bangbangji 发表于 2012-4-17 21:30:43

你改成:
      for(i=0;;i++)
      {
               if(tempstr!='\0')
               {
                        SBUF=tempstr;
                        write_com(0x80+i);
                        delay(2);
                        write_date(tempstr);
                }
                else
                  break;
                        
      }
可以运行正确,不过这么做程序结构还是不太好

gracialee 发表于 2012-4-17 21:33:42

程序要是沒死的话,它一直在发送着非零的字符。

horalxi 发表于 2012-4-17 22:25:22

两位:
一语点醒梦中人啊,代码改动如下:
void display()
{
        i=0;
        while(tempstr!='\0')
        {
                SBUF=tempstr;
                write_com(0x80+i);
                delay(2);
                write_date(tempstr);
                i++;
        }                       
}
调试成功!万分谢谢!

gracialee 发表于 2012-4-20 16:39:56

ksks,改成了就是爽是吧?

horalxi 发表于 2012-4-30 08:31:46

这几天忙,呵呵。
改完了很爽。
页: [1]
查看完整版本: 51单片机求助