想要使用103c8t6来通过这个16x16的点阵显示图形,但是没有这个相关资料,要怎么插线怎么写代码求解决(上面的芯片是74hc595d)


想要使用103c8t6来通过这个16x16的点阵显示图形,但是没有这个相关资料,要怎么插线怎么写代码求解决(上面的芯片是74hc595d)


中午好🌞🌞🌞
本答案参考通义千问
你提到的“百科融创74HC595”是一个常见的8位移位寄存器芯片,常用于扩展单片机的输出引脚。而“16x16点阵”通常指的是一个由 16行 × 16列 组成的LED点阵屏,每个点可以点亮或熄灭,实现图形显示。
你提到使用的是 STM32F103C8T6(简称103C8T6),这是一种常用的32位MCU,具有丰富的GPIO资源,适合控制点阵显示。
| 74HC595 | 引脚 | 功能 | |--------|------|------| | 74HC595-1 | Q0~Q7 | 控制前8列 | | 74HC595-2 | Q0~Q7 | 控制后8列 |
| 单片机引脚 | 74HC595-1 | 74HC595-2 | |------------|-----------|-----------| | PA0 | DS(数据输入) | DS(数据输入) | | PA1 | SHCP(时钟) | SHCP(时钟) | | PA2 | STCP(锁存) | STCP(锁存) | | GND | GND | GND | | VCC | VCC | VCC |
注意: 如果你只用一个74HC595,只能控制8列,那么需要配合其他方法(如行列扫描)来控制16列。
#define DS_PIN GPIO_PIN_0
#define SHCP_PIN GPIO_PIN_1
#define STCP_PIN GPIO_PIN_2
void HC595_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStruct.GPIO_Pin = DS_PIN | SHCP_PIN | STCP_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
void HC595_Write(uint8_t data) {
for (int i = 0; i < 8; i++) {
if (data & 0x80) {
GPIO_SetBits(GPIOA, DS_PIN); // 设置数据位为高
} else {
GPIO_ResetBits(GPIOA, DS_PIN); // 设置数据位为低
}
GPIO_SetBits(GPIOA, SHCP_PIN); // 脉冲时钟
GPIO_ResetBits(GPIOA, SHCP_PIN);
data <<= 1;
}
GPIO_SetBits(GPIOA, STCP_PIN); // 锁存数据
GPIO_ResetBits(GPIOA, STCP_PIN);
}
你需要准备一个 16x16点阵的字模数据,可以用工具生成,或者自己定义。
const uint8_t PROGMEM H[16] = {
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00
};
void DisplayChar(const uint8_t *char_data) {
for (int row = 0; row < 16; row++) {
uint8_t col_data = char_data[row];
HC595_Write(col_data); // 发送列数据
// 延时控制刷新频率
delay_ms(1);
}
}
注意: 上述代码只是一个基本框架,实际应用中还需要结合 行扫描 或 动态显示 来实现完整的16x16点阵显示。
硬件连接:
代码逻辑:
数据格式:
#include "stm32f103x8.h"
// 定义74HC595控制引脚
#define DS_PIN GPIO_PIN_0
#define SHCP_PIN GPIO_PIN_1
#define STCP_PIN GPIO_PIN_2
// 点阵数据(16x16)
const uint8_t PROGMEM H[16] = {
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00
};
// 初始化74HC595
void HC595_Init() {
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStruct.GPIO_Pin = DS_PIN | SHCP_PIN | STCP_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
// 写入数据到74HC595
void HC595_Write(uint8_t data) {
for (int i = 0; i < 8; i++) {
if (data & 0x80)
GPIO_SetBits(GPIOA, DS_PIN);
else
GPIO_ResetBits(GPIOA, DS_PIN);
GPIO_SetBits(GPIOA, SHCP_PIN);
GPIO_ResetBits(GPIOA, SHCP_PIN);
data <<= 1;
}
GPIO_SetBits(GPIOA, STCP_PIN);
GPIO_ResetBits(GPIOA, STCP_PIN);
}
// 显示字符
void DisplayChar(const uint8_t *char_data) {
for (int row = 0; row < 16; row++) {
HC595_Write(char_data[row]);
delay_ms(1);
}
}
// 延时函数(需根据系统时钟调整)
void delay_ms(uint32_t ms) {
for (uint32_t i = 0; i < ms * 1000; i++);
}
int main(void) {
HC595_Init();
while (1) {
DisplayChar(H);
}
}
| 项目 | 内容 |
|------|------|
| 芯片 | 74HC595D |
| MCU | STM32F103C8T6 |
| 点阵类型 | 16x16 |
| 控制方式 | 74HC595 + 行扫描 |
| 核心代码 | HC595_Write() 和 DisplayChar() |
| 数据来源 | 字模生成工具 |
如果你有具体的点阵型号或想要显示的内容(如汉字、动画等),我可以进一步帮你生成对应的字模数据和代码!