打印
[资料干货]

求助16X16点阵总有两列残影发亮的问题,带PCB工程和程序

[复制链接]
676|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
问题求助:使用红色时能完整发送字,但是总有两列残影发亮的问题,使用绿色时下半部分直接乱码,也还是有两列残影发亮。制作分享:工程分为单片机驱动板和16X16点阵板,单片机驱动板上1个STC单片机(我用的是STC12C5A60S2)、2个74LS138进行扫描、4个74HC595发送数据和24C02扩展内存,除了可以驱动点阵也可以驱动数码管,灯之类的,因为我闲置的直插件较多所以都用了直插件,板子排得比较密,密集恐惧症慎入哈哈!点阵板我用的是双色点阵,如果改成纯红色点阵的可以弄成16X32(因为绿色不用可以给红色用),另外文件里的PCB工程为了给大家方便浏览检查没有敷铜,如果大家直接打样PCB的话记得顶层和底层要接地敷铜,避免板上的芯片高速运行受到外界干扰,本人单片机小白一个,不喜勿喷,欢迎多提宝贵意见,共同交流!
//74HC138引脚:P22,P23,P24,P25,P26,P27
//24C02引脚:P20-SDA,P21-SCL
//red595:11脚-P10,12脚-P11,14脚-P12,13脚控制脚-P16
//green595:11脚-P13,12脚-P14,14脚-P15,13脚控制脚-P17
//74HC595:11脚SH_CP是数据输入时钟线,12脚ST_CP是输出存储器锁存时钟线,13脚OE是输出有效(低电平有效),14脚DS是串行数据输入
#include <intrins.h>
#include <REGX52.H>
#define uint unsigned int
#define uchar unsigned char

sbit saomiao1=P2^2;
sbit saomiao2=P2^3;
sbit saomiao3=P2^4;
sbit saomiao4=P2^5;
sbit saomiao5=P2^6;
sbit saomiao6=P2^7;
sbit redSH_CP=P1^0;
sbit redST_CP=P1^1;
sbit redOE=P1^6;
sbit redDS=P1^2;
sbit greenSH_CP=P1^3;
sbit greenST_CP=P1^4;
sbit greenOE=P1^7;
sbit greenDS=P1^5;

uchar a;
uchar code display[]=
{
0xF7,0xF6,0x31,0x47,0xF7,0xFF,0xFD,0x85,0xB5,0xB5,0xB5,0xB5,0xB5,0x85,0xFD,0xFF,
0xFD,0xFE,0x00,0xFF,0xFC,0xFF,0x00,0xB6,0xB6,0xB6,0x80,0xB6,0xB6,0xB6,0x00,0xFF
}; //福

void delay(uint b)//延时
{
        while(b--);
}

void shuaxin(uchar a)//138译码器刷新列
{
                switch(a)
                {
                        case(1):
                                saomiao4=1;saomiao5=1;saomiao6=1; break;
                        case(2):
                                saomiao4=0;saomiao5=1;saomiao6=1; break;
                        case(3):
                                saomiao4=1;saomiao5=0;saomiao6=1; break;
                        case(4):
                                saomiao4=0;saomiao5=0;saomiao6=1; break;
                        case(5):
                                saomiao4=1;saomiao5=1;saomiao6=0; break;
                        case(6):
                                saomiao4=0;saomiao5=1;saomiao6=0; break;
                        case(7):
                                saomiao4=1;saomiao5=0;saomiao6=0; break;
                        case(8):
                                saomiao4=0;saomiao5=0;saomiao6=0; break;
                        case(9):
                                saomiao1=1;saomiao2=1;saomiao3=1; break;
                        case(10):
                                saomiao1=0;saomiao2=1;saomiao3=1; break;
                        case(11):
                                saomiao1=1;saomiao2=0;saomiao3=1; break;
                        case(12):
                                saomiao1=0;saomiao2=0;saomiao3=1; break;
                        case(13):
                                saomiao1=1;saomiao2=1;saomiao3=0; break;
                        case(14):
                                saomiao1=0;saomiao2=1;saomiao3=0; break;
                        case(15):
                                saomiao1=1;saomiao2=0;saomiao3=0; break;
                        case(16):
                                saomiao1=0;saomiao2=0;saomiao3=0; break;
                        default :break;
                }
}


void Init_red595(uchar valueL,uchar valueH)//红色595发送函数初始化
{
         uchar i;
                for(i=0;i<8;i++)
                {
                        redDS=valueL>>7;//把valueL最高位的值赋给redDS
                        valueL<<=1;//把valueL原来的值左移一位,再赋值给valueL,(有赋值操作,所以会改变原先的值)多出来的最低位自动用0来填充,valueL的最高位发送出去
                        redSH_CP=0;
                        _nop_();
                        _nop_();
                        redSH_CP=1;
                }
                for(i=0;i<8;i++)
                {
                        redDS=valueH>>7;
                        valueH<<=1;
                        redSH_CP=0;
                        _nop_();
                        _nop_();
                        redSH_CP=1;
                }
                redST_CP=0;
                _nop_();
                _nop_();
                redST_CP=1;
}

void red_send()//发送红色点阵数据
{
        uint index;
        greenOE=1;//绿色595输出不使能
        for(index=1;index<17;index++)
                        {
                                redOE=1;//红色595输出不使能
                                shuaxin(index);//138译码器刷新
                                Init_red595(display[index+16],display[index]);//带入红色点阵要发送的数据
                                redOE=0;//红色595输出使能
                                delay(500);
                        }
}

void Init_green595(uchar valueL,uchar valueH)//绿色595发送函数初始化
{
         uchar i;
                for(i=0;i<8;i++)
                {
                        greenDS=valueL>>7;
                        valueL<<=1;
                        greenSH_CP=0;
                        _nop_();
                        _nop_();
                        greenSH_CP=1;
                }
                for(i=0;i<8;i++)
                {
                        greenDS=valueH>>7;
                        valueH<<=1;
                        greenSH_CP=0;
                        _nop_();
                        _nop_();
                        greenSH_CP=1;
                }
                greenST_CP=0;
                _nop_();
                _nop_();
                greenST_CP=1;
}

void green_send()//发送绿色点阵数据
{
        uint index;
        redOE=1;//红色595输出不使能
        for(index=1;index<17;index++)
                        {
                                greenOE=1;//绿色595输出不使能
                                shuaxin(index);//138译码器刷新
                                Init_green595(display[index+16],display[index]);//带入绿色点阵要发送的数据
                                greenOE=0;//绿色595输出使能
                                delay(500);
                        }
}

void main()
{
        while(1)
        {
                red_send();//红色显示
                //green_send();//绿色显示
        }
}





原理图.png (584.32 KB )

16X16点阵原理图

16X16点阵原理图

PCB.png (596.96 KB )

16X16点阵PCB

16X16点阵PCB

2.jpg (321.29 KB )

单片机驱动板

单片机驱动板

1.jpg (499.29 KB )

组装好点阵

组装好点阵

取模.png (22.09 KB )

取字模代码

取字模代码

红色显示.jpg (289.4 KB )

红色显示

红色显示

绿色显示.jpg (246.25 KB )

绿色显示

绿色显示

16X16点阵PCB工程.rar

1.47 MB

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

11

帖子

0

粉丝