[范例教程] MAX7219多片级联驱动点阵单片机程序

[复制链接]
1370|0
 楼主| jonas222 发表于 2023-10-24 11:00 | 显示全部楼层 |阅读模式



  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

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

本版积分规则

44

主题

1687

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部