gpt4 book ai didi

将 8051 微 Controller 的端口 1 配置为输入

转载 作者:太空宇宙 更新时间:2023-11-04 06:41:10 24 4
gpt4 key购买 nike

我正在编写一个非常简单的应用程序,它允许改变温度。使用LEDS(BCD格式)显示温度

我在Keil C51中写了如下代码:

#include< REG51.h>

sbit select = P1^7;
sbit up = P1^0;
sbit down = P1^1;
int data room = 24;

void main()
{ int prog;
P2 &=0x00;
P1 |=0x83;
prog = 0;
while (1)
{
if(select == 1)
prog++;
if(prog == 1)
{
if(up == 1)
room++;
if(down == 1)
room--;

P2 = room;
}
}
}

然后我遵守了这个并获得了 Intel hex 文件,然后我尝试使用 Edsim 来模拟它.

根据 C 代码,当 prog=1 以及按下 up(p1.0) 或 down(p1.1) 时,温度应该改变,但在模拟中,它仅在同时选择(p1.7)时改变并按下向上/向下!

为什么会这样?

最佳答案

prog++ 表示 prog 的值每次递增 1 select == 1是真的。这意味着条件 prog == 1 仅在它递增的第一次迭代时为真。

尝试将 prog++ 更改为 prog = 1

编辑:根据评论中的讨论,如果您希望跟踪 select 上升的次数,您需要等待它再次变为 0,然后再让 prog 再次递增。例如:

int prev = select;

if (select != prev) {
// select has changed from its previous state

prev = select;
if (prev) {
// select went from 0 to 1
++prog;

if (prog == 1) {
// code to be executed once only on the first press
} else if (prog == 2) {
// code to be executed once only on the second press
} else if (prog >= 3) {
// code to be executed once on every subsequent press
}
} else {
// select went from 1 to 0
}
}

if (prev) {
// select is being pressed

if (prog == 1) {
// code to be executed _continuously_ while select is held down
// (after first press only)
}
// ...
}

关于将 8051 微 Controller 的端口 1 配置为输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8012237/

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