stm32f103c8t6控制max7912 的8x8的点阵频的程序寄存器版
时间: 2023-08-01 12:12:38 浏览: 49
以下是一个简单的程序,使用SPI接口控制MAX7219芯片,实现8x8的点阵频控制:
```c
#include "stm32f10x.h"
#define MAX7219_CS_LOW() GPIO_ResetBits(GPIOA, GPIO_Pin_4)
#define MAX7219_CS_HIGH() GPIO_SetBits(GPIOA, GPIO_Pin_4)
void SPI1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1, ENABLE);
// 配置SPI1接口的GPIO管脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置片选CS的GPIO管脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置SPI1接口
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);
}
void MAX7219_Write(uint8_t reg, uint8_t value)
{
MAX7219_CS_LOW();
SPI1->DR = reg;
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI1->DR = value;
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
MAX7219_CS_HIGH();
}
void MAX7219_Init(void)
{
MAX7219_Write(0x0F, 0x00); // 关闭显示测试模式
MAX7219_Write(0x0C, 0x01); // 打开普通模式
MAX7219_Write(0x0B, 0x07); // 设置扫描限制,扫描所有的行
MAX7219_Write(0x09, 0xFF); // 设置亮度
MAX7219_Write(0x0A, 0x0F); // 设置显示的数量为8个
}
void MAX7219_Clear(void)
{
uint8_t i;
for (i = 1; i <= 8; i++) {
MAX7219_Write(i, 0x00);
}
}
void MAX7219_Display(uint8_t *buffer)
{
uint8_t i;
for (i = 1; i <= 8; i++) {
MAX7219_Write(i, buffer[i-1]);
}
}
int main(void)
{
uint8_t buffer[8] = {0x18, 0x24, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00};
// 初始化SPI1接口和MAX7219芯片
SPI1_Init();
MAX7219_Init();
// 清空显示屏
MAX7219_Clear();
while (1) {
// 显示一个笑脸
MAX7219_Display(buffer);
}
}
```
请注意,本程序只是一个简单的例子,可能需要根据您的具体应用做出一些修改。此外,如果您需要使用其他型号的MAX7219芯片,可能需要根据数据手册更改寄存器的值。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)