#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 = segmentCode[number];

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

}

int main(void) { // 设置PD0-PD7引脚为输出,用于控制数码管的段选 DDRD = 0xFF;

// 设置PB0-PB3引脚为输出,用于控制数码管的位选
DDRB = 0x0F;

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

    // 将拨码开关的值显示在数码管上
    for (int i = 0; i < 4; i++) {
        // 设置位选
        PORTB = (1 << i);
        
        // 获取当前位的数字
        int digit = (switchValue >> (i * 2)) & 0x03;
        
        // 将数字显示在数码管上
        displayNumber(digit);
        
        // 延时一段时间,以显示数字
        _delay_ms(10);
    }
}

return 0;

}

// 该代码实现了将八位拨码开关的状态对应的十进制数显示到四位数码管上,并对代码进行了改进和优化。 // 改进后的代码增加了对拨码开关输入的检测,通过循环控制位选和位操作控制段选,以便同时显示多位数字。 // 同时,添加了数码管的共阳/共阴设置,可以根据具体硬件进行设置。

AVR单片机实现八位拨码开关控制四位数码管显示

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

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