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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3503|回復(fù): 1
收起左側(cè)

stm32驅(qū)動MAX7912(io口模擬spi驅(qū)動8位數(shù)碼管)

[復(fù)制鏈接]
ID:538157 發(fā)表于 2020-5-16 19:00 | 顯示全部樓層 |閱讀模式

  • 關(guān)于MAX7912驅(qū)動數(shù)碼管的問題,論壇上基本找到的都會51驅(qū)動例程。
  • 實際上我測試過根據(jù)資料也沒有什么問題,但是如果一旦移植到32,確發(fā)現(xiàn)不行。檢查時序沒有問題,百思不得其解,去網(wǎng)上找資料找到的都是硬件spi。
  • 看到spi速率的問題時突然想到8051和stm32單片機(jī)之間的區(qū)別,就是主頻問題,f1主頻71M,基本8051只有1M,max7912是否也有反應(yīng)速率的問題呢?于是將模擬IO口的工作頻率設(shè)置為10M,發(fā)現(xiàn)問題解決。
C文件



#include "max7219.h"

static void MAX7912_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStruct;
        //CLK
        RCC_APB2PeriphClockCmd(Max7219_CS_GPIO_CLK , ENABLE);
        RCC_APB2PeriphClockCmd(Max7219_CLK_GPIO_CLK , ENABLE);
        RCC_APB2PeriphClockCmd(Max7219_DIN_GPIO_CLK , ENABLE);
        
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;//注意引腳的工作頻率,太高反而無法接收數(shù)據(jù)
        
        GPIO_InitStruct.GPIO_Pin = Max7219_CS_GPIO_PIN;
        GPIO_Init(Max7219_CS_GPIO_PORT, &GPIO_InitStruct);
        
        GPIO_InitStruct.GPIO_Pin = Max7219_CLK_GPIO_PIN;
        GPIO_Init(Max7219_CLK_GPIO_PORT, &GPIO_InitStruct);
        
        GPIO_InitStruct.GPIO_Pin = Max7219_DIN_GPIO_PIN;
        GPIO_Init(Max7219_DIN_GPIO_PORT, &GPIO_InitStruct);
        
        Max7219_CS(0);
        Max7219_CLK(0);
        Max7219_DIN(0);
}

void Write7219(unsigned char address,unsigned char dat)
{  
    unsigned char i;
    Max7219_CS(0);    //拉低片選線,選中器件
    //發(fā)送地址
    for (i=0;i<8;i++)        //移位循環(huán)8次            
    {  
       Max7219_CLK(0);       //清零時鐘總線
                         if((address&0x80))
                         {
                                 Max7219_DIN(1);
                         }
                                else
                                {
                                        Max7219_DIN(0);
                                }                                       
       address<<=1;             //左移一位
       Max7219_CLK(1);        //時鐘上升沿,發(fā)送地址
    }
    //發(fā)送數(shù)據(jù)
    for (i=0;i<8;i++)              
    {  
       Max7219_CLK(0);
      if((dat&0x80))
                         {
                                 Max7219_DIN(1);
                         }
                                else
                                {
                                        Max7219_DIN(0);
                                }   
       dat<<=1;
       Max7219_CLK(1);         //時鐘上升沿,發(fā)送數(shù)據(jù)
    }
    Max7219_CS(1);    //發(fā)送結(jié)束,上升沿鎖存數(shù)據(jù)                     
}
//MAX7219初始化,設(shè)置MAX7219內(nèi)部的控制寄存器
void Max7219Init(void)               
{
    MAX7912_GPIO_Config();
    Write7219(SHUT_DOWN,0x01);         //開啟正常工作模式(0xX1)
    Write7219(DISPLAY_TEST,0x00);      //選擇工作模式(0xX0)
    Write7219(DECODE_MODE,0xff);       //選用全譯碼模式
    Write7219(SCAN_LIMIT,0x07);        //8只LED全用
    Write7219(INTENSITY,0x04);          //設(shè)置初始亮度     
}
h文件


#ifndef _MAX7219_H
#define _MAX7219_H

#include "stm32f10x.h"

#define DECODE_MODE  0x09   //譯碼控制寄存器
#define INTENSITY    0x0A   //亮度控制寄存器
#define SCAN_LIMIT   0x0B   //掃描界限寄存器
#define SHUT_DOWN    0x0C   //關(guān)斷模式寄存器
#define DISPLAY_TEST 0x0F   //測試控制寄存器

#define Max7219_CS_GPIO_PIN      GPIO_Pin_1//如果要修改引腳,修改宏定義即可
#define Max7219_CS_GPIO_PORT     GPIOA
#define Max7219_CS_GPIO_CLK      RCC_APB2Periph_GPIOA//

#define Max7219_CLK_GPIO_PIN      GPIO_Pin_0
#define Max7219_CLK_GPIO_PORT     GPIOA
#define Max7219_CLK_GPIO_CLK      RCC_APB2Periph_GPIOA//

#define Max7219_DIN_GPIO_PIN      GPIO_Pin_2
#define Max7219_DIN_GPIO_PORT     GPIOA
#define Max7219_DIN_GPIO_CLK      RCC_APB2Periph_GPIOA//

//  \續(xù)行符  后面不能有任何東西
#define Max7219_CS(a)   if(a)\
                                                                                                GPIO_SetBits(Max7219_CS_GPIO_PORT, Max7219_CS_GPIO_PIN);\
                                                                         else GPIO_ResetBits(Max7219_CS_GPIO_PORT, Max7219_CS_GPIO_PIN);

#define Max7219_CLK(a)   if(a)\
                                                                                                GPIO_SetBits(Max7219_CLK_GPIO_PORT, Max7219_CLK_GPIO_PIN);\
                                                                         else GPIO_ResetBits(Max7219_CLK_GPIO_PORT, Max7219_CLK_GPIO_PIN);

#define Max7219_DIN(a)   if(a)\
                                                                                                GPIO_SetBits(Max7219_DIN_GPIO_PORT, Max7219_DIN_GPIO_PIN);\
                                                                         else GPIO_ResetBits(Max7219_DIN_GPIO_PORT, Max7219_DIN_GPIO_PIN);

void Write7219(unsigned char address,unsigned char dat);
void Max7219Init(void) ;

#endif

全部資料51hei下載地址:
max7219.7z (176.56 KB, 下載次數(shù): 49)

評分

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

查看全部評分

回復(fù)

使用道具 舉報

ID:922249 發(fā)表于 2021-11-17 16:44 | 顯示全部樓層
題主你好,請問是7219還是7912呀?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品精品| 香蕉视频91| 日屁视频 | 欧美一区二区三区在线观看视频 | 国产免费一区二区三区 | 国产精品久久精品 | 亚洲国产欧美在线 | 精品美女| 日韩成人一区二区 | 欧美一级做性受免费大片免费 | 国产精品久久久久国产a级 欧美日韩国产免费 | 日韩欧美中文字幕在线观看 | 91热爆在线观看 | 三级av在线 | 午夜一区二区三区 | 黄色一级片aaa | 人人玩人人添人人澡欧美 | 国产在线一区二区 | 一区二区三区福利视频 | 91精品国产91久久综合桃花 | 密室大逃脱第六季大神版在线观看 | 最近日韩中文字幕 | 91 视频网站 | 亚洲欧美在线一区 | 欧美国产视频 | 成人av在线网站 | 日韩第一页 | 天天天堂| 国产a爽一区二区久久久 | 国产精品一区二区久久久久 | 91精品国产91久久久久久吃药 | 精品一区在线免费观看 | 日韩在线视频免费观看 | 99热国产精品| 97视频人人澡人人爽 | 成人在线不卡 | 中文字幕一区二区三区不卡 | 日韩中文一区 | 一区二区免费视频 | 欧美一级片久久 | 国产 日韩 欧美 中文 在线播放 |