找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1867|回复: 7
收起左侧

关于单片机MAX7219控制点阵屏鬼影闪烁的问题有没有遇到过的

[复制链接]
ID:978416 发表于 2022-1-8 01:51 | 显示全部楼层 |阅读模式
51hei图片_20220108014948.jpg
如图,总有F的鬼影

单片机源程序如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit din=P2^2;
sbit cs =P2^1;
sbit clk=P2^0;

#define liangdu 0xff;

uchar code table[38][8]={                                                        
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//0
{0x08,0x18,0x28,0x08,0x08,0x08,0x08,0x08},//1
{0x7E,0x02,0x02,0x7E,0x40,0x40,0x40,0x7E},//2
{0x3E,0x02,0x02,0x3E,0x02,0x02,0x3E,0x00},//3
{0x08,0x18,0x28,0x48,0xFE,0x08,0x08,0x08},//4
{0x3C,0x20,0x20,0x3C,0x04,0x04,0x3C,0x00},//5
{0x3C,0x20,0x20,0x3C,0x24,0x24,0x3C,0x00},//6
{0x3E,0x22,0x04,0x08,0x08,0x08,0x08,0x08},//7
{0x00,0x3E,0x22,0x22,0x3E,0x22,0x22,0x3E},//8
{0x3E,0x22,0x22,0x3E,0x02,0x02,0x02,0x3E},//9
{0x08,0x14,0x22,0x3E,0x22,0x22,0x22,0x22},//A         10
{0x3C,0x22,0x22,0x3E,0x22,0x22,0x3C,0x00},//B        11
{0x3C,0x40,0x40,0x40,0x40,0x40,0x3C,0x00},//C        12
{0x7C,0x42,0x42,0x42,0x42,0x42,0x7C,0x00},//D        13
{0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x7C},//E        14
{0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x40},//F        15
{0x3C,0x40,0x40,0x40,0x40,0x44,0x44,0x3C},//G        16
{0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44},//H        17
{0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x7C},//I        18
{0x3C,0x08,0x08,0x08,0x08,0x08,0x48,0x30},//J        19
{0x00,0x24,0x28,0x30,0x20,0x30,0x28,0x24},//K        20
{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C},//L        21
{0x81,0xC3,0xA5,0x99,0x81,0x81,0x81,0x81},//M        22
{0x00,0x42,0x62,0x52,0x4A,0x46,0x42,0x00},//N        23
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//O        24
{0x3C,0x22,0x22,0x22,0x3C,0x20,0x20,0x20},//P        25
{0x1C,0x22,0x22,0x22,0x22,0x26,0x22,0x1D},//Q        26
{0x3C,0x22,0x22,0x22,0x3C,0x24,0x22,0x21},//R        27
{0x00,0x1E,0x20,0x20,0x3E,0x02,0x02,0x3C},//S        28
{0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08},//T        29
{0x42,0x42,0x42,0x42,0x42,0x42,0x22,0x1C},//U        30
{0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18},//V        31
{0x00,0x49,0x49,0x49,0x49,0x2A,0x1C,0x00},//W        32
{0x00,0x41,0x22,0x14,0x08,0x14,0x22,0x41},//X        33
{0x41,0x22,0x14,0x08,0x08,0x08,0x08,0x08},//Y        34
{0x00,0x7F,0x02,0x04,0x08,0x10,0x20,0x7F},//Z        35
{0x08,0x7F,0x49,0x49,0x7F,0x08,0x08,0x08},//中        36
{0xFE,0xBA,0x92,0xBA,0x92,0x9A,0xBA,0xFE},//国        37
};

void delay(uint xms)
{                                                                                                        
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=112;j>0;j--);
}

void write_7219_byte(uchar Data)                                        //为什么DATA要大写?
{
        uchar i;
        for(i=0;i<8;i++)
        {
                clk=0;
                din=Data&0x80;
                Data=Data<<1;
                clk=1;
        }
}

