标题: AT89S51程序下载后能正常运行,断电重启后却不能正常运行了? [打印本页]

作者: gxjhgxjh    时间: 2020-7-8 21:14
标题: AT89S51程序下载后能正常运行,断电重启后却不能正常运行了?
AT89S51下载后能正常运行断电重启后却不能正常运行了,不知道是哪里出问题,网上也没有搜到解决方法 。程序是1602液晶屏的,我改了一点给40266液晶屏用 ,不知道是不是程序的问。特来这里求助,请知道的指点一下。谢谢 !

就是下面这个程序:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table0[]="QQJL WEIXINDOUSHIJIAOLIUGONGJU";  //31字符
uchar code table1[]="WWWCOM WANGZJI";  //15
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(0x06);//LCD开显示,光标不显示、不闪烁
         write_com(0x06);//当读或写一个字符后地址指针加一且光标加一,整屏显示不移动
         write_com(0x01);//数据指针和所有显示清零
   
}
void main()
{      
         init();
         //第一行显示
         write_com(0x80+0x10);//第一行第一字符位置
         for(num=0;num<31;num++)   //这个数字20就是显示字数 个数
         {
                  write_data(table0[num]);
                  delay(200);
         }
         //第二行显示
         write_com(0x80+0x50);  
         for(num=0;num<15;num++)
         {
                  write_data(table1[num]);
                  delay(200);
         }
         for(num=0;num<40;num++)  
{
   write_com(0x18);     
   delay(200);
}
  while(1);
}



作者: man1234567    时间: 2020-7-9 09:58
重新刷一下单片机,疑似这货有问题。
作者: f556    时间: 2020-7-9 11:36
估计是硬件问题,重点关注复位、晶振2个部分,其它MCU我遇过有时正常,有时不能开机(LCD无显示)
作者: 我系_源    时间: 2020-7-9 11:45
估计是硬件问题,检查一下复位
作者: 小黑的大表舅    时间: 2020-7-9 11:48
可能是硬件问题,这种问题一般出现不在代码上面
作者: gxjhgxjh    时间: 2020-7-9 21:39
谢谢楼上的回复。
我刚开始也以为是硬件的问题,做了实验应该是代码的问题,换另外的代码就正常。
又在网上搜索学习一番,严重怀疑代码有问题,可能就是最后的移屏代码次序错了。现在这样:  write_com(0x18);     
   delay(200);
}
  while(1);
}
可能应该改为:
while(1);
{  write_com(0x18);     
   delay(200);
}
马上实验可是那里的问题。
作者: gxjhgxjh    时间: 2020-7-9 22:09
刚才试验了一下语法有错误通不过,还得好好学习一看怎么办。
作者: gxjhgxjh    时间: 2020-7-14 22:25
多谢各位的回复
问题找到了就代码的问题,这个代码固定显示好用,增加移屏显示不好用,改用别的代码后就正常了。




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