Intro till mikrokontroller felsökning (och en Pomodoro Timer) (9 / 9 steg)
Steg 9: Super rörmokare Pomodoro Timer kod!
#include "msp430g2211.h" #include "notes.h" unsigned int klick = 0; #define LED4 BIT1 |
#define LED3 BIT2
#define LED2 BIT3
#define LED1 BIT4
#define LED0 BIT5
#define SUMMERN BIT6
#define POWER BIT7
void setLEDs (char-värde) {
IF(Value & 0x10)
P1OUT | = (LED4); ställa in LED4 på
annat
P1OUT & = ~ (LED4); iväg för LED4
IF(Value & 0x08)
P1OUT | = (LED3); ställa in LED3 på
annat
P1OUT & = ~ (LED3); iväg för LED3
IF(Value & 0x04)
P1OUT | = (LED2); ställa in LED2 på
annat
P1OUT & = ~ (LED2); kvitta LED2
IF(Value & 0x02)
P1OUT | = (LED1); ställa in LED1 på
annat
P1OUT & = ~ (LED1); kvitta LED1
IF(Value & 0x01)
P1OUT | = (LED0); ställa in LED0 på
annat
P1OUT & = ~ (LED0); iväg för LED0
}
void main (void) {
unsigned int pomodoro_remain = pomodoro_length + pomodoro_break;
WDTCTL = WDTPW + WDTHOLD; Stoppa watchdog timer för att undvika timeout återställa
BCSCTL1 = CALBC1_1MHZ; DCO inställd på 1MHz fabriken kalibreringsvärde
DCOCTL = CALDCO_1MHZ;
P1DIR | = (LED0 + LED1 + LED2 + LED3 + LED4 + SUMMERN + POWER); alla LED stift och Summer som utgång
P1DIR | = MAKT; MAKT är på tills vi vill döda vår egen makt
P1OUT & = ~ (LED0 LED1 LED2 + LED3 + LED4 + + Summer); alla lysdioder och summern off
CCTL0 = CCIE; CCR0 avbrott aktiverad
CCR0 = 50000; klockan divisor
TACTL = TASSEL_2 + MC_1; SMCLK, upmode
_BIS_SR(GIE); Aktivera avbrott
setLEDs(pomodoro_remain);
playTheme();
While(pomodoro_remain) {
IF(Minutes > new_minute) {
new_minute = minuter;
pomodoro_remain--;
setLEDs(pomodoro_remain);
IF(pomodoro_remain == pomodoro_break) {
playFlagTune();
} annat {
pip (G2, 124); .25 pip, utom när vi når rasten
}
}
}
play1up(); slutliga chime
P1OUT & = ~ (POWER); kvitta POWER
Sova för evigt... inte ska nå detta, men vem vet? :)
_BIS_SR (LPM1_bits + GIE);
}
Timer A0 avbrottstjänstens rutin
#pragma vektor = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
Vi kommer att bli synad på 1Mhz / 50k = 20 gånger en sekunder
klick ++;
om (klickar på > = 20) {
klick = 0;
sekunder ++; Advance klocka för varje sekund
om (sekunder > = 60) {
sekunder = 0;
minuter ++;
}
}
}
Notes.h
Detta bör inte vara här, men jag hade bråttom att lämna in innan tävlingen körde tidsfristen ut :) #define SUMMERN BIT6 Definition av de anteckningar frequecies i Hertz. void delay_ms (unsigned int ms) { void delay_us (unsigned int oss) { Den här funktionen genererar den fyrkantsvåg som gör piezo speaker låter en determinated frekvens. lång fördröjning = (long)(62500/note); Detta är semiperiod för varje not. för (länge jag = 0; jag < tid; i ++) { |
P1OUT | = SUMMER; Ställ in Summer på...
delay_us(delay); .. .för en semiperiod...
P1OUT & = ~ Summer; .. .så återställa det...
delay_us(delay); .. .för den andra semiperiod.
}
}
void playTheme(void) {
Tema
4|ee-e-ce-g---|| c---e-ga-FG-e-CD---||
//3|-------------g----|| ---g--e--a-b-AA-g---b---||
//2|-------------g----|| ---------------------------------||
pip (E4, 124); pip (E4, 124); delay_ms(124);
pip (E4, 124); delay_ms(124);
pip (C4, 124); pip (E4, 124); delay_ms(124);
pip (G4, 124); delay_ms(496);
pip (G3, 124); delay_ms(496);
pip (C4, 124); delay_ms(248);
pip (G3, 124); delay_ms(248);
pip (E3, 124); delay_ms(248);
pip (A3, 124); delay_ms(124);
pip (B3, 124); delay_ms(124);
pip (As3 124); pip (A3, 124); delay_ms(124);
pip (G3, 124); pip (E4, 124); delay_ms(124);
pip (G4, 124); pip (A4, 124); delay_ms(124);
pip (F4, 124); pip (G4, 124); delay_ms(124);
pip (E4, 124); delay_ms(124);
pip (C4, 124); pip (D4, 124); pip (B4, 124);
låter bättre utan den sista raden om inte loopas
}
void play1up(void) {
1UP ljud
pip (E5, 62); delay_ms(62);
pip (G5, 62); delay_ms(62);
pip (E6, 62); delay_ms(62);
pip (C6, 62); delay_ms(62);
pip (D6, 62); delay_ms(62);
pip (G6, 312);
}
void playFlagTune (void) {
flagga *
pip (G2, 124);
pip (C3, 124);
pip (E3, 124);
pip (G3, 124);
pip (C4, 124);
pip (E4, 124);
pip (G4, 372);
pip (E4, 372);
pip (Gs2, 124);
pip (C3, 124);
pip (Ds3, 124);
pip (Gs3, 124);
pip (C4, 124);
pip (Ds4, 124);
pip (Gs4, 372);
pip (Ds4, 372);
pip (As2, 124);
pip (D3, 124);
pip (F3, 124);
pip (As3 124);
pip (D4, 124);
pip (F4, 124);
pip (Som4, 372);
pip (Som4, 124);
pip (Som4, 124);
pip (Som4, 124);
pip (E4, 372);
}