AVR单片机数码管显示拨码开关值
#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 };
// 检查参数的合法性
if (number < 0 || number > 9) {
return;
}
// 将数字转换为段码
int segmentValue = segmentCode[number];
// 将段码输出到数码管
PORTD = segmentValue;
}
int main(void) { // 设置PD0-PD7引脚为输出,用于控制数码管的段选 DDRD = 0xFF;
// 设置PB0-PB3引脚为输出,用于控制数码管的位选
DDRB = 0x0F;
// 设置PA0-PA3引脚为输入,用于读取拨码开关的值
DDRA = 0x00;
PORTA = 0x0F; // 使能内部上拉电阻
while (1) {
// 读取拨码开关的值
int switchValue = PINA & 0x0F;
// 将拨码开关的值显示在数码管上
displayNumber(switchValue);
// 控制数码管的位选
PORTB = ~(1 << (switchValue % 4));
_delay_ms(100);
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/fxZh 著作权归作者所有。请勿转载和采集!