#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;

    // 初始化数码管显示为全熄灭
    PORTD = 0x00;

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

        // 将拨码开关的值显示在数码管上
        displayNumber(switchValue);

        _delay_ms(100);
    }

    return 0;
}

代码说明

  • 该代码使用ATmega16单片机控制四位共阴极数码管显示拨码开关状态。
  • displayNumber()函数根据输入的数字显示对应的段码。
  • main()函数中,首先初始化端口方向,将数码管控制引脚设置为输出,并将初始状态设置为全熄灭。
  • 然后进入无限循环,不断读取拨码开关的值,并调用displayNumber()函数更新数码管显示。

硬件连接

  • 将四位共阴极数码管的八个段选引脚连接至ATmega16的PD0-PD7引脚。
  • 将八位拨码开关的八个输出引脚连接至ATmega16的PA0-PA7引脚。
  • 为拨码开关提供电源。

注意

  • 代码中DDRB = 0x0F;一行实际上没有被使用,可以删除。
  • 根据实际使用的数码管和拨码开关型号,可能需要修改引脚连接和代码。
ATmega16单片机:使用拨码开关控制四位共阴极数码管显示

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

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