void write_7219_shuju1(uchar add1,uchar dat1)  
{
        cs=0;
        write_7219_byte(add1);
        write_7219_byte(dat1);
        cs=1;
}
void write_7219_shuju2(uchar add2,uchar dat2)
{
        cs=0;
        write_7219_byte(add2);
        write_7219_byte(dat2);
        write_7219_byte(0x00);
        write_7219_byte(0x00);
        cs=1;
}
void write_7219_shuju3(uchar add3,uchar dat3)
{
        cs=0;
        write_7219_byte(add3);
        write_7219_byte(dat3);
        write_7219_byte(0x00);
        write_7219_byte(0x00);
        write_7219_byte(0x00);
        write_7219_byte(0x00);
        cs=1;
}
void write_7219_shuju4(uchar add4,uchar dat4)
{
        cs=0;
        write_7219_byte(add4);
        write_7219_byte(dat4);
        write_7219_byte(0x00);
        write_7219_byte(0x00);
        write_7219_byte(0x00);
        write_7219_byte(0x00);
        write_7219_byte(0x00);
        write_7219_byte(0x00);
        cs=1;
}
void write_7219_shuju5(uchar add5,uchar dat5)
{
        cs=0;
        write_7219_byte(add5);
        write_7219_byte(dat5);
        write_7219_byte(0x00);
        write_7219_byte(0x00);
        write_7219_byte(0x00);
        write_7219_byte(0x00);
        write_7219_byte(0x00);
        write_7219_byte(0x00);
        write_7219_byte(0x00);
        write_7219_byte(0x00);
        cs=1;
}

void init()
{
        write_7219_shuju1(0x0a,0xff);
        write_7219_shuju1(0x0b,0x07);
        write_7219_shuju1(0x0c,0x01);
        write_7219_shuju1(0x0f,0x00);
        write_7219_shuju1(0x09,0x00);

        write_7219_shuju2(0x0a,0xff);
        write_7219_shuju2(0x0b,0x07);
        write_7219_shuju2(0x0c,0x01);
        write_7219_shuju2(0x0f,0x00);
        write_7219_shuju2(0x09,0x00);

        write_7219_shuju3(0x0a,0xff);
        write_7219_shuju3(0x0b,0x07);
        write_7219_shuju3(0x0c,0x01);
        write_7219_shuju3(0x0f,0x00);
        write_7219_shuju3(0x09,0x00);

        write_7219_shuju4(0x0a,0xff);
        write_7219_shuju4(0x0b,0x07);
        write_7219_shuju4(0x0c,0x01);
        write_7219_shuju4(0x0f,0x00);
        write_7219_shuju4(0x09,0x00);

        write_7219_shuju5(0x0a,0xff);
        write_7219_shuju5(0x0b,0x07);
        write_7219_shuju5(0x0c,0x01);
        write_7219_shuju5(0x0f,0x00);
        write_7219_shuju5(0x09,0x00);
}
void main()
{
        while(1)
        {
        write_7219_shuju1(1,table[15][0]);  
        write_7219_shuju1(2,table[15][1]);
        write_7219_shuju1(3,table[15][2]);
        write_7219_shuju1(4,table[15][3]);
        write_7219_shuju1(5,table[15][4]);
        write_7219_shuju1(6,table[15][5]);
        write_7219_shuju1(7,table[15][6]);
        write_7219_shuju1(8,table[15][7]);

        write_7219_shuju2(1,table[21][0]);  
        write_7219_shuju2(2,table[21][1]);
        write_7219_shuju2(3,table[21][2]);
        write_7219_shuju2(4,table[21][3]);
        write_7219_shuju2(5,table[21][4]);
        write_7219_shuju2(6,table[21][5]);
        write_7219_shuju2(7,table[21][6]);
        write_7219_shuju2(8,table[21][7]);

        write_7219_shuju3(0x0c,0x01);
        write_7219_shuju3(1,table[1][0]);
        write_7219_shuju3(2,table[1][1]);
        write_7219_shuju3(3,table[1][2]);
        write_7219_shuju3(4,table[1][3]);
        write_7219_shuju3(5,table[1][4]);
        write_7219_shuju3(6,table[1][5]);
        write_7219_shuju3(7,table[1][6]);
        write_7219_shuju3(8,table[1][7]);

        
        write_7219_shuju4(1,table[28][0]);   
        write_7219_shuju4(2,table[28][1]);
        write_7219_shuju4(3,table[28][2]);
        write_7219_shuju4(4,table[28][3]);
        write_7219_shuju4(5,table[28][4]);
        write_7219_shuju4(6,table[28][5]);
        write_7219_shuju4(7,table[28][6]);
        write_7219_shuju4(8,table[28][7]);

        
        write_7219_shuju5(1,table[32][0]);  
        write_7219_shuju5(2,table[32][1]);
        write_7219_shuju5(3,table[32][2]);
        write_7219_shuju5(4,table[32][3]);
        write_7219_shuju5(5,table[32][4]);
        write_7219_shuju5(6,table[32][5]);
        write_7219_shuju5(7,table[32][6]);
        write_7219_shuju5(8,table[32][7]);
        delay(1000);        
        }

}
回复

使用道具 举报

ID:405840 发表于 2022-1-8 10:02 | 显示全部楼层
这个算法的效率太低了 可以参考论坛某个帖子 里面的程序很简洁
回复

使用道具 举报

ID:912398 发表于 2022-1-8 10:48 | 显示全部楼层
消影时间不够吧
回复

使用道具 举报

ID:624769 发表于 2022-1-8 13:41 | 显示全部楼层
MAX7219, 是显示驱动器。
他只需要你把点阵数据发给他,他就会自动显示,换句话说,你数据不发生变化的前提下,是不需要,也不应该去反复的刷 7219的,
所以,你在while(1) 里面 不停的发是什么鬼? 你只要去掉while(1),把它放在main的结尾, while(1); 就不会有那所谓的“鬼影”。

然后顺带说一下, 那所谓的“鬼影”, 就是你在发送 数据一的时候,后面莫名其妙增加的那些数据,发送数据二的时候,被正确的数据覆盖,所以只显示一小会儿,就成了所谓的鬼影,换言之你的这种数据发送方法是有问题的。
回复

使用道具 举报

ID:978416 发表于 2022-1-8 16:25 | 显示全部楼层
本帖最后由 egsresrhtrhrtst 于 2022-1-8 16:27 编辑
188610329 发表于 2022-1-8 13:41
MAX7219, 是显示驱动器。
他只需要你把点阵数据发给他,他就会自动显示,换句话说,你数据不发生变化的前 ...

谢谢,把while放到后边确实没有了,这是我参考论坛里的动态显示的程序改的,想着静态显示一下,弄了好久都不行,你说的莫名其妙的程序是说的write_7219_byte(0x00);;这些发送空值得程序吗,这些不是要传送的嘛。
回复

使用道具 举报

ID:624769 发表于 2022-1-8 19:08 | 显示全部楼层
egsresrhtrhrtst 发表于 2022-1-8 16:25
谢谢,把while放到后边确实没有了,这是我参考论坛里的动态显示的程序改的,想着静态显示一下,弄了好久 ...

你最好,好好看看手册,究竟需要发些什么, 你上面的代码,很多操作都是无意义的。

初始化,定义亮度,这些都是只需要做一次的,然后就是定义每一个位的亮灭,当你显示不需要变化的时候,就不用再操作7219,产生变化的时候,其实也只需要更新发生变化的地址的数据而已。而不是所有的地址数据全都更新
回复

使用道具 举报

ID:978416 发表于 2022-1-8 20:02 | 显示全部楼层
188610329 发表于 2022-1-8 19:08
你最好,好好看看手册,究竟需要发些什么, 你上面的代码,很多操作都是无意义的。

初始化,定义亮度 ...

好的。谢谢了
回复

使用道具 举报

ID:526543 发表于 2022-1-9 13:46 | 显示全部楼层
建议多看看数据手册
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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