本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
我编程单独使用12864和rs232的时候没有问题 但是同时使用问题出现了
问题如下:
我通过串口通信,用串口助手将数据发到单片机,然后希望在12864上显示。但是问题出现了,如果一次只发一个或者两个字节,则显示正确。如果超过2字节就乱码了。比如,我发送11111111,只显示1111;发“我的”,只显示“我”,再发一次则显示“XX”(注:这两个字我不认识,反正是两个汉字)。我的12864是带中文字模的。这是怎么回事啊。一次发送的东西越多 则越乱码。
另外一个更郁闷的问题。我设置了一个开机显示。开机就自动显示“欢迎使用XX……”等内容。但是如果我不在main函数定义RI=0,则直接跳过这一指令不显示了。郁闷,RI串口中断标志怎么和12864联系上啦。
希望哪位大虾帮帮小弟,可以的话加我qq348986906,或者留言 感激不尽。一下是我的部分程序
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define comm 0
#define dat 1
sbit lcden=P3^4;
sbit RS=P3^5;
sbit PSB=P3^7;
sbit RW=P3^6;
uchar code power_on[]={
"欢迎 体验"
" team menber "
"我的单片机制作 "
"good luck"
};
uchar code work[]={"add: list: "};
/**************lcd写指令****************/
void wr_lcd(uchar dat_comm,uchar content)
{
if(dat_comm)
RS = 1; //data
else
RS = 0; //command
P0=content; //output data or comm
delay(1);
lcden = 1;
delay(2);
lcden = 0;
}
/***********初始化lcd*********************/
void lcdinit()
{
lcden=0;
PSB=1; /*并行*/
wr_lcd(comm,0x30); /*30---基本指令动作*/
wr_lcd(comm,0x01); /*清屏,地址指针指向00H*/
wr_lcd(comm,0x06); /*光标移动*/
wr_lcd(comm,0x0c); /*开显示,关游标*/
}
/************开机显示的程序*****************/
void power_on_disp(uchar code *open)
{
uchar i,j;
wr_lcd(comm,0x30);
wr_lcd(comm,0x80);
for(i=0;i<4;i++)
{
for(j=0;j<16;j++)
wr_lcd(dat,open[i*16+j]);
}
}
/***串口初始化程序,波特率9600****/
void initcom(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
}
/***************延迟*****************/
void delay(uint s)
{
uint x,y;
for(x=s;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{ RW=0;
lcdinit();
REN=1;
EA=1;
ES=1;
initcom();
clrram();
power_on_disp(power_on);//开机显示
delay(2000);
wr_lcd(comm,0x01);
work_disp(work);
delay(2000);
while(1){
RI=0; //问题就是这里,没有这句开机显示那句就不执行,很郁闷
while(RI) //就是这里问题
{
RI=0;
wr_lcd(dat,SBUF);
}
}
} |
|