找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10485|回复: 22
收起左侧

MAX7219多片级联驱动点阵单片机程序编写经历

  [复制链接]
ID:311310 发表于 2019-4-22 16:51 来自手机 | 显示全部楼层 |阅读模式
      大家好,我给大家分享一个自己写的MAX7219级联驱动程序!
      我在那个宝上买了一个四级联点阵模块,花了好多时间写出了它的驱动程序(作为菜鸟我很难受)。
       我刚开始一下没弄明白,在网上找了一个程序,(就是那几张手机截图),照着搞了一遍,能显示,但问题很多,比如会闪烁,有一片会有重影,而且代码我觉得啰嗦而且还要延时,细看发现分四片写入,而且还要写入大量的NO-OP数据OX00。所以我只好自己写了一个驱动程序,看了会数据手册,发现这不就是类似74HC595的东西嘛!于是我自己写了一个程序,非常简洁明了,非常稳定,如彩图所示,我测试过STC15在1T的情况下4~35MHZ频率,都没有任何问题,其实那两个nop都不需要了,只是想求个稳,希望对有需要的人有用,大神的话就不了说了,我只不过是一个刚入坑单片机不久的菜鸟!都是大神们玩剩下的了,唉!
IMG_20190422_155558.png
IMG_20190422_155903.png
IMG_20190422_155958.png
IMG_20190422_160108.png
IMG_20190422_134338.jpg
Screenshot_20190422-161024.jpg
Screenshot_20190422-160929.jpg
Screenshot_20190422-160949.jpg
Screenshot_20190422-161013.jpg
Screenshot_20190422-161005.jpg

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:328014 发表于 2019-4-22 18:03 | 显示全部楼层
好东东 能分享下 代码的工程包吗
回复

使用道具 举报

ID:311310 发表于 2019-4-22 21:17 来自手机 | 显示全部楼层
51hei团团 发表于 2019-4-22 18:03
好东东 能分享下 代码的工程包吗

都在这了!就只有这么点就可以!
回复

使用道具 举报

ID:44037 发表于 2019-11-29 23:06 | 显示全部楼层
谢谢分享  程序简洁  明了   学习的好模板
20191129.jpg

main.c
  1. #include <reg52.h>
  2. #include "intrins.h"
  3. #include "Max7219.h"

  4. uchar code laji[][8]={
  5. {0x18,0x24,0x42,0x42,0x7E,0x42,0x42,0x42},//A
  6. {0x7C,0x42,0x42,0x7C,0x42,0x42,0x42,0x7C},//B
  7. {0x3C,0x42,0x40,0x40,0x40,0x40,0x42,0x7C},//C
  8. {0x7C,0x42,0x42,0x42,0x42,0x42,0x42,0x7C},//D
  9. };
  10. /*n毫秒的延时程序*/
  11. /*void Delay_xms(uint x)
  12. {
  13.   uint i,j;
  14.   for(i=0;i<x;i++)
  15.   for(j=0;j<112;j++);
  16. }*/
  17. void main()
  18. {
  19.   uchar i,j;
  20.   //Delay_xms(50);
  21.   MAX7219Init();  
  22.   while(1)
  23.   {
  24.                 for(j=0;j<8;j++)
  25.     {
  26.       for(i=0;i<number;i++)
  27.       {
  28.         Max7219WR(j+1,laji[i][j]);
  29.             }
  30.       CS=1; _nop_(); CS=0;
  31.                         //Delay_xms(100);
  32.     }  
  33.   }
  34. }


  35. Max7219.h
  36. #ifndef _Max7219_H_
  37. #define _Max7219_H_

  38. #define uchar unsigned char
  39. #define uint  unsigned int
  40. #define number  4 //点阵级联个数
  41. #define lum     5 //亮度级别,0-F,共16级

  42. //定义Max7219端口
  43. sbit CLK = P2^2;  //时钟 Max7219_pin
  44. sbit CS  = P2^1;  //锁存
  45. sbit DIN = P2^0;  //数据

  46. //向MAX7219 写入地址和数据
  47. void Max7219WR(uchar addr,uchar dat)
  48. {
  49.   uchar n=8;
  50.         CLK=0;
  51.         CS=0;   //CS=0有效,CS=1锁存
  52.         /*发送数据 高位先发*/
  53.         while(n--)
  54.         {
  55.           DIN = addr & 0x80;
  56.                 CLK=1;
  57.                 addr <<= 1;
  58.                 CLK=0;
  59.         }
  60.         n=8;
  61.         /*发送数据 高位先发*/
  62.         while(n--)
  63.         {
  64.           DIN = dat & 0x80;
  65.                 CLK=1;
  66.                 dat <<= 1;
  67.                 CLK=0;
  68.         }
  69. }
  70. void MAX7219Init()
  71. {
  72.   uchar i,j;
  73.         for(i=0;i<5;i++)  //
  74.         {
  75.           for(j=number;j>0;j--)
  76.                 switch(i)
  77.                 {
  78.                   case 0:Max7219WR(0x09, 0x00); break; //译码方式:BCD码 不译码
  79.                         case 1:Max7219WR(0x0A, lum);  break; //亮度 0-15 共16级
  80.                         case 2:Max7219WR(0x0B, 0x07); break; //扫描界限;8位显示
  81.                         case 3:Max7219WR(0x0C, 0x01); break; //掉电模式:0,普通模式:1
  82.                         case 4:Max7219WR(0x0F, 0x00); break; //显示测试:1;测试结束,正常显示:0
  83.                 }
  84.                 CS=1; _nop_(); CS=0; //每写入四次给一个锁存脉冲
  85.         }
  86. }
  87. #endif
复制代码

回复

使用道具 举报

ID:652804 发表于 2020-1-9 08:14 | 显示全部楼层
好东东 能分享下代码的工程包吗?
回复

使用道具 举报

ID:476465 发表于 2020-4-27 10:55 | 显示全部楼层
按你的程序建了工程,点阵要么不亮要么闪烁几下就不亮了
回复

使用道具 举报

ID:688367 发表于 2020-12-23 01:07 来自手机 | 显示全部楼层
能发一下程序吗?
回复

使用道具 举报

ID:44037 发表于 2020-12-23 08:58 | 显示全部楼层
我上面的程序  就是楼主发的全部程序图片  仿真显示正常,实物未检验
回复

使用道具 举报

ID:844772 发表于 2021-1-15 10:29 | 显示全部楼层
本帖最后由 glinfei 于 2021-2-1 16:16 编辑
MANHAMCHAN 发表于 2020-4-27 10:55
按你的程序建了工程,点阵要么不亮要么闪烁几下就不亮了

程序没问题,我也试过了,不过我用的某多多的最小系统,跟你出现同样问题的原因竟然是它的EN管脚竟然没拉高。
回复

使用道具 举报

ID:390416 发表于 2021-1-15 11:47 | 显示全部楼层
TM公司的芯片 要比MAX7219 好用多了。
回复

使用道具 举报

ID:300212 发表于 2021-1-28 21:07 来自手机 | 显示全部楼层
网上的代码很累赘,无论几块max7219,写一波数据,然后CS=1;  CS=0;,比单个写好
回复

使用道具 举报

ID:688367 发表于 2021-2-1 23:31 来自手机 | 显示全部楼层
大神把程序发出来啊
回复

使用道具 举报

ID:605142 发表于 2021-2-2 09:46 | 显示全部楼层
GGG.gif
回复

使用道具 举报

ID:718536 发表于 2021-2-23 09:15 | 显示全部楼层
软件延时简直就是单片机的大敌啊。好,简洁,方便。那个送数函数while,改为for循环应该效果一样。
回复

使用道具 举报

ID:718536 发表于 2021-2-23 09:18 | 显示全部楼层
老大,如果要滚动显示怎么处理呢?
回复

使用道具 举报

ID:311310 发表于 2021-3-14 12:00 来自手机 | 显示全部楼层
dlj123 发表于 2021-2-1 23:31
大神把程序发出来啊

你好!我的另一篇帖子已上传工程包
回复

使用道具 举报

ID:907424 发表于 2021-11-7 16:12 | 显示全部楼层
如何实现滚动呢?有人会吗
回复

使用道具 举报

ID:964313 发表于 2022-2-27 20:52 | 显示全部楼层
楼主,有16X16显示汉字的驱动吗?
回复

使用道具 举报

ID:819175 发表于 2023-7-20 09:59 | 显示全部楼层
谢谢 by64214 ,成功点亮四块ABCD。
回复

使用道具 举报

ID:641483 发表于 2023-7-20 11:56 | 显示全部楼层
好东西,非常感谢,先收藏了,今天回去学习研究下,用这个做个动态显示的应该怎么写
回复

使用道具 举报

ID:718536 发表于 2023-9-10 14:26 | 显示全部楼层
zyw497947507 发表于 2021-11-7 16:12
如何实现滚动呢?有人会吗

加上定时器移位地址或数据,就可以做左右滚动或者上下滚动了。
回复

使用道具 举报

ID:718536 发表于 2023-9-10 17:03 | 显示全部楼层
人人学会单片机 发表于 2021-1-15 11:47
TM公司的芯片 要比MAX7219 好用多了。

TM的芯片自带时钟,不受外部时钟中断而爆亮。这点很好,能保证光点亮度均匀。7219估计跟两片595寄存器组合起来差不多,数据的扫描输出估计应该受时钟信号波动而变动。
回复

使用道具 举报

ID:476415 发表于 2024-1-7 11:40 | 显示全部楼层
等于多个级联,不是11111111,22222222,333333333,44444444一个一个的刷新,而是1234,1234,1234....这样一列一列刷新的?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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