#include "stm32f10x.h"
// Define the pins connected to the 74HC595 shift registers
#define DATA_PIN GPIO_Pin_12 // Example pin, adjust as needed
#define CLOCK_PIN GPIO_Pin_13 // Example pin, adjust as needed
#define LATCH_PIN GPIO_Pin_14 // Example pin, adjust as needed
// Define the segment patterns for digits 0-9
const uint8_t digit_patterns[10] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
// Function to send data to the 74HC595 shift registers
void shift_out(uint16_t data) {
for (int i = 15; i >= 0; i--) {
// Set the data pin value
if ((data >> i) & 1) {
GPIO_SetBits(GPIOB, DATA_PIN);
} else {
GPIO_ResetBits(GPIOB, DATA_PIN);
}
// Pulse the clock pin
GPIO_SetBits(GPIOB, CLOCK_PIN);
GPIO_ResetBits(GPIOB, CLOCK_PIN);
}
}
// Function to display a 4-digit number
void display_number(uint16_t number) {
uint8_t digits[4];
// Extract individual digits
digits[0] = number % 10;
digits[1] = (number / 10) % 10;
digits[2] = (number / 100) % 10;
digits[3] = (number / 1000) % 10;
// Prepare data for shift registers
uint16_t data = 0;
for (int i = 0; i < 4; i++) {
data |= (digit_patterns[digits[i]] << (i * 7));
}
// Latch low
GPIO_ResetBits(GPIOB, LATCH_PIN);
// Shift out the data
shift_out(data);
// Latch high to display the number
GPIO_SetBits(GPIOB, LATCH_PIN);
}
int main(void) {
// Enable GPIOB clock
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
// Configure the pins as output push-pull
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = DATA_PIN | CLOCK_PIN | LATCH_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// Initialize the pins
GPIO_ResetBits(GPIOB, DATA_PIN | CLOCK_PIN | LATCH_PIN);
// Display numbers in a loop
int number = 0;
while (1) {
display_number(number);
number++;
if (number > 9999) {
number = 0;
}
// Delay for a short time (adjust as needed)
for (int i = 0; i < 100000; i++);
}
}
Loading
st-nucleo-l031k6
st-nucleo-l031k6
sevseg1:A
sevseg1:B
sevseg1:C
sevseg1:D
sevseg1:E
sevseg1:F
sevseg1:G
sevseg1:DP
sevseg1:DIG1
sevseg1:DIG2
sevseg1:DIG3
sevseg1:DIG4
sevseg1:COM
sevseg1:CLN
sr1:Q1
sr1:Q2
sr1:Q3
sr1:Q4
sr1:Q5
sr1:Q6
sr1:Q7
sr1:GND
sr1:Q7S
sr1:MR
sr1:SHCP
sr1:STCP
sr1:OE
sr1:DS
sr1:Q0
sr1:VCC
sr2:Q1
sr2:Q2
sr2:Q3
sr2:Q4
sr2:Q5
sr2:Q6
sr2:Q7
sr2:GND
sr2:Q7S
sr2:MR
sr2:SHCP
sr2:STCP
sr2:OE
sr2:DS
sr2:Q0
sr2:VCC
vcc2:VCC
gnd4:GND
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
r5:1
r5:2
r6:1
r6:2
r7:1
r7:2
r8:1
r8:2
DIO
RCLK
SCLK
GND
4-Bit LED Digital Tube