找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7305|回复: 4
打印 上一主题 下一主题
收起左侧

stm32如何正确的点亮串联的MAX7219点阵

[复制链接]
跳转到指定楼层
楼主
ID:98880 发表于 2018-8-3 10:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近做一个小实验.用的是网上的那种8X32的点阵屏,MAX7219屏驱动的,我现在用STM32的SPI硬件驱动,但每次驱动时都是四个8X8的点陈显示同一样东西,后来按网上的代码,自己写了一个用0X00填充,但除了第三和第四位正常显示,第一位和第二位就不显示正常.
  1.         while(1)
  2.         {
  3.   for(j=0;j<38;j++)
  4.   {
  5.    for(i=1;i<9;i++)
  6.                 {
  7.                         Write_Max7219(1,i,disp1[j][i-1]);
  8. //                        Write_Max7219(2,i,disp1[j][i-1]);
  9. //                        Write_Max7219(3,i,disp1[j][i-1]);
  10. //                        Write_Max7219(4,i,disp1[j][i-1]);                        


  11.                         delay_ms(50);
  12.                 }
  13.   }  
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:187303 发表于 2019-1-7 19:01 | 只看该作者
你可以参考我附件中的代码,编译通过。

STM32 硬件SPI max7219 8位数码管显示模块

单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "delay.h"

  3. /****************************************************************************
  4. * 名    称:SPI1_Init(void)
  5. * 功    能:STM32_SPI1硬件配置初始化
  6. * 入口参数:无
  7. * 出口参数:无
  8. * 说    明:STM32_SPI1硬件配置初始化 使用3V3
  9. ****************************************************************************/
  10. void SPI1_Init(void)       
  11. {
  12.         SPI_InitTypeDef  SPI1_InitStructure;
  13.         GPIO_InitTypeDef GPIO_InitStructure;
  14.          
  15.         //配置SPI1管脚
  16.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA, ENABLE);
  17.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
  18.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
  19.   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  20.   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  21.   GPIO_Init(GPIOA,&GPIO_InitStructure);
  22.        
  23.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  24.   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  25.   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  26.   GPIO_Init(GPIOA,&GPIO_InitStructure);
  27.          
  28.         SPI1_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;
  29.         SPI1_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_64;
  30.         SPI1_InitStructure.SPI_DataSize=SPI_DataSize_8b;
  31.         SPI1_InitStructure.SPI_Mode=SPI_Mode_Master;
  32.         SPI1_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB; //高位在先
  33.         SPI1_InitStructure.SPI_CPOL = SPI_CPOL_High;                                       
  34.         SPI1_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  35.         SPI1_InitStructure.SPI_NSS = SPI_NSS_Hard; // 使用硬件模式,PA4需要接高电平
  36.         SPI1_InitStructure.SPI_CRCPolynomial = 7;
  37.        
  38.         SPI_I2S_DeInit(SPI1);
  39.        
  40.         SPI_Init(SPI1, &SPI1_InitStructure);
  41.        
  42.         SPI_Cmd(SPI1, ENABLE);   
  43. }


  44. //-------------------------------------------
  45. //功能:向MAX7219写入数据
  46. //入口参数:address、dat
  47. //出口参数:无
  48. //说明:
  49. void Write_Max7219(u8 address,u8 dat)
  50. {
  51.                         GPIO_ResetBits(GPIOA, GPIO_Pin_3);       
  52.       SPI_I2S_SendData(SPI1, address);  //写入地址,即数码管编号
  53.             delay_us(10);
  54.             SPI_I2S_SendData(SPI1, dat);            //写入数据,即数码管显示数字
  55.             delay_us(10);
  56.                         GPIO_SetBits(GPIOA, GPIO_Pin_3);
  57. }

  58. void Init_MAX7219(void)
  59. {
  60. Write_Max7219(0x09, 0xff);       //译码方式:BCD码
  61. Write_Max7219(0x0a, 0x03);       //亮度
  62. Write_Max7219(0x0b, 0x07);       //扫描界限;8个数码管显示
  63. Write_Max7219(0x0c, 0x01);       //掉电模式:0,普通模式:1
  64. Write_Max7219(0x0f, 0x00);       //显示测试:1;测试结束,正常显示:0
  65. }

  66. int main(void)
  67. {
  68.         delay_init();
  69.         SPI1_Init();
  70.         Init_MAX7219();
  71.         Write_Max7219(0x01, 0x00);
  72.         Write_Max7219(0x02, 0x01);
  73.         Write_Max7219(0x03, 0x02);
  74.         Write_Max7219(0x04, 0x03);
  75.         Write_Max7219(0x05, 0x04);
  76.         Write_Max7219(0x06, 0x05);
  77.         Write_Max7219(0x07, 0x06);
  78.         Write_Max7219(0x08, 0x07);
  79.         while(1)
  80.         {
  81.         }
  82. }

复制代码

所有资料51hei提供下载:
STM32_SPI_SMG.7z (210.35 KB, 下载次数: 246)



回复

使用道具 举报

板凳
ID:805240 发表于 2021-1-21 14:29 | 只看该作者
cm7626 发表于 2019-1-7 19:01
你可以参考我附件中的代码,编译通过。

STM32 硬件SPI max7219 8位数码管显示模块

太棒了,找了很长时间,就你的靠谱
回复

使用道具 举报

地板
ID:671973 发表于 2021-2-5 14:54 | 只看该作者
汪明海 发表于 2021-1-21 14:29
太棒了,找了很长时间,就你的靠谱

这个引脚怎么连的?34567我试过了,都不行,我的最小系统
回复

使用道具 举报

5#
ID:1027551 发表于 2022-5-18 13:25 | 只看该作者
请问一下引脚如何连接呢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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