Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // musicbox1.c
- // for NerdKits with ATtiny26L
- // mrobbins@mit.edu
- // ported by pbfy0 for ATmega168
- #define F_CPU 14745600
- #include <stdio.h>
- #include <math.h>
- #include <avr/io.h>
- #include <avr/pgmspace.h>
- #include <inttypes.h>
- #include "../libnerdkits/delay.h"
- #include "../libnerdkits/lcd.h"
- #include "../libnerdkits/uart.h"
- #include <avr/interrupt.h>
- void lcd_clline() {
- lcd_write_string(PSTR(" "));
- }
- void lcd_qclear_h(){
- lcd_home();
- lcd_clline();
- lcd_line_two();
- lcd_clline();
- lcd_home();
- }
- void play_tone(uint16_t delay, uint8_t duration){
- uint16_t tmp = 100 * duration;
- uint16_t delaysm = delay / 50;
- uint16_t cycles = tmp / delaysm;
- while (cycles > 0) {
- PORTB |= (1<<5);
- delay_us(delay);
- PORTB &= ~(1<<5);
- delay_us(delay);
- cycles--;
- }
- }
- void PlayAndWrite(char *strtoprint, uint16_t delay, uint8_t duration){
- printf_P(PSTR("%s"), strtoprint);
- play_tone(delay, duration);
- }
- #define D5 851
- #define E5 758
- #define Fsh5 675
- #define G5 637
- #define A5 568
- #define B5 506
- #define C6 477
- #define D6 425
- #define DUR 40
- #define DUR2 80
- int main(){
- lcd_init();
- lcd_home();
- FILE lcd_stream = FDEV_SETUP_STREAM(lcd_putchar, 0, _FDEV_SETUP_WRITE);
- stdin = stdout = &lcd_stream;
- DDRB |= (1<<5);
- DDRC &= ~(1<<5);
- PORTC |= (1<<5);
- while(1){
- lcd_write_string(PSTR("Press to play a song..."));
- while(PINC & (1<<5));
- lcd_qclear_h();
- PlayAndWrite("Happy ", D5, DUR);
- PlayAndWrite("birth", E5, DUR);
- PlayAndWrite("day ", D5, DUR);
- PlayAndWrite("to ", G5, DUR);
- PlayAndWrite("you ", Fsh5, DUR2);
- lcd_line_two();
- PlayAndWrite("Happy ", D5, DUR);
- PlayAndWrite("birth", E5, DUR);
- PlayAndWrite("day ", D5, DUR);
- PlayAndWrite("to ", A5, DUR);
- PlayAndWrite("you ", G5, DUR2);
- lcd_qclear_h();
- PlayAndWrite("Happy ", D5, DUR);
- PlayAndWrite("birth", D6, DUR);
- PlayAndWrite("day ", B5, DUR);
- PlayAndWrite("dear ", G5, DUR);
- PlayAndWrite("--", Fsh5, DUR);
- PlayAndWrite("--", E5, DUR);
- lcd_line_two();
- PlayAndWrite("Happy ", C6, DUR);
- PlayAndWrite("birth", B5, DUR);
- PlayAndWrite("day ", G5, DUR);
- PlayAndWrite("to ", A5, DUR);
- PlayAndWrite("you! ", G5, DUR2);
- delay_ms(500);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement