8*8点阵显示问题
一个51加上两个595,显示数据很正常,图形写好数组,把驱动放进主循环,一点错没有,显示也正常,可是我用串口来驱动显示的时候,竟然会出现乱码,后来想到命令太快,中间加一个清屏的命令,就是把点阵都灭了再去显示,可是还是不行,问题处在了哪里?主循环如下
for(j=0;j<8;j++)
{
Send_Byte(Table2); //送每一行的列选值
Send_Byte(row); //分别扫描每一行,一次一行
R_CLK=1; //Send_Byte中置低了
R_CLK=0; //再次变低
row=_cror_(row,1);
} 这里的代码看不出问题
“串口来驱动显示”详细说一下。
没有看懂。你的代码里面没有描述是怎么用串口控制的,怎么用串口驱动显示的? LcwSwust 发表于 2021-2-19 21:22
这里的代码看不出问题
“串口来驱动显示”详细说一下。
感谢楼上的回复,其实串口部分很简单
void process()
{
uchar xdata Com;
if(0x35==read_p)
{
Com=read_p;// 取出命令
if(Com==0x36)
{ dip=1;} //显示第一个字符
if(Com==0x37)
{ dip=2;} //显示第二个字符
}
对应主循环里的如下
while(1)
{
if(dip==1)
{
for(j=0;j<8;j++)
{
Send_Byte(Table1); //送每一行的列选值 清屏20ms然后去显示新的图形
Send_Byte(row); //分别扫描每一行,一次一行
R_CLK=1; //Send_Byte中置低了
R_CLK=0; //再次变低
row=_cror_(row,1);
}
}
chuandaoxy 发表于 2021-2-20 09:15
感谢楼上的回复,其实串口部分很简单
void process()
这些代码看起来也是没有问题的,要不row在循环之前给个初值看看? LcwSwust 发表于 2021-2-20 09:23
这些代码看起来也是没有问题的,要不row在循环之前给个初值看看?
给了,我总是怀疑595的反应速度慢,需要延时,但是尝试几种方法都没起作用
void main()
{
uchar j=0,row;
My_OE=0;
Init_Com();
ES=1;
EA=1;
row=0x80;
while(1)
{
if(dip==1)
{/* if(dis==1) {
for(j=0;j<8;j++)
{
Send_Byte(Table1); //送每一行的列选值 清屏20ms然后去显示新的图形
Send_Byte(row); //分别扫描每一行,一次一行
R_CLK=1; //Send_Byte中置低了
R_CLK=0; //再次变低
row=_cror_(row,1);
}
}*/
本帖最后由 chuandaoxy 于 2021-2-20 12:43 编辑
chuandaoxy 发表于 2021-2-20 11:55
给了,我总是怀疑595的反应速度慢,需要延时,但是尝试几种方法都没起作用
void main()
现在测试的现象是,如果在主循环存在选择,就会乱码,如果就显示一个图形,是正确的
最新的尝试如下,也没成功
while(1)
{
row=0x80;
for(j=0;j<8;j++)
{
if(dip==1)
{Send_Byte(Table1);}
if(dip==2)
{Send_Byte(Table);}
if(dip==3)
{Send_Byte(Table2);}
Send_Byte(row); //分别扫描每一行,一次一行
R_CLK=1; //Send_Byte中置低了
R_CLK=0; //再次变低
row=_cror_(row,1);
}
}
chuandaoxy 发表于 2021-2-20 12:29
现在测试的现象是,如果在主循环存在选择,就会乱码,如果就显示一个图形,是正确的
最新的尝试如下,也 ...
那就不是串口的问题了
while(1)之前给dip一个值呢 LcwSwust 发表于 2021-2-20 14:01
那就不是串口的问题了
while(1)之前给dip一个值呢
给了,如下,就是关闭显示的命令
EA=1;
row=0x80;
for(j=0;j<8;j++)
{
Send_Byte(Table1);
Send_Byte(row); //分别扫描每一行,一次一行
R_CLK=1; //Send_Byte中置低了
R_CLK=0; //再次变低
row=_cror_(row,1);
}
while(1)
chuandaoxy 发表于 2021-2-20 14:10
给了,如下,就是关闭显示的命令
EA=1;
没看到,我的意思是:
dip=1;
while(1)
{
row=0x80;
for......
} LcwSwust 发表于 2021-2-20 18:27
没看到,我的意思是:
dip=1;
还是不行,奇了怪了。
chuandaoxy 发表于 2021-2-22 11:12
还是不行,奇了怪了。
真奇怪
若是不涉密,可以把完整的工程发上来看看。 串口输出不符合595的时序要求?
不用串口驱动显示正常?
页:
[1]