用单片机完成定时器1,工作方式1,一个数码管以1.5s,显示2-3-2-3

部分思路:
码表table={2码表,3码表};//table(0)和table(1)是2和3的显示。
提前声明 k=0;
位选选中第一位;
while(1)
{if(判断20)

k=~k;
P=table(k);
}
}
或者
if(判断20)
{
if 当前是显示2
P=3段码;
else
P=2段码;
}

参考GPT和自己的思路:根据您提供的思路,实现1.5秒循环显示2-3-2-3的代码如下:

// 定义码表
unsigned char table[2]={0xC0, 0xF3}; // table(0)和table(1)分别对应2和3的显示
// 定义计数器初始值和位选序号
unsigned char count = 0;
unsigned char num_index = 0;

void main()
{
    TMOD = 0x10; // 定时器1工作方式1
    TH1 = 0xFC; // 定时器1: 1.5s
    TL1 = 0x66;
    ET1 = 1; // 开启定时器1中断
    EA = 1; // 开启总中断
    TR1 = 1; // 启动定时器1
    
    while(1) {
        // 判断是否到达20ms
        if (count >= 100) {
            count = 0; // 计数器清零
            // 根据位选序号显示数字
            switch(num_index) {
                case 0: P1 = table[0]; break;
                case 1: P1 = table[1]; break;
                case 2: P1 = table[0]; break;
                case 3: P1 = table[1]; break;
                default: break;
            }
            // 下一位选中
            num_index = (num_index + 1) % 4;
        }
    }
}

// 定时器1中断函数
void timer1() interrupt 3 {
    TH1 = 0xFC; // 重新装载初值
    TL1 = 0x66;
    count++; // 计数器自增
}

首先定义码表,然后在主函数中设置定时器1,开启定时器1中断和总中断。在一个无限循环中判断是否到达20ms触发的定时器1中断,若到达,则根据位选序号选择显示对应的数字,并将位选序号加1,实现循环显示2-3-2-3的效果。

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

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