久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2617|回復: 0
收起左側

STC12C5A60S2單片機使用硬件SPI驅動MAX7219的LED點陣

[復制鏈接]
ID:912806 發表于 2021-8-18 18:25 | 顯示全部樓層 |閱讀模式
max7219是一個用于驅動8位7段數字LED或者8x8點陣LED的驅動芯片, 以列掃描的方式, 用16個pin管理64個發光點, 顯示8個數字時刷新率為500-1300Hz, 典型值為800Hz.

pin腳功能
* DIG0 - DIG7: 這個8個pin, 分別代表一個7段數字+點號
* SEGA - SEGG, DP: A-G代表7段數字里的每一段, DP代表Decimal Point, 小數點
   * 每一段的驅動電流是40mA
* V+, GND: 電壓和接地
* DIN: 串行數據輸入
* CS: 片選, 當電平下拉后從串行口按時脈移入移位寄存器, 當電平上拉后鎖存
* DOUT: 串行數據輸出, 這個口用于級聯
   * 級聯的N個MAX7219, 可以看成有N個串聯的16位移位寄存器
   * 如果要對第N位操作, 要經過16*N個時脈后數據才能到達, 這時候CS上拉, 將命令鎖存.

通信方式
* 通信協議為SPI, 接受SPI Master的輸入, 不返回數據
* MAX7219, 不管CS是什么電平, DIN的數據都會隨著時脈寫入移位寄存器
* MAX7221, 只有當CS下拉時, 才會將數據從DIN寫入, 或者往DOUT寫出
* CS必須在第16個數寫入后, 下一個時脈上升沿到來前拉高, 否則數據會丟失
* 數據是MSB, 大值在前
* 對于16個bit, 前8個(D15-D08)為地址, 實際上使用的只有D11-D8這4個, 后8個D7-D0為數據

通信的前8位地址
共有14個
* 0x?0: No-Op, 用于將數據輸出到DOUT
* 0x?1: 第一個數字
* 0x?2: 第二個
* 0x?3: 第三個
* 0x?4: 第四個
* 0x?5: 第五個
* 0x?6: 第六個
* 0x?7: 第七個
* 0x?8: 第八個
* 0x?9: 數字解碼模式
* 0x?A: 亮度, 0x00到0xFF
* 0x?B: 掃描限制(數字個數), 這個對亮度有影響, 如果兩個級聯的這個參數不一樣, 亮度會不一樣
* 0x?C: 狀態(關閉, 普通)
* 0x?F: 測試狀態(測試, 普通)

級聯傳輸
* 使用No-Op地址操作實現級聯傳輸
* 例如, 對第四塊MAX7219寫入
   * 首先按預設地址寫入地址, 寫入值
   * 寫入三次NoOp操作(0x?0??), ?號代表隨意值
   * 當CS拉高后, 這4個MAX7219都會收到操作地址和操作值, 但是前三塊看到的是NoOp, 所以前三塊無動作

使用STC12C5A60S2的硬件SPI驅動MAX7219點陣
STC12C5A60S2系列是帶內建SPI支持的, 基于HML_FwLib_STC12封裝庫可以方便的實現MAX7219的點陣驅動, 項目地址 https://github.com/IOsetting/HML_FwLib_STC12 , 驅動代碼:
  1. /*****************************************************************************/
  2. /**
  3. * \file        spi_max7219.c
  4. * \author      IOsetting | iosetting@outlook.com
  5. * \date        
  6. * \brief       Example code of SPI driving dot matrix module
  7. * \note        The module chip is MAX7219, pin connection:
  8. *              P1_3        => CS,
  9. *              P1_5(MOSI)  => DIN,
  10. *              P1_7(SPCLK) => CLK
  11. *
  12. * \version     v0.1
  13. * \ingroup     example
  14. * \remarks     test-board: Minimum System; test-MCU: STC12C5AF56S2
  15. ******************************************************************************/

  16. /*****************************************************************************
  17. *                             header file                                   *
  18. *****************************************************************************/
  19. #include "hml/hml.h"

  20. #define CS P1_3

  21. #define DECODE_MODE  0x09
  22. #define INTENSITY    0x0A
  23. #define SCAN_LIMIT   0x0B
  24. #define SHUT_DOWN    0x0C
  25. #define DISPLAY_TEST 0x0F

  26. const byte numbers[]={
  27. 0x00,0x00,0x7C,0xC6,0xC6,0xCE,0xD6,0xD6,  // -0-.  
  28. 0xE6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
  29. 0x00,0x00,0x18,0x38,0x78,0x18,0x18,0x18,  // -1-  
  30. 0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00,  
  31. 0x00,0x00,0x7C,0xC6,0x06,0x0C,0x18,0x30,  // -2-  
  32. 0x60,0xC0,0xC6,0xFE,0x00,0x00,0x00,0x00,  
  33. 0x00,0x00,0x7C,0xC6,0x06,0x06,0x3C,0x06,  // -3-  
  34. 0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00,  
  35. 0x00,0x00,0x0C,0x1C,0x3C,0x6C,0xCC,0xFE,  // -4-  
  36. 0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00,  
  37. 0x00,0x00,0xFE,0xC0,0xC0,0xC0,0xFC,0x0E,  // -5-  
  38. 0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00,  
  39. 0x00,0x00,0x38,0x60,0xC0,0xC0,0xFC,0xC6,  // -6-  
  40. 0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,  
  41. 0x00,0x00,0xFE,0xC6,0x06,0x06,0x0C,0x18,  // -7-  
  42. 0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,  
  43. 0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7C,0xC6,  // -8-  
  44. 0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
  45. 0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7E,0x06,  // -9-  
  46. 0x06,0x06,0x0C,0x78,0x00,0x00,0x00,0x00};

  47. void Write7219(byte addr, byte dat)
  48. {
  49.     CS = 0;
  50.     SPI_RW(addr);
  51.     SPI_RW(dat);
  52.     CS = 1;
  53. }

  54. /*****************************************************************************/
  55. /**
  56. * \author      IOsetting
  57. * \date        
  58. * \brief       initialize MAX7219
  59. * \param[in]   
  60. * \return      none
  61. * \ingroup     example
  62. * \remarks     
  63. ******************************************************************************/
  64. void Init7219(void)
  65. {
  66.     Write7219(SHUT_DOWN,0x01);         // 0x00:shutdown, 0x01:normal
  67.     Write7219(DECODE_MODE,0x00);       // No decode
  68.     Write7219(SCAN_LIMIT,0x07);        // Display 8 digits
  69.     Write7219(INTENSITY,0x00);         // 0x00:min, 0xFF:max
  70.     Write7219(DISPLAY_TEST,0x00);      // 0x00:normal, 0x01:test mode
  71. }

  72. /*****************************************************************************/
  73. /**
  74. * \author      IOsetting
  75. * \date        
  76. * \brief       initialize SPI
  77. * \param[in]   
  78. * \return      none
  79. * \ingroup     example
  80. * \remarks     
  81. ******************************************************************************/
  82. void initSys(void)
  83. {
  84.     SPI_configTypeDef sc;
  85.     sc.baudRatePrescaler = SPI_BaudRatePrescaler_64;
  86.     sc.cpha = SPI_CPHA_1Edge;
  87.     sc.cpol = SPI_CPOL_low;
  88.     sc.firstBit = SPI_FirstBit_MSB;
  89.     sc.pinmap = SPI_pinmap_P1;
  90.     sc.nss = SPI_NSS_Soft;
  91.     sc.mode = SPI_Mode_Master;
  92.     SPI_config(&sc);
  93.     SPI_cmd(ENABLE);
  94. }

  95. void main()
  96. {
  97.     initSys();
  98.     Init7219();

  99.     P1_3 = 1;
  100.         byte pos = 0, size = sizeof(numbers), i, j;
  101.         while(1)
  102.         {
  103.         for (i = 0; i < 8; i++)
  104.         {
  105.             j = (pos + i) % size;
  106.             Write7219(i + 1, numbers[j]);
  107.         }
  108.         pos = (pos + 1) % size;
  109.         sleep(100);
  110.         }
  111. }
復制代碼

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产91久久综合桃花 | 日本一区二区三区四区 | 中文字幕在线免费观看 | 欧美极品一区二区 | 欧美日韩国产精品一区 | 精品欧美一区二区三区久久久 | 一区二区精品在线 | 免费的一级视频 | 99精品视频免费观看 | 国产精品美女www爽爽爽 | 一区二区三区在线电影 | 国产精品久久一区二区三区 | 亚洲欧美中文日韩在线v日本 | 涩爱av一区二区三区 | 成人免费视频网站在线观看 | av日韩在线播放 | 一级做a爰片性色毛片视频停止 | 日韩国产专区 | 美女爽到呻吟久久久久 | 精品欧美激情在线观看 | 做a的各种视频 | 国产亚洲精品91 | 91精品国产91久久久久久最新 | 成人福利网| 午夜精品在线 | 亚洲成人免费观看 | 香蕉婷婷| av国产精品| 黄色大片免费网站 | 成人免费毛片片v | 在线国产中文字幕 | 国产成人精品一区二区三区在线 | 在线观看中文字幕av | 亚洲一区视频 | 美女久久| 亚洲人成人一区二区在线观看 | 99视频在线看| 国产专区在线 | 日日夜夜操天天干 | 免费中文字幕日韩欧美 | 欧美久久一区二区 |