求教利用protues仿真LED点阵时的问题

genius19888 2011-05-19 05:05:36
如题,毕业设计做LED点阵显示屏,用protues仿真时,下位机直接显示文字没有问题了,就是利用串口调试助手送字模显示时两侧会出现少许乱码,求教是程序出问题还是送的字模有问题:
系统原理图:
送字模显示出现乱码图:
利用串口助手发送的字模数据是业的字模:00 02 08 02 06 02 01 C2 00 02 FF FE 00 02 00 02 00 02 FF FE 00 42 00 82 03 02 0C 02 00 02 00 00
===========================================
下位机循环左移程序和protues原理图下载地址:
http://u.115.com/file/aqb9hnst#Download
lizi.rar

===========================================
下位机串口通信显示汉字程序:
#include <REGX51.H>
#define FOSC 12 //定义晶振频率
#define INIT_TH0 0x3C //定时器T0初始值
#define INIT_TL0 0xB0
#define TMOD_T00 0x00 //定义T0为方式0,GATE=0,C/T=0,13位计数器
#define TMOD_T01 0x01 //定义T0为方式1,GATE=0,C/T=0,16位计数器
#define TMOD_T02 0x02 //定义T0为方式2,GATE=0,C/T=0,自动装入8位
//计数器
#define TMOD_T03 0x03 //定义T0为方式3,GATE=0,C/T=0,定时器0分成
//两个8位计数器,定时器1停止计数
#define uchar unsigned char //缩定定义
#define uint unsigned int

/*P1口位定义*/
/*P2 BIT Define*/
/*P3 bit define*/
/************位定义************/
sbit STTP = P2^7;


/************函数声明*************/
void delay(); //延时函数
void out_rxd(uchar *d); //汉字输出

/************汉字点阵*************/
unsigned char hanzi[1][32];
char code kong[6][32]=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//显示空屏,如果只有一个字或将字全部移出必须设置一个空屏幕
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

/************主函数***************/
void main()
{
unsigned char i,j,k; //i:每个字的显示循环;j每个字的显示码除以2;k每列
//刷新次数
unsigned int b=0; //显示偏移控制,char类型最多只能显示14个汉字加一个
//空白位字符
unsigned char a; //控制移动间隔时间
TMOD=0x20;TH1=0xfa;TL1=0xfa;TR1=1;
SCON=0x50;PCON=0x80;

for(i=0;i<32;i++)
{
while(RI==0);
RI=0;
hanzi[0][i]=SBUF;
}
TR1=0;SCON=0x00;
while(1)
{
j=0;
if(a>10) //移动间隔时间;取值0--255
{
a=0;
b+=2;
if(b>=256) //显示到最后一个字,回头显示,判断值=字数*32
{
b=0;
}
}
for(i=0;i<16;i++)
{
P1=i;
for(k=0;k<1;k++)
{
STTP = 0;
out_rxd(&hanzi[5][j+b+1]);
out_rxd(&hanzi[5][j+b]);
out_rxd(&hanzi[4][j+b+1]);
out_rxd(&hanzi[4][j+b]);
out_rxd(&hanzi[3][j+b+1]);
out_rxd(&hanzi[3][j+b]);
out_rxd(&hanzi[2][j+b+1]);
out_rxd(&hanzi[2][j+b]);
out_rxd(&hanzi[1][j+b+1]);
out_rxd(&hanzi[1][j+b]);
out_rxd(&hanzi[0][j+b+1]);
out_rxd(&hanzi[0][j+b]);
STTP = 1;
delay();
}
j=j+2;
a++;

}

}
}

/************子函数**************/

void delay()/*延时子程序*/
{unsigned int n;
for(n=0;n<250;n++)
{;}
}

void out_rxd(uchar *d)
{
SBUF = *d; //启动串行口传送
while(TI == 0); //等待串口传送结束
TI = 0; //将串口中断标志位置0
}
...全文
498 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hnf20092009 2011-05-30
  • 打赏
  • 举报
回复
看不到你的原理图
Cheng_Yang__ 2011-05-24
  • 打赏
  • 举报
回复
路过,帮你顶
genius19888 2011-05-20
  • 打赏
  • 举报
回复
额,还是没人能解决乱码吗?唉。。。接收多个汉字已经可以实现,就差乱码了。。求救啊
genius19888 2011-05-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lianlian521 的回复:]
字模没问题, 只是不明白你的 kong为什么没用到呢,只是显示hanzi?
[/Quote]kong那段是下位机循环显示时一个空屏幕用的,通信时只要送一个字模数据进去显示,就没用到,没删。。。额,另外可不可以帮修改程序可以接收多个字模数据?
genius19888 2011-05-19
  • 打赏
  • 举报
回复
没人指点吗?求救额。。。
lianlian521 2011-05-19
  • 打赏
  • 举报
回复
字模没问题, 只是不明白你的 kong为什么没用到呢,只是显示hanzi?

27,520

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