打印

[求助]新手请教1602 C程序问题

[复制链接]
1678|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xqhe|  楼主 | 2007-8-27 00:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    写了个1602的程序,调试时发现刚开始时显示正常,但过不久显示混乱.软件仿真时,发现字符串lcd_1,lcd_2均被修改.
   解决一,在main函数最后加上while(1);的超级循环,OK.
   解决二,把lcd_1,lcd_2定义在code区,同样OK.

请问:
一:在main函数后为什么加个while(1);就可以,难道
LCD_int();write_string_LCD(0,lcd_1);write_string_LCD(1,lcd_2);
会被不断执行?
二:字符串被修改,程序错在那里?

还是别有原因?盼答


#include<at89x52.h>

#define rs P3_6
#define rw P3_5
#define e P3_4

const char lcd_1[]={"welcom to china "};
const char lcd_2[]={" Right Reserved "};
 
void delay(const int MS)           

    {    int t;
      for(t=0;t<MS;t++);
    }


void write_LCD(const bit flag,const char data_G)//写函数
     { 
       e=0;
       rs=flag; 
       rw=0;      
       e=1;
       P1=data_G;
       e=0;
     }


void write_string_LCD(const bit line,const char str[])//写字符串函数
     {
       char x;

      if(line==0)     //行     
        {      
          write_LCD(0,0x80|0x00);
        } 
      else
        {
          write_LCD(0,0x80|0x40);
        }

        delay(50);

        for(x=0;x<16;x++)
           {  
           write_LCD(1,str[x]);
           delay(50);
           }      
   }

void LCD_int()          //初始化

    { 
    char i;
    for(i=0;i<3;i++)
          {   
        delay(3000);
        write_LCD(0,0x38);
          }
     write_LCD(0,0x38);
        delay(50);
     write_LCD(0,0x06);
         delay(50);
     write_LCD(0,0x0E);
           delay(50);
     write_LCD(0,0x01);
         delay(50);
          
    }

void main()
{      
   LCD_int();  
   write_string_LCD(0,lcd_1);
   write_string_LCD(1,lcd_2);
}

相关帖子

沙发
computer00| | 2007-8-27 01:31 | 只看该作者

倒塌...当然要加while(1)了,

不然执行完了,后面怎么办? 要有个主循环。

使用特权

评论回复
板凳
htl330| | 2007-8-27 08:22 | 只看该作者

回复一楼

不加死循环,岂不执行一次就没了

使用特权

评论回复
地板
xqhe|  楼主 | 2007-8-27 10:03 | 只看该作者

那为什么定义到code区也可以呢?

使用特权

评论回复
5
computer00| | 2007-8-27 10:36 | 只看该作者

程序跑飞了吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

46

帖子

0

粉丝