发 帖  
原厂入驻New
[问答] MAX7219级联显示时有一个模块总是有闪烁
134 PIC单片机 max7219
分享

  1. <div>最近学习单片机,用的是877A,4M晶振,在用MAX7219级联驱动4块8*8组成8*32点阵时,总是第三块有闪烁。请问是代码的问题吗?谢谢各位帮忙看一下,谢谢了!</div><div>
  2. </div><div>#include <pic.h>
  3. </div>__CONFIG(HS&WDTDIS&LVPDIS);

  4. #define INT8U   unsigned char
  5. #define _XTAL_FREQ 4000000UL

  6. //定义Max7219端口
  7. #define DIN RB0
  8. #define CS  RB1
  9. #define CLK RB2

  10. const INT8U disp1[10][8]={

  11. {0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//0

  12. {0x18,0x28,0x08,0x08,0x08,0x08,0x08,0x08},//1

  13. {0x3c,0x42,0x42,0x02,0x1c,0x20,0x40,0x7E},//2

  14. {0x3c,0x42,0x42,0x0c,0x2,0x42,0x42,0x3c},//3

  15. {0x28,0x28,0x48,0x48,0x7e,0x8,0x8,0x8},//4

  16. {0x3e,0x40,0x40,0x7c,0x2,0x2,0x42,0x3c},//5

  17. {0x3e,0x42,0x40,0x7C,0x42,0x42,0x42,0x3c},//6

  18. {0x7E,0x02,0x4,0x8,0x8,0x8,0x8,0x8},//7

  19. {0x3c,0x42,0x42,0x3c,0x42,0x42,0x42,0x3c},//8

  20. {0x3c,0x42,0x42,0x42,0x3e,0x2,0x42,0x3c}//9
  21. };


  22. //-----------------------------------------------------------------------------
  23. //向MAX7219写入字节
  24. //-----------------------------------------------------------------------------
  25. void Write_Max7219_byte(INT8U DATA)         

  26. {
  27.         INT8U i;   
  28.         CS=0;                                //CS=0有效,CS=1锁存        
  29.         for(i=8;i>=1;i--)
  30.     {
  31.             CLK=0;
  32.             IF(DATA & 0x80) DIN=1; else DIN=0;
  33.                 //DIN=(DATA&0x80);  //&10000000, 编译器对位操作的理解:非0即为1
  34.                 DATA=DATA<<1;
  35.                 CLK=1;                    //上升沿把数据送出去
  36.         }                                 
  37. }

  38. //------------------------------------------------------------------
  39. //向M第一片MAX7219写入数据
  40. //------------------------------------------------------------------
  41. void Write_Max7219_1(INT8U add1,INT8U dat1)
  42. {
  43.      CS=0;
  44.          Write_Max7219_byte(add1);           //写入地址,即数码管编号
  45.      Write_Max7219_byte(dat1);               //写入数据,即数码管显示数字
  46.          CS=1;                        
  47. }

  48. //---------------------------------------------------------------------
  49. //第二片MAX7219的写入数据
  50. //---------------------------------------------------------------------
  51. void Write_Max7219_2(INT8U add2,INT8U dat2)
  52. {
  53.         CS=0;
  54.         Write_Max7219_byte(add2);
  55.         Write_Max7219_byte(dat2);
  56.         CLK=1;
  57.         Write_Max7219_byte(0x00);  //片1写入空
  58.         Write_Max7219_byte(0x00);
  59.         CS=1;
  60. }

  61. //---------------------------------------------------------------------
  62. //第三片MAX7219的写入数据
  63. //---------------------------------------------------------------------
  64. void Write_Max7219_3(INT8U add3,INT8U dat3)
  65. {
  66.         CS=0;
  67.         Write_Max7219_byte(add3);
  68.         Write_Max7219_byte(dat3);
  69.         CLK=1;
  70.         Write_Max7219_byte(0x00); //片1写入空
  71.         Write_Max7219_byte(0x00);
  72.         Write_Max7219_byte(0x00); //片2写入空
  73.         Write_Max7219_byte(0x00);
  74.         CS=1;
  75. }

  76. //---------------------------------------------------------------------
  77. //第四片MAX7219的写入数据
  78. //---------------------------------------------------------------------
  79. void Write_Max7219_4(INT8U add4,INT8U dat4)
  80. {
  81.         CS=0;
  82.         Write_Max7219_byte(add4);
  83.         Write_Max7219_byte(dat4);
  84.         CLK=1;
  85.         Write_Max7219_byte(0x00); //片1写入空
  86.         Write_Max7219_byte(0x00);
  87.         Write_Max7219_byte(0x00); //片2写入空
  88.         Write_Max7219_byte(0x00);
  89.         Write_Max7219_byte(0x00); //片3写入空
  90.         Write_Max7219_byte(0x00);
  91.         CS=1;
  92. }
  93. //---------------------------------------------------------------------
  94. //初始化芯片
  95. //---------------------------------------------------------------------
  96. void Init_MAX7219(void)
  97. {
  98.          Write_Max7219_1(0x09, 0x00);       //译码方式:不译码
  99.          Write_Max7219_1(0x0a, 0x00);       //亮度最小
  100.          Write_Max7219_1(0x0b, 0x07);       //扫描界限;8个数码管显示
  101.          Write_Max7219_1(0x0c, 0x01);       //掉电模式:0,普通模式:1
  102.          Write_Max7219_1(0x0f, 0x00);       //显示测试:1;测试结束,正常显示:0

  103.         Write_Max7219_2(0x09, 0x00);       //译码方式:不译码
  104.          Write_Max7219_2(0x0a, 0x00);       //亮度最小
  105.          Write_Max7219_2(0x0b, 0x07);       //扫描界限;8个数码管显示
  106.          Write_Max7219_2(0x0c, 0x01);       //掉电模式:0,普通模式:1
  107.          Write_Max7219_2(0x0f, 0x00);       //显示测试:1;测试结束,正常显示:0

  108.          Write_Max7219_3(0x09, 0x00);       //译码方式:不译码
  109.          Write_Max7219_3(0x0a, 0x00);       //亮度最小
  110.          Write_Max7219_3(0x0b, 0x07);       //扫描界限;8个数码管显示
  111.          Write_Max7219_3(0x0c, 0x01);       //掉电模式:0,普通模式:1
  112.          Write_Max7219_3(0x0f, 0x00);       //显示测试:1;测试结束,正常显示:0
  113.          
  114.          Write_Max7219_4(0x09, 0x00);       //译码方式:不译码
  115.          Write_Max7219_4(0x0a, 0x00);       //亮度最小
  116.          Write_Max7219_4(0x0b, 0x07);       //扫描界限;8个数码管显示
  117.          Write_Max7219_4(0x0c, 0x01);       //掉电模式:0,普通模式:1
  118.          Write_Max7219_4(0x0f, 0x00);       //显示测试:1;测试结束,正常显示:
  119. }


  120. //---------------------------------------------------------------------
  121. //*********************主程序**************************
  122. //---------------------------------------------------------------------
  123. void main(void)
  124. {
  125.          INT8U i,j=0,k=0;;
  126.          TRISB=0;
  127.          PORTB=0x00;
  128.          
  129.         __delay_ms(50);
  130.          Init_MAX7219();  
  131.                         
  132.          while(1)
  133.          {
  134.                    for(i=1;i<9;i++)
  135.                    {                        
  136.                         Write_Max7219_1(i,disp1[j%10][i-1]);
  137.                         Write_Max7219_2(i,disp1[j/10%10][i-1]);
  138.                         Write_Max7219_3(i,disp1[j/100%10][i-1]);
  139.                         Write_Max7219_4(i,disp1[k][i-1]);
  140.                 }
  141.                 j+=1;
  142.                 if(j>254)
  143.                 {
  144.                         j=0;k+=1;
  145.                         if(k>9) k=0;
  146.                 }
  147.                    __delay_ms(300);
  148.          }

  149. }
复制代码

0
微信图片_20191012204745 (2).jpg
微信图片_20191012204731 (2)_LI.jpg
微信图片_20191012204718 (2)_LI.jpg
奖励10积分
6 天前   评论 分享淘帖 邀请回答
2个回答

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

我要提问
课程
    关闭

    站长推荐 上一条 /10 下一条

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