chuandaoxy 发表于 2021-2-19 21:10

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

这里的代码看不出问题
“串口来驱动显示”详细说一下。

xyz549040622 发表于 2021-2-19 22:07

没有看懂。你的代码里面没有描述是怎么用串口控制的,怎么用串口驱动显示的?

chuandaoxy 发表于 2021-2-20 09:15

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);                                              
         }
               }
                               
               

LcwSwust 发表于 2021-2-20 09:23

chuandaoxy 发表于 2021-2-20 09:15
感谢楼上的回复,其实串口部分很简单
void process()



这些代码看起来也是没有问题的,要不row在循环之前给个初值看看?

chuandaoxy 发表于 2021-2-20 11:55

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:29

本帖最后由 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);                                              
         }
               }
               

LcwSwust 发表于 2021-2-20 14:01

chuandaoxy 发表于 2021-2-20 12:29
现在测试的现象是,如果在主循环存在选择,就会乱码,如果就显示一个图形,是正确的

最新的尝试如下,也 ...

那就不是串口的问题了
while(1)之前给dip一个值呢

chuandaoxy 发表于 2021-2-20 14:10

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)

LcwSwust 发表于 2021-2-20 18:27

chuandaoxy 发表于 2021-2-20 14:10
给了,如下,就是关闭显示的命令
EA=1;



没看到,我的意思是:

dip=1;
while(1)
{
row=0x80;
for......
}

chuandaoxy 发表于 2021-2-22 11:12

LcwSwust 发表于 2021-2-20 18:27
没看到,我的意思是:

dip=1;


还是不行,奇了怪了。

LcwSwust 发表于 2021-2-22 11:56

chuandaoxy 发表于 2021-2-22 11:12
还是不行,奇了怪了。

真奇怪
若是不涉密,可以把完整的工程发上来看看。

ningling_21 发表于 2021-2-23 14:01

串口输出不符合595的时序要求?
不用串口驱动显示正常?
页: [1]
查看完整版本: 8*8点阵显示问题