AVR单片机数码管显示控制:实现数字自由增减

本文将介绍如何使用AVR单片机控制数码管显示,并通过按钮实现数字的自由增减。

硬件准备

  • AVR单片机开发板* 四位数码管* 按钮开关* 面包板* 杜邦线

电路连接

  1. 将四位数码管的公共端连接到单片机的PB0~PB3引脚。2. 将四位数码管的段选线连接到单片机的PD0~PD7引脚。3. 将按钮开关的一端连接到单片机的PA0引脚,另一端连接到GND。

软件代码

以下是使用AVR单片机控制数码管显示并通过按钮实现数字自由增减的C语言代码:c#include <avr/io.h>#include <avr/delay.h>

#define F_CPU 8000000UL // 设置CPU时钟频率为8MHz

// 数码管显示的数字对应的编码const uint8_t segCode[10] = { 0b00111111, // 0 0b00000110, // 1 0b01011011, // 2 0b01001111, // 3 0b01100110, // 4 0b01101101, // 5 0b01111101, // 6 0b00000111, // 7 0b01111111, // 8 0b01101111 // 9};

// 在数码管上显示十进制数void displayDecimal(uint8_t decimal) { uint8_t thousands = decimal / 1000; uint8_t hundreds = (decimal / 100) % 10; uint8_t tens = (decimal / 10) % 10; uint8_t units = decimal % 10;

PORTB = 0b00001111; // 全部数码管熄灭    PORTD = segCode[thousands]; // 在千位数码管上显示千位数字    PORTB = 0b00001110; // 打开千位数码管    _delay_ms(1);

PORTB = 0b00001111; // 全部数码管熄灭    PORTD = segCode[hundreds]; // 在百位数码管上显示百位数字    PORTB = 0b00001101; // 打开百位数码管    _delay_ms(1);

PORTB = 0b00001111; // 全部数码管熄灭    PORTD = segCode[tens]; // 在十位数码管上显示十位数字    PORTB = 0b00001011; // 打开十位数码管    _delay_ms(1);

PORTB = 0b00001111; // 全部数码管熄灭    PORTD = segCode[units]; // 在个位数码管上显示个位数字    PORTB = 0b00000111; // 打开个位数码管    _delay_ms(1);}

int main(void) { DDRA = 0x00; // 设置PA0引脚为输入 DDRB = 0x0F; // 设置PB0~PB3引脚为输出 DDRD = 0xFF; // 设置PD0~PD7引脚为输出

PORTB = 0b00001111; // 全部数码管熄灭

uint8_t decimal = 0; // 初始化显示的数字

while (1) {        if (PINA & 0x01) { // 检测按钮是否按下            _delay_ms(20); // 延时去抖动            if (PINA & 0x01) { // 再次检测按钮是否按下                decimal++; // 增加数字                if (decimal > 9999) {                    decimal = 0;                }                _delay_ms(200); // 延时防止连续增加            }        }

    displayDecimal(decimal); // 在数码管上显示十进制数    }

return 0;}

代码解释

  1. #define F_CPU 8000000UL: 定义CPU的时钟频率为8MHz。2. const uint8_t segCode[10]: 定义一个数组存储数码管显示0-9的段码。3. displayDecimal(uint8_t decimal): 该函数用于在数码管上显示十进制数。它首先将十进制数分解成个、十、百、千位,然后依次将每一位的段码输出到对应的数码管上。4. main()函数: * DDRA = 0x00;: 将PA0引脚设置为输入模式,用于读取按钮状态。 * DDRB = 0x0F;: 将PB0~PB3引脚设置为输出模式,用于控制数码管的位选。 * DDRD = 0xFF;: 将PD0~PD7引脚设置为输出模式,用于控制数码管的段选。 * uint8_t decimal = 0;: 定义一个变量存储当前显示的数字,初始化为0。 * while (1): 主循环,程序将一直运行在该循环中。 * if (PINA & 0x01): 检测按钮是否按下。如果按下,则延时去抖动,并再次检测按钮状态。如果仍然按下,则将显示的数字加1,并延时防止连续增加。 * displayDecimal(decimal): 调用该函数在数码管上显示当前的数字。

总结

本文介绍了如何使用AVR单片机控制数码管显示,并通过按钮实现数字的自由增减。你可以根据自己的需要修改代码,实现更复杂的功能,例如使用多个按钮控制数字的增减速度、设置数字的显示范围等。

AVR单片机数码管显示控制:实现数字自由增减

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

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