Я изучаю программирование 8051 MCU, и сейчас я делаю мини-проект по миганию светодиодов. Что я хочу сделать, так это то, что когда я нажимаю кнопку, светодиод будет мигать медленнее. И наоборот, когда я отпускаю кнопку, светодиод будет мигать быстрее. Я использовал встроенный C и вот мой код:
#include <reg51.h>
sbit LED = P0^0;
sbit SW = P1^0;
void T0delay(int num);
void main()
{
while (1)
{
LED = ~LED;
if (SW == 0)
{
T0delay(4);
}
else
{
T0delay(2);
}
}
}
void T0delay(int num)
{
**unsigned char i;
unsigned char a;**
for (a=0;a<num;a++)
{
for (i=0;i<num;i++)
{
TMOD = 0x01;
TL0 = 0xFE;
TH0 = 0xA5;
TR0 = 1;
while (TF0 == 0);
TR0 = 0;
TF0 = 0;
}
}
}
Но я обнаружил, что когда я объявил переменную a и i как 0 вне цикла for, светодиод будет мигать быстрее.
#include <reg51.h>
sbit LED = P0^0;
sbit SW = P1^0;
void T0delay(int num);
void main()
{
while (1)
{
LED = ~LED;
if (SW == 0)
{
T0delay(4);
}
else
{
T0delay(2);
}
}
}
void T0delay(int num)
{
**unsigned char i = 0;
unsigned char a = 0;**
for (a;a<num;a++)
{
for (i;i<num;i++)
{
TMOD = 0x01;
TL0 = 0xFE;
TH0 = 0xA5;
TR0 = 1;
while (TF0 == 0);
TR0 = 0;
TF0 = 0;
}
}
}
Может кто-нибудь объяснить, почему это так работает? что-то не так в моей декларации, приводящей к такому результату? Какова хорошая практика для профессиональных инженеров объявлять переменную? Извините за мой плохой английский. Пожалуйста, дайте мне знать, если в моем вопросе есть какие-то неясные вопросы. Спасибо!