标题: 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[]="WWW,COM 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 |