单片机程序设计与应用

2、编写一个数码管函数。先使数码管显示数字0,延时1s后,数码管显示数字1,依此类推,当数码管显示数字9时,数码管再次显示数字0,如此周而复始。要求:1s是准确的一秒,必须使用计时器T0,方式0来来实现。按下某个按键K4,蜂鸣器响一声,数码管开始启动,再次按下该按键,蜂鸣器响一声,数码管停止。


#include <reg51.h>
    void
    delay(unsigned char n);
int main(void)
{
    unsigned char led[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; //0-9μ?×?Dí??
    unsigned char i;
    P2 = 0x00;
    while (1)
    {
        for (i = 0; i < 10; i++)
        {
            P0 = led[i];
            delay(250);
            if (P0 == led[9])
            {
                P0 = led[0];
                i++;
            }
        }
    }
}
void delay(unsigned char n)
{
    unsigned char i, j;
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            ;
}

编写一个数码管函数。
先使数码管显示数字0,延时1s后,数码管显示数字1,依此类推,当数码管显示数字F时,数码管再次显示数字0,如此周而复始。
要求:1s是准确的,必须使用计时器T1,方式2来实现。按下某个按键K3,蜂鸣器响一声,数码管开始启动,再次按下该按键,蜂鸣器响一声,数码管反向启动。按键必须是用外中断0来实现。要求数码管必须使用数组来实现。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^