明白了!为了点亮两位数字的数码管,使用单片机AT89C51,并使用P2口输出数字,同时使用P3口的高两位作为位选信号,你可以尝试以下的C语言代码:

#include <reg51.h>

// 数码管的共阳极连接方式
unsigned char digitCode[] = {
    0xC0,  // 数字0的编码
    0xF9,  // 数字1的编码
    0xA4,  // 数字2的编码
    0xB0,  // 数字3的编码
    0x99,  // 数字4的编码
    0x92,  // 数字5的编码
    0x82,  // 数字6的编码
    0xF8,  // 数字7的编码
    0x80,  // 数字8的编码
    0x90   // 数字9的编码
};

void delay(unsigned int milliseconds) {
    unsigned int i, j;
    for (i = 0; i < milliseconds; i++)
        for (j = 0; j < 1000; j++);
}

void displayNumber(unsigned int number) {
    unsigned char digit1, digit2;

    digit1 = number % 10;       // 取个位数字
    digit2 = (number / 10) % 10; // 取十位数字

    P2 = digitCode[digit1];      // 输出个位数字编码
    P3 = 0xFE;                   // 第一位数码管位选
    delay(5);                    // 稍作延时
    P3 = 0xFF;                   // 关闭所有位选,熄灭数码管

    P2 = digitCode[digit2];      // 输出十位数字编码
    P3 = 0xFD;                   // 第二位数码管位选
    delay(5);                    // 稍作延时
    P3 = 0xFF;                   // 关闭所有位选,熄灭数码管
}

void main() {
    while (1) {
        unsigned int number;
        
        // 待显示的数字从0递增到99
        for (number = 0; number < 100; number++) {
            displayNumber(number);
            delay(1000); // 延时1秒
        }
    }
}

这段代码使用了一个名为digitCode的数组来存储数字0到9的编码。displayNumber函数用于显示两位数字,它根据传入的数字参数,分别输出个位数字和十位数字的编码,并使用P3口的高两位作为位选信号进行驱动。然后通过一个循环,在数码管上显示从0到99的数字。

请记住,这只是一个示例代码,你可能需要根据具体的硬件连接和需求进行适当的修改。希望对你有所帮助!如有更多问题,请随时提问。


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

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