Guest

pbfy

By: a guest on Sep 16th, 2009  |  syntax: C  |  size: 2.00 KB  |  hits: 284  |  expires: Never
download  |  raw  |  embed  |  report abuse
Copied
  1. // musicbox1.c
  2. // for NerdKits with ATtiny26L
  3. // mrobbins@mit.edu
  4. // ported by pbfy0 for ATmega168
  5. #define F_CPU 14745600
  6. #include "../includes.h"
  7. void lcd_clline() {
  8.         lcd_write_string(PSTR("                        "));
  9. }
  10.  
  11. void lcd_qclear_h(){
  12.         lcd_home();
  13.         lcd_clline();
  14.         lcd_line_two();
  15.         lcd_clline();
  16.         lcd_home();
  17. }
  18.  
  19. void play_tone(uint16_t delay, uint8_t duration){
  20.         uint16_t tmp = 100 * duration;
  21.         uint16_t delaysm = delay / 50;
  22.         uint16_t cycles = tmp / delaysm;
  23.         while (cycles > 0) {
  24.                 PORTB |= (1<<5);
  25.                 delay_us(delay);
  26.                 PORTB &= ~(1<<5);
  27.                 delay_us(delay);
  28.                 cycles--;
  29.         }
  30. }
  31.  
  32. void PlayAndWrite(char *strtoprint, uint16_t delay, uint8_t duration){
  33.         printf_P(PSTR("%s"), strtoprint);
  34.         play_tone(delay, duration);
  35. }
  36. #define D5 851
  37. #define E5 758
  38. #define Fsh5 675
  39. #define G5 637
  40. #define A5 568
  41. #define B5 506
  42. #define C6 477
  43. #define D6 425
  44. #define DUR 40
  45. #define DUR2 80
  46.  
  47. int main(){
  48.         lcd_init();
  49.         lcd_home();
  50.         FILE lcd_stream = FDEV_SETUP_STREAM(lcd_putchar, 0, _FDEV_SETUP_WRITE);
  51.         stdin = stdout = &lcd_stream;
  52.         DDRB |= (1<<5);
  53.         DDRC &= ~(1<<5);
  54.         PORTC |= (1<<5);
  55.         while(1){
  56.                 lcd_write_string(PSTR("Press to play a song..."));
  57.                 while(PINC & (1<<5));
  58.                 lcd_qclear_h();
  59.                 PlayAndWrite("Happy ", D5, DUR);
  60.                 PlayAndWrite("birth", E5, DUR);
  61.                 PlayAndWrite("day ", D5, DUR);
  62.                 PlayAndWrite("to ", G5, DUR);
  63.                 PlayAndWrite("you ", Fsh5, DUR2);
  64.                 lcd_line_two();
  65.                 PlayAndWrite("Happy ", D5, DUR);
  66.                 PlayAndWrite("birth", E5, DUR);
  67.                 PlayAndWrite("day ", D5, DUR);
  68.                 PlayAndWrite("to ", A5, DUR);
  69.                 PlayAndWrite("you ", G5, DUR2);
  70.                 lcd_qclear_h();
  71.                 PlayAndWrite("Happy ", D5, DUR);
  72.                 PlayAndWrite("birth", D6, DUR);
  73.                 PlayAndWrite("day ", B5, DUR);
  74.                 PlayAndWrite("dear ", G5, DUR);
  75.                 PlayAndWrite("--", Fsh5, DUR);
  76.                 PlayAndWrite("--", E5, DUR);
  77.                 lcd_line_two();
  78.                 PlayAndWrite("Happy ", C6, DUR);
  79.                 PlayAndWrite("birth", B5, DUR);
  80.                 PlayAndWrite("day ", G5, DUR);
  81.                 PlayAndWrite("to ", A5, DUR);
  82.                 PlayAndWrite("you! ", G5, DUR2);
  83.                 delay_ms(500);
  84.         }
  85.        
  86. }