Код: Выделить всё
while(1)
{
for (P=0; OCR2!=0x00; P++){
delay_ms(10);
OCR2--;}
delay_ms(500);
for (O=0; OCR2!=0xff; O++){
delay_ms(10);
OCR2++;}
};
}Код: Выделить всё
while(1)
{
for (P=0; OCR2!=0x00; P++){
delay_ms(10);
OCR2--;}
delay_ms(500);
for (O=0; OCR2!=0xff; O++){
delay_ms(10);
OCR2++;}
};
}Код: Выделить всё
while( (OCR2 <>!= чему-то (Выполняется, пока истинно) )&&(PINC.2!=1(Или нулю, в зависимости от схемы) ))
{
OCR2++/ --/ +=/ -= и прочая прочая... ;
_delay_ms(10);
}
Код: Выделить всё
while( (OCR2 <>!= чему-то (Выполняется, пока истинно) )
{
OCR2++/ --/ +=/ -= и прочая прочая... ;
if(PINC.2==1) <-Кнопка нажата
break; <-Моментальный выход из цикла
_delay_ms(10);
}
вот дополнил для наглядности кодРадиоЛоматель писал(а):Во первых, это какое-то странное использование цикла for, если тут нужен while.
Код: Выделить всё
while (1)
{
// Place your code here
if((PINC.0==0)&(OCR2!=0xff))
{
delay_ms(10);
OCR2+=1;
}
if((PINC.1==0)&(OCR2!=0x00))
{
delay_ms(10);
OCR2-=1;
};
if (PINC.2==0) break;
}
while(2)
{
for (P=0; OCR2!=0x00; P++){
delay_ms(10);
OCR2--;}
delay_ms(500);
for (O=0; OCR2!=0xff; O++){
delay_ms(10);
OCR2++;}
};
}
Код: Выделить всё
while(1){
while (PINC.2==1){ // в ручную регулируем яркость
if((PINC.0==0)&(OCR2!=0xff)) // óâåëè÷èâàòü ïîêà íå äîñòèãëî ìàêñèóìà
{
delay_ms(10); // çàäåðæêà 10 ìñ.
OCR2+=1; //óâåëè÷èâàåì çàïîëíåíèå
}
if((PINC.1==0)&(OCR2!=0x00)) // óìåíüøàòü ïîêà íå äîñòèãëî ìèíèóìà
{
delay_ms(10); // çàäåðæêà 10 ìñ.
OCR2-=1; //óìåíüøàåì çàïîëíåíèå
};
}
while(PINC.2==1) // плавно рагорается и тухнет
{
for (P=0; ((OCR2!=0x00))&&((PINC.2==1)); P+=20){
delay_ms(10);
OCR2--;};
for (O=0; ((OCR2!=0xff))&&((PINC.2==1)); O+=20){
delay_ms(10);
OCR2++;};
};
}... ИМХО лучше "на словах" подробно описать, что именно хотите получить - тогда уже можно подумать над алгоритмом, а не гадать, что бы это значило ....neid писал(а):... покритикуйте... ну или направьте у нужном направлении...
Управлять светодиодом, 2 режима работы с помощью трех кнопок: + яркость, - яркость, и смена режимов. Первый режим: просто в ручную меняем яркость диода, второй: неприрывно сам плавно гаснет и разгорается снова. Еще на ум третий режим просто Ярко горит постоянно. Режимы меняются поочередно нажимая на кнопку 3, и так по кругу 1-2-3, 1-2-3.ChipKiller писал(а): ИМХО лучше "на словах" подробно описать, что именно хотите получить - тогда уже можно подумать над алгоритмом, а не гадать, что бы это значило ....
определитесь в своих желанияхneid писал(а):ну что реально ни кто больше не может помочь?
... неплохо бы знать сколько градаций хватит, скорость переключения и т.д. А делать это все лучше с помощью прерываний ИМХО...neid писал(а):Еще на ум третий режим просто Ярко горит постоянно. Режимы меняются поочередно нажимая на кнопку 3, и так по кругу 1-2-3, 1-2-3.
Код: Выделить всё
typedef unsigned char u8;
#define KEY_UP 1
#define KEY_DN 2
#define KEY_NEXT 4
#define KEY_NONE 0
// функция, которая опрашивает кнопки и возвращает код нажатой
u8 get_key(void){
u8 temp = ~(PINC & (KEY_UP | KEY_DN | KEY_NEXT));
delay_ms(15);
if(temp != (~(PINC & (KEY_UP | KEY_DN | KEY_NEXT))))
return KEY_NONE;
else
return temp;
}
static void mode1(void){
u8 key;
while(1){
key = get_key();
switch(key){
case KEY_UP: if(OCR2 < 255) OCR2++;
break;
case KEY_DN: if(OCR2) OCR2--;
break;
case KEY_NEXT:
return;
}
}
}
static void mode2(void){
u8 key;
static signed char reverse;
while(1){
key = get_key();
if(key == KEY_NEXT) return;
if(OCR2 == 255) reverse = -1;
if(OCR2 == 0) reverse = 1;
OCR2 += reverce;
delay_ms(100);
}
}
static void mode3(void){
while(get_key() != KEY_NEXT);
}
int main(void){
// все настройки делаете сами
while(1){
mode1();
mode2();
mode3();
}
}
Код: Выделить всё
#include <mega8.h>
#include <delay.h>
#define KEY_UP 1
#define KEY_DN 2
#define KEY_NEXT 3
#define KEY_NONE 0
typedef unsigned char u8;
// функция, которая опрашивает кнопки и возвращает код нажатой
u8 get_key(void){
u8 temp = ~(PINC & (KEY_UP | KEY_DN | KEY_NEXT));
delay_ms(15);
if(temp != (~(PINC & (KEY_UP | KEY_DN | KEY_NEXT))))
return KEY_NONE;
else
return temp;
}
static void mode1(void){
u8 key;
while(1){
key = get_key();
switch(key){
case KEY_UP: PORTD.0=1;
break;
case KEY_DN: PORTD.1=1;
break;
case KEY_NEXT:
return;
}
}
}
void main(void)
{
PORTC=0xff;
DDRC=0x00;
PORTD=0x00;
DDRD=0xFF;
while (1)
{
mode1();
};
}