int main(void) { OSCCAL = 0xF2; LEDdrive_on(); LEDdrive_init(); TWI_init(); LED_row_init(); timer_init(); double rand_num; int i,j; while(1) { for(j=0;j<3;j++) { for(i=0;i<81;i++) { rand_num = (double)((uint16_t)rand()) / 65536; update_LED(i,j,rand_num); } } disp_LED(5000); LED_clear(); } }
//blue, input duty cycle void PWM_B(uint16_t dc) { LED_clear(); for(;;) { PTD_BASE_PTR->PCOR |= 1 << 1; delay(dc*10); PTD_BASE_PTR->PSOR |= 1 << 1; delay(1000-dc*10); if (RxBuf_NofElements()!=0) break; } }
//============================================================================= int main(void) { I2C_init(); LED_init(); KBD_init(); RTC_init(); RTOS_init(); RTOS_setTaskFunc(set_blink, 0, 500); // моргание RTOS_setTaskFunc(KBD_scan, 10, 0); // запускаем опрос кнопок sei(); // Разрешили прерывания #if (DEBUG == 1) RTC_set_time(23, 58, 50); // Test time LED_clear(); #endif while (1) { RTOS_dispatchTask(); // Вызываем диспетчер в цикле. } }
//============================================================================= void LED_init(void) { DDR(DIGIT_1) |= DIGIT_1_LINE; PORT(DIGIT_1) &= ~DIGIT_1_LINE; DDR(DIGIT_2) |= DIGIT_2_LINE; PORT(DIGIT_2) &= ~DIGIT_2_LINE; DDR(DIGIT_3) |= DIGIT_3_LINE; PORT(DIGIT_3) &= ~DIGIT_3_LINE; DDR(DIGIT_4) |= DIGIT_4_LINE; PORT(DIGIT_4) &= ~DIGIT_4_LINE; DDR(SEGMENT_PORT) = 0xFF; PORT(SEGMENT_PORT) = 0xFF; // Timer0 defines TCCR0B |= (1 << CS02)|(1 << CS00); // прескалер - 1024 TIFR0 = (1 << TOV0); // очищаем флаг прерывани¤ таймера “0 TIMSK0 |= (1 << TOIE0); // разрешаем прерывание по переполнению TCNT0 = TIMER0_COUNTER; // загружаем начальное зн. в счетный регистр LED_clear(); }
//control LED using inputs from virtual serial port //use 'a' and 'd' to cycle through different colors //use 'w' and 's' to increase or decrease brightness void control_LED() { for(;;) { if (RxBuf_NofElements()!=0) { while (RxBuf_NofElements()!=0) { uint8_t ch; (void)RxBuf_Get(&ch); LOG_0("echo: ", 6); LOG_0(&ch, 1); LOG_0("\r\n", 2); if (ch=='w' && dc_code<=90) { dc_code+=10; //increase brightness LOG_0("Increase brightness\r\n", 21); } else if (ch=='s' && dc_code>=10) { dc_code-=10; //decrease brightness LOG_0("Decrease brightness\r\n", 21); } else if (ch=='d' && color_code<7) { color_code++; LOG_0("Change color\r\n", 14); }else if (ch=='a' && color_code>0) { color_code--; LOG_0("Change color\r\n", 14); } switch (color_code) { case 0: PWM_R(dc_code); break; case 1: PWM_G(dc_code); break; case 2: PWM_B(dc_code); break; case 3: PWM_Y(dc_code); break; case 4: PWM_C(dc_code); break; case 5: PWM_M(dc_code); break; case 6: PWM_W(dc_code); break; case 7: LED_clear(); break; default: break; } } } } }