나는 온도를 변경할 수있는 아주 간단한 응용 프로그램을 작성 중입니다. 나는 다음이를 준수하고 난 다음 Edsim를 사용하여 시뮬레이션을 시도 인텔 헥사 파일을 얻을입력으로 8051 마이크로 컨트롤러의 포트 1을 구성하십시오.
#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;
}
}
}
: 온도는 LED가에게 (BCD 형식)를 사용하여 표시됩니다
나는 Keil의 C51에 다음 코드를 썼다.C 코드에 따르면 prog = 1 일 때와 up (p1.0) 또는 down (p1.1)을 누르면 temp가 변경되지만 시뮬레이션에서는 select (p1.7)) 위/아래 버튼을 누르면!
왜 이런 일이 발생합니까?
필자는 프로그램의 기능을 확장하기 위해 더 많은 조건을 추가 할 것이므로 (예 :'if == 2' 등을 추가)'prog ++ '를했습니다. 또한 어떻게 도움이됩니까? 현재 프로그램에서 두 번째 시간에'select == 1 '이 올 때마다'prog'는 2와 같을 것이므로 if 구조체를 입력하면 안됩니다 – Saurabh
'prog'가 2이면'if (prog == 1)'는'2! = 1'이므로 분명히 거짓입니다.어쨌든'if (select == 1)'은 select가 0에서 1까지 간 횟수를 세지 않고, 1이던 반복 횟수를 반드시 계산해야한다는 것을 기억해야한다. 0 사이의 모든 지점에서). 더 많은 조건을 추가하고 싶다면'if (prog> = 1)'로 바꿀 수 있지만, 같은 문제가 계속 반복 될 것입니다. – Arkku
좋습니다. 하지만 지금은 어떻게해야합니까? 스위치 케이스도 같은 문제를 일으킬 것입니다. 내가 원하는 것은 주전원 시간에'select'를 누르면 온도 코드를 수행해야한다는 것입니다. 두 번째 시간에는 소수 함수 (아직 구현되지 않음)를 실행해야하고, 세 번째 시간은 다른 작업을 수행해야합니다. 그것은'select'가 눌러 진 횟수에 따라 하나의 함수에서 다른 함수로 점프하는 것과 같습니다. – Saurabh