gpt4 book ai didi

c - Keil Proteus 中的数字时钟仿真

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:13 28 4
gpt4 key购买 nike

这个 C 程序应该模拟一个数字时钟。 Proteus 程序中将有 3 个 7segment 来显示小时、分钟和秒(就像数字时钟)

#include<reg51.h>

void main()
{
int t, i, j, k, a, b, c, d, e;
e = 0;
P3 = 0x00;
P2 = 0x00;
P0 = 0x00;
while (1)
{
P0 = 0x00;
for (c = 0; c<3; c++)
{
for (d = 0; d<10; d++)
{
for (a = 0; a<6; a++)
{
for (b = 0; b<10; b++)
{
for (t = 0; t<6; t++)
{
for (i = 0; i<10; i++)
{
for (k = 0; k<1000; k++)
for (j = 0; j<142; j++);
P3++;
}
P3 = P3 + 0x06;
}
P3 = 0x00;
P2++;
}
P2 = P2 + 0x06;
}
P2 = 0x00;
P0++;
if (P0 == 0x24){
P0 = 0x00;
e = 1;
}
if (e == 1)
break;
}
if (e == 1){
e = 0;
break;
}
P0 = P0 + 0x06;
}
}
}

如果有人解释一下代码可以吗?我不明白代码开头的嵌套 for 循环?而且,这些增加的是什么?

P2 = P2 + 0x06;

什么是 0x06?最后,e 在此代码中应该做什么?

最佳答案

下面的代码片段没有副作用

for (k = 0; k<1000; k++)
for (j = 0; j<142; j++);

因此它可能被用作绝望的人的延迟并且最里面的3个循环可以转换为这个

for (i = 0; i<10; i++)
{
delay(142000);
P3++;
}
P3 = P3 + 0x06;

在实践中,整个延迟循环将在优化后被完全删除,因此应该调用库中的真正延迟函数

据我所知,P3 是 3 个数字中个位数字的 BCD 输出。每 142000 个周期增加 1。一旦它增加了 10 倍,即发生溢出,0x06 将被添加到总和以调整 BCD 加法(将进位移动到下一位),因为我 explained here .

如果你在每个循环后用十六进制写 P3 会更容易得到 0x00 0x01 0x02 0x03 ... 0x08 0x09 0x10 0x11 ... 0x19 0x20:10 个循环后我们将得到 0x0A + 0x06 = 0x10

但是如果我们继续下一行

P3 = 0x00;
P2++;

我们可以看到P3在10个周期后被复位,这意味着只有最低有效位的低4位存入P3,下一位将存入P2的低四位。为什么?因为分钟的十位数字范围只有 0 到 5(由 t 计算)。 P2和P0的增加携带方式也与P3相同。

最后P0在达到24的时候被重置为0,所以P0包含了整整一个小时

if (P0 == 0x24){
P0 = 0x00;
e = 1;
}

现在你可以很容易猜到e的用途了

关于c - Keil Proteus 中的数字时钟仿真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48058000/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com