Berikut adalah contoh program untuk mengontrol 7-segment display dengan
menggunakan STM32F103C8T6 dan 74HC595 shift register dengan tambahan
push button sebagai counter:
// Define pin connections #define latchPin GPIO_Pin_7 #define clockPin GPIO_Pin_5 #define dataPin GPIO_Pin_6 #define buttonPin GPIO_Pin_0
// Define the numbers to be displayed on the 7-segment display uint8_t numbers[10] = { 0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111 };
int count = 0;
void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure;
// Enable the GPIO clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// Configure the latch pin as output push-pull GPIO_InitStructure.GPIO_Pin = latchPin; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);
// Configure the clock pin as output push-pull GPIO_InitStructure.GPIO_Pin = clockPin; GPIO_Init(GPIOA, &GPIO_InitStructure);
// Configure the data pin as output push-pull GPIO_InitStructure.GPIO_Pin = dataPin; GPIO_Init(GPIOA, &GPIO_InitStructure);
// Configure the button pin as input pull-up GPIO_InitStructure.GPIO_Pin = buttonPin; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure); }
int main(void) { // Initialize the system clock SystemInit();
// Configure the GPIO pins GPIO_Configuration();
while (1) { // Check if the button is pressed if (GPIO_ReadInputDataBit(GPIOA, buttonPin) == RESET) { // Increment the count count++; // Reset the count to 0 if it reaches 10 if (count == 10) { count = 0; } // Write the number to the shift register uint8_t number = numbers[count]; for (int i = 0; i < 8; i++) { // Send each bit to the shift register GPIO_WriteBit(GPIOA, dataPin, (BitAction)(number & (1 << i))); // Toggle the clock pin to shift the bit in GPIO_WriteBit(GPIOA, clockPin, Bit_SET); GPIO_WriteBit(GPIOA, clockPin, Bit_RESET); } // Toggle the latch pin to output the data GPIO_WriteBit(GPIOA, latchPin, Bit_SET); GPIO_WriteBit(GPIOA, latchPin, Bit_RESET); // Wait for a short delay to avoid multiple counts from a single press delay_ms(100); } } }
Penjelasan: - Program ini menggunakan pin yang berbeda dengan program sebelumnya untuk koneksi ke shift register dan push button pada STM32F103C8T6.
- Kami menambahkan fungsi GPIO_Configuration untuk mengatur pin yang akan digunakan sebagai output atau input dengan internal pull-up resistor untuk push button.
- Kami juga menambahkan variabel count, yang menyimpan nilai dari counter saat ini.
- Pada fungsi main, kami membaca input dari push button dan jika ditekan, kami akan menambahkan count dan menulis angka ke shift register untuk menampilkan angka pada 7-segment display. Jika count mencapai nilai 10, maka count akan direset kembali ke 0.
- Kami menggunakan array numbers untuk menyimpan nilai biner dari angka 0 hingga 9 yang akan ditampilkan pada 7-segment display. Angka 0 disimpan pada indeks ke-0, angka 1 disimpan pada indeks ke-1, dan seterusnya.
- Kami menggunakan loop for untuk mengirimkan setiap bit dari nilai angka yang akan ditampilkan pada shift register. Setiap bit dikirimkan dari bit paling kiri (MSB) ke bit paling kanan (LSB).
- Setelah semua bit dikirimkan ke shift register, kami mengaktifkan latch pin untuk mengeluarkan data dari shift register ke 7-segment display.
- Kami juga menambahkan delay sebentar setelah menekan push button untuk menghindari multiple counts dari satu tekanan tombol yang sama.
Harap diperhatikan bahwa program ini hanya contoh dan mungkin perlu disesuaikan dengan kebutuhan dan konfigurasi perangkat keras yang digunakan.
|