找回密码
 注册

QQ登录

只需一步,快速开始

搜索

stm32驱动MAX7912 io口模拟spi驱动8位数码管程序源码

[复制链接]
路漫漫 发表于 2020-5-18 18:19:54 | 显示全部楼层 |阅读模式
完整源码 stm32_max7219code.zip (307.5 KB, 售价: 2 E币)
关于MAX7912驱动数码管的问题,论坛上基本找到的都会51驱动例程。
实际上我测试过根据资料也没有什么问题,但是如果一旦移植到32,确发现不行。检查时序没有问题,百思不得其解,去网上找资料找到的都是硬件spi。
看到spi速率的问题时突然想到8051和stm32单片机之间的区别,就是主频问题,f1主频71M,基本8051只有1M,max7912是否也有反应速率的问题呢?于是将模拟IO口的工作频率设置为10M,发现问题解决。
部分源码
  1. void Write7219(unsigned char address,unsigned char dat)
  2. {  
  3.     unsigned char i;
  4.     Max7219_CS(0);    //拉低片选线,选中器件
  5.     //发送地址
  6.     for (i=0;i<8;i++)        //移位循环8次            
  7.     {  
  8.        Max7219_CLK(0);       //清零时钟总线
  9.                          if((address&0x80))
  10.                          {
  11.                                  Max7219_DIN(1);
  12.                          }
  13.                                 else
  14.                                 {
  15.                                         Max7219_DIN(0);
  16.                                 }                                       
  17.        address<<=1;             //左移一位
  18.        Max7219_CLK(1);        //时钟上升沿,发送地址
  19.     }
  20.     //发送数据
  21.     for (i=0;i<8;i++)              
  22.     {  
  23.        Max7219_CLK(0);
  24.       if((dat&0x80))
  25.                          {
  26.                                  Max7219_DIN(1);
  27.                          }
  28.                                 else
  29.                                 {
  30.                                         Max7219_DIN(0);
  31.                                 }   
  32.        dat<<=1;
  33.        Max7219_CLK(1);         //时钟上升沿,发送数据
  34.     }
  35.     Max7219_CS(1);    //发送结束,上升沿锁存数据                     
  36. }
  37. //MAX7219初始化,设置MAX7219内部的控制寄存器
  38. void Max7219Init(void)               
  39. {
  40.     MAX7912_GPIO_Config();
  41.     Write7219(SHUT_DOWN,0x01);         //开启正常工作模式(0xX1)
  42.     Write7219(DISPLAY_TEST,0x00);      //选择工作模式(0xX0)
  43.     Write7219(DECODE_MODE,0xff);       //选用全译码模式
  44.     Write7219(SCAN_LIMIT,0x07);        //8只LED全用
  45.     Write7219(INTENSITY,0x04);          //设置初始亮度     
  46. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-12-22 16:14

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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