找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2605|回复: 24
收起左侧

16*16点阵proteus仿真没有问题,但实物焊接后显示的不成字是什么问题?

  [复制链接]
ID:846159 发表于 2020-12-17 15:52 | 显示全部楼层 |阅读模式
100黑币
程序和仿真图如下#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp,num;
uchar a,c,d,e,v,b,m,n,f;
uchar i,j,z,k;/*各变量值的初始化*/
uchar flag=0;
uchar code table1[]={
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,
0xFF,0xFF,0x80,0x40,0x80,0x21,0xA0,0x12,
0x90,0x04,0x88,0x08,0x84,0x10,0x82,0x20,
0x80,0x20,0x80,0x40,0x80,0x40,0x00,0x00,
0x40,0x04,0x44,0x04,0x54,0x02,0x54,0x01,
0xD4,0xFE,0x54,0x92,0x74,0x92,0x5F,0x92,
0x54,0x92,0x54,0x92,0xD4,0xFE,0x54,0x01,
0x54,0x02,0x44,0x04,0x40,0x04,0x00,0x00,
0x04,0x20,0x84,0x60,0x84,0x20,0xFC,0x1F,
0x84,0x10,0x84,0x10,0x00,0x40,0xFE,0x44,
0x92,0x44,0x92,0x44,0xFE,0x7F,0x92,0x44,
0x92,0x44,0xFE,0x44,0x00,0x40,0x00,0x00,
0x00,0x20,0x04,0x20,0x04,0x20,0x04,0x20,
0x04,0x20,0x04,0x20,0x04,0x20,0xFC,0x3F,
0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,
0x04,0x20,0x04,0x20,0x00,0x20,0x00,0x00,
0x20,0x80,0x20,0x80,0x20,0x40,0x20,0x20,
0x20,0x10,0x20,0x0C,0x20,0x03,0xFF,0x00,
0x20,0x03,0x20,0x0C,0x20,0x10,0x20,0x20,
0x20,0x40,0x20,0x80,0x20,0x80,0x00,0x00,
0x40,0x04,0x30,0x04,0x11,0x04,0x96,0x04,
0x90,0x04,0x90,0x44,0x91,0x84,0x96,0x7E,
0x90,0x06,0x90,0x05,0x98,0x04,0x14,0x04,
0x13,0x04,0x50,0x04,0x30,0x04,0x00,0x00,
};
uchar code table2[]={
0x40,0x80,0x40,0x80,0x42,0x40,0x44,0x20,
0x58,0x18,0xC0,0x07,0x40,0x00,0x7F,0x00,
0x40,0x00,0xC0,0x3F,0x50,0x40,0x48,0x40,
0x46,0x40,0x40,0x40,0x40,0x78,0x00,0x00,
0x00,0x00,0x00,0x00,0xF8,0x1F,0x88,0x08,
0x88,0x08,0x88,0x08,0x88,0x08,0xFF,0x7F,
0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,
0xF8,0x9F,0x00,0x80,0x00,0xF0,0x00,0x00,
0x00,0x20,0x04,0x20,0x04,0x20,0x04,0x20,
0x04,0x20,0x04,0x20,0x04,0x20,0xFC,0x3F,
0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,
0x04,0x20,0x04,0x20,0x00,0x20,0x00,0x00,
0x24,0x08,0x24,0x06,0xA4,0x01,0xFE,0xFF,
0x23,0x01,0x22,0x06,0x00,0x40,0x3E,0x49,
0x22,0x49,0x22,0x49,0x22,0x7F,0x22,0x49,
0x22,0x49,0x3E,0x49,0x00,0x41,0x00,0x00,
0x40,0x04,0x30,0x04,0x11,0x04,0x96,0x04,
0x90,0x04,0x90,0x44,0x91,0x84,0x96,0x7E,
0x90,0x06,0x90,0x05,0x98,0x04,0x14,0x04,
0x13,0x04,0x50,0x04,0x30,0x04,0x00,0x00,
0x00,0x00,0xFE,0xFF,0x22,0x04,0x5A,0x08,
0x86,0x07,0x10,0x80,0x0C,0x41,0x24,0x31,
0x24,0x0F,0x25,0x01,0x26,0x01,0x24,0x3F,
0x24,0x41,0x14,0x41,0x0C,0x71,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 init();        /*主函数的初始化声名*/                               
void init1();        /*左移显示方式的初始化声名*/
void disp1();        /*左移显示子程序声名*/       
void delay(uint z);/*延时函数声名及定义*/
uchar keyscan();
void display1();
void display2();
void display3();
void display4();
void display5();
void display6();
uchar keyscan();
void main()
{

while(1)
{ flag=0;
flag=keyscan();
switch(flag){
case 0:break;
case 1:display1();break;
case 2:display2();break;
case 3:display3();break;
case 4:display4();break;
case 5:display5();break;
case 6:display6();break; }}
}
uchar keyscan()
{ uchar temp1,temp2,temp,num;
     P3=0xf0;
     temp=P3;
  if(temp!=0xf0)
  {  temp1=P3;
    P3=0x0f;
    temp=P3;
   if(temp!=0x0f)
   {  temp2=P3;
      temp=temp1^temp2;
   }
switch(temp)
   {  case 0x7e : num=1;  break;
      case 0x7d : num=2;  break;
          case 0x7b : num=3;  break;
          case 0x77 : num=4;  break;
          case 0xbe : num=5;  break;
          case 0xbd : num=6;  break;
          case 0xbb : num=7;  break;
          case 0xb7 : num=8;  break;
          case 0xde : num=9;  break;
          case 0xdd : num=10; break;
          case 0xdb : num=11; break;
          case 0xd7 : num=12; break;
          case 0xee : num=13; break;
          case 0xed : num=14; break;
          case 0xeb : num=15; break;
          case 0xe7 : num=16; break;
          }
  }
return num;}
void display1()
{       
init();
              init1();        //左移显示初始化
                        {int c=96;
                        int e=96;
                                for(i=0;i<=c;i=i+16 )        //判断左移的字符个数
                                        for(j=0;j<=b;j++)                //向左移动的速度由变量v控制
                                                for(k=i*2;k<(i*2+32);)        //显示一幕
                                                        {  
                                                        flag=keyscan();
                                                        if(flag!=1)
                                                 { return ;         }
                                                        P0=table1[k];
                                                           k++;
                                                          P2=table1[k];
                                                          k++;       
                                                          P1=m;
                                                          m++;
                                                          if(m==0x10)
                                                                m=0x00;
                                                          delay(1);
                                                        }
                                for(i=0;i<=e;i=i+16 )        //判断左移的字符个数
                                        for(j=0;j<=b;j++)                //向左移动的速度由变量v控制
                                                for(z=i*2;z<(i*2+32);)        //显示一幕
                                                        {  
                                                        flag=keyscan();
                                                        if(flag!=1)
                                                 { return ;         }
                                                        P0=table2[z];
                                                           z++;
                                                          P2=table2[z];
                                                          z++;       
                                                          P1=m;
                                                          m++;
                                                          if(m==0x10)
                                                                m=0x00;
                                                          delay(1);
                                                        }                               
                        }
}       
void display2()
{
        init();
              init1();        //左移显示初始化
                        {int d=176;
                                for(i=0;i<=d;i++)        //判断左移的字符个数
                                        for(j=0;j<=v;j++)        //向左移动的速度由变量v控制
                                                for(k=i*2;k<(i*2+32);)        //显示一幕
                                                        {
                                                        flag=keyscan();
                                                        if(flag!=2)
                                                 { return ;         }
                                                        P0=table2[k];
                                                           k++;
                                                          P2=table2[k];
                                                          k++;       
                                                          P1=m;
                                                          m++;
                                                          if(m==0x10)
                                                                m=0x00;
                                                          delay(1);
                                                        }                       
                        }
}       
void display3()
{       
        init();
           init1();        //左移显示初始化
                        {int a=32;
                                for(i=0;i<=a;i++)        //判断左移的字符个数
                                        for(j=0;j<=v;j++)        //向左移动的速度由变量v控制
                                                for(k=i*2;k<(i*2+32);)        //显示一幕
                                                        {
                                                        flag=keyscan();
                                                        if(flag!=3)
                                                 { return ;         }
                                                        P0=table1[k];
                                                           k++;
                                                          P2=table1[k];
                                                          k++;       
                                                          P1=m;
                                                          m++;
                                                          if(m==0x10)
                                                                m=0x00;
                                                          delay(1);
                                                        }                       
                        }       
}       
void display4()       
{       
        init();
           init1();        //左移显示初始化
                        {int a=32;
                                for(i=0;i<=a;i++)        //判断左移的字符个数
                                        for(j=0;j<=v;j++)        //向左移动的速度由变量v控制
                                                for(k=i*2;k<(i*2+32);)        //显示一幕
                                                        {
                                                        flag=keyscan();
                                                        if(flag!=4)
                                                 { return ;         }
                                                        P0=table1[k];
                                                           k++;
                                                          P2=table1[k];
                                                          k++;       
                                                          P1=m;
                                                          m++;
                                                          if(m==0x10)
                                                                m=0x00;
                                                          delay(1);
                                                        }                       
                        }       
}       
void display5()
{       
        init();
           init1();        //左移显示初始化
                        {int a=32;
                                for(i=0;i<=a;i++)        //判断左移的字符个数
                                        for(j=0;j<=v;j++)        //向左移动的速度由变量v控制
                                                for(k=i*2;k<(i*2+32);)        //显示一幕
                                                        {
                                                        flag=keyscan();
                                                        if(flag!=5)
                                                 { return ;         }
                                                        P0=table1[k];
                                                           k++;
                                                          P2=table1[k];
                                                          k++;       
                                                          P1=m;
                                                          m++;
                                                          if(m==0x10)
                                                                m=0x00;
                                                          delay(1);
                                                        }                       
                        }       
}               
void display6()
{       
        init();
                init1();        //左移显示初始化
                        {int a=32;
                                for(i=0;i<=a;i++)        //判断左移的字符个数
                                        for(j=0;j<=v;j++)        //向左移动的速度由变量v控制
                                                for(k=i*2;k<(i*2+32);)        //显示一幕
                                                        {
                                                        flag=keyscan();
                                                        if(flag!=6)
                                                 { return ;         }
                                                        P0=table1[k];
                                                           k++;
                                                          P2=table1[k];
                                                          k++;       
                                                          P1=m;
                                                          m++;
                                                          if(m==0x10)
                                                                m=0x00;
                                                          delay(1);
                                                        }                       
                        }
}       
void delay(uint z)/*延时函数声名及定义*/
{
        uint x,y;
    for(x=z;x>0;x--)
            {
                        for(y=110;y>0;y--);
        }
}       
void init()        //主程序初始化
{
        v=15;        //设置移动速度的初值
        b=100;
}
void init1()        //左移显示方式各变量的初始化
{
        P0=0;
        P2=0;
        m=0;
}

NZI}5AF8W7}5NS5]_MZOHEN.png
回复

使用道具 举报

ID:748788 发表于 2020-12-17 16:06 | 显示全部楼层
好好检查一下有没有虚焊、漏焊
回复

使用道具 举报

ID:846159 发表于 2020-12-17 16:18 | 显示全部楼层
wwh2382 发表于 2020-12-17 16:06
好好检查一下有没有虚焊、漏焊

因为怕焊错,所以都用排针把那些接角引出来,然后用导线连接的
回复

使用道具 举报

ID:607298 发表于 2020-12-17 16:24 | 显示全部楼层
好好对比下实物和模拟的差异吧。
回复

使用道具 举报

ID:223946 发表于 2020-12-17 16:33 | 显示全部楼层
第一步检查点阵的电源供电情况,最好用万用表测量一下点阵的电源电压。
第二步直接将电源加在点阵上面,查看是否是点阵元器件问题。
第三步,如果上面两步都没有问题的话,那就检测单片机引脚输出的电压是否正确。
第四步,如果上面三步都没有问题,那就是焊接出了问题。
回复

使用道具 举报

ID:852300 发表于 2020-12-17 17:07 | 显示全部楼层
先检查点阵型号和引脚对不对?再查焊点吧
回复

使用道具 举报

ID:843617 发表于 2020-12-17 19:12 | 显示全部楼层
可能出现虚焊、漏焊合作管脚焊错了
回复

使用道具 举报

ID:862566 发表于 2020-12-18 08:46 | 显示全部楼层
虚焊的可能性比较大,我们用32做的
回复

使用道具 举报

ID:303207 发表于 2020-12-20 15:22 | 显示全部楼层
检查一下焊接的问题,电路图没问题的话就是实物焊接硬件电路的问题
回复

使用道具 举报

ID:212797 发表于 2020-12-20 16:59 | 显示全部楼层
1、检查焊接和电路图是不是完全一样的,看看有没有焊接错误的地方;
2、用万用便检查各个关键点位的电压对不对;
简单点就是,写一个电路检查的小程序,在使用的引脚上发送固定的信号测量。
回复

使用道具 举报

ID:864055 发表于 2020-12-20 17:01 来自手机 | 显示全部楼层
万用表电阻档测试是否短路,漏焊。
回复

使用道具 举报

ID:864035 发表于 2020-12-20 17:19 | 显示全部楼层
是不是在焊接的时候虚焊,或者漏焊,程序看着好像没有问题
回复

使用道具 举报

ID:453974 发表于 2020-12-20 18:12 | 显示全部楼层
个人感觉应该是引脚位置问题,实际的点阵引脚顺序是乱的
回复

使用道具 举报

ID:160500 发表于 2020-12-20 19:30 | 显示全部楼层
把显示正常的和有故障的图发上来看看,只给一个程序有什么用
回复

使用道具 举报

ID:748788 发表于 2020-12-20 21:17 | 显示全部楼层
palaceer 发表于 2020-12-17 16:18
因为怕焊错,所以都用排针把那些接角引出来,然后用导线连接的

先将排针上的元件拔下,用万用表的一个表笔接排针疑似有问题的一个点,另一个表笔接该点线路上的下一个点,如果线路有多个点,就逐点检测一遍
回复

使用道具 举报

ID:420836 发表于 2020-12-20 23:48 | 显示全部楼层
我可能是由于单芯片计算机的时钟频率,请在代码中调整时钟频率,然后重试。 然后另一个原因可能是由于焊接。
回复

使用道具 举报

ID:18297 发表于 2020-12-21 08:38 | 显示全部楼层
这个仿真的硬件电路和实际的硬件短路会不同,我之前也遇见同样的问题,可能需要软件取模过程要修改。
你这个问题需要结合你的硬件电路进行调试。
回复

使用道具 举报

ID:844772 发表于 2020-12-21 09:20 | 显示全部楼层
13楼说的对,你引脚搞错了,点阵引脚顺序不同,我给你发个图。另外,估计不是虚焊问题,否则不会完全乱码。
51hei图片_20201221091350.jpg
回复

使用道具 举报

ID:337139 发表于 2020-12-21 14:31 | 显示全部楼层
本帖最后由 长风007 于 2020-12-21 16:50 编辑

你需要检验一下使用的点阵是否与仿真的一致!看一下使用的器件的真值表脚位联接。

真值表

真值表
回复

使用道具 举报

ID:755556 发表于 2020-12-21 14:37 | 显示全部楼层
应该是点阵顺序的问题吧,要不就是虚焊
回复

使用道具 举报

ID:337139 发表于 2020-12-21 16:49 | 显示全部楼层
看一下点阵的真值表,连接成16*16时位与列的对应关系。如果连错就会有乱码。

真值表

真值表
回复

使用道具 举报

ID:546335 发表于 2020-12-24 11:27 | 显示全部楼层
程序没出错,电路实物出错了
回复

使用道具 举报

ID:875484 发表于 2021-2-5 00:20 来自手机 | 显示全部楼层
可能是买的点阵屏和仿真软件里面的元件引脚没有对上。
回复

使用道具 举报

ID:811405 发表于 2021-2-6 14:31 | 显示全部楼层
仿真没有问题,应该是电路焊接出现了问题,线路焊接错误或者虚焊导致系统不能正常运行
回复

使用道具 举报

ID:811405 发表于 2021-2-6 14:36 | 显示全部楼层
proteus仿真中,各芯片的电源接地等引脚并未标出,在电路焊接时要注意不要接漏了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表