中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

单片机论坛

抖音 德嘉 泓格论坛 FLIR红外热像论坛
工控论坛首页 单片机论坛 → 浏览主题:  求教利用protues仿真LED点阵时的问题[求助]
发表新帖 回复该主题
回帖:0个,阅读:778 [上一页] [1] [下一页]
* 帖子主题:

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

分享到
703
genius19888
文章数:1
年度积分:50
历史总积分:703
注册时间:2011/5/19
发站内信
发表于:2011/5/19 20:28:53
#0楼
如题,毕业设计做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原理图:
附件: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
}
=================
这样程序只能接收一个汉字的字模显示,能否帮忙修改下能接收多个字模数据?


[此贴子已经被作者于2011/5/19 20:36:26编辑过]
工控学堂推荐视频:

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003