#include <avr/io.h> #include <util/delay.h>

// 数码管显示数字的函数 void displayNumber(int number) { // 数码管显示的数字对应的段码 int segmentCode[10] = { 0b00111111, // 0 0b00000110, // 1 0b01011011, // 2 0b01001111, // 3 0b01100110, // 4 0b01101101, // 5 0b01111101, // 6 0b00000111, // 7 0b01111111, // 8 0b01101111 // 9 };

// 将数字转换为段码
int segmentValue = 0;

// 限制数字范围在0-9之间
if (number >= 0 && number <= 9) {
    segmentValue = segmentCode[number];
}

// 将段码输出到数码管
PORTD = segmentValue;

}

int main(void) { // 设置PD0-PD7引脚为输出 DDRD = 0xFF;

// 设置PB0-PB3引脚为输出
DDRB = 0x0F;

while (1) {
    // 读取拨码开关的值
    int switchValue = PINA;

    // 分别获取拨码开关的每一位值
    int digit1 = switchValue & 0x01;
    int digit2 = (switchValue >> 1) & 0x01;
    int digit3 = (switchValue >> 2) & 0x01;
    int digit4 = (switchValue >> 3) & 0x01;

    // 依次显示四位数码管
    PORTB = 0b00001110; // 选中第一位数码管
    displayNumber(digit1);
    _delay_ms(10);

    PORTB = 0b00001101; // 选中第二位数码管
    displayNumber(digit2);
    _delay_ms(10);

    PORTB = 0b00001011; // 选中第三位数码管
    displayNumber(digit3);
    _delay_ms(10);

    PORTB = 0b00000111; // 选中第四位数码管
    displayNumber(digit4);
    _delay_ms(10);
}

return 0;

}

AVR单片机数码管显示拨码开关状态

原文地址: https://www.cveoy.top/t/topic/fx0U 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录