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.

 Copyright stekom.ac.id 2018 All Right Reserved