Pic ve Melodi Uygulaması

Başlatan FxDev, 14 Eylül 2009, 01:18:22

FxDev

Bugün can sıkıntısından hiç uygulamadığım melodi uygulaması yapmak istedim. Notaların frekans değerlerini üretmek için 628'in PWM'ini kullandım. Gerisi ise sizin yaratıcılığınıza kalmış. Ben ilkokulda bana öğretilen ilk müziği yaptım. Umarım eğlenceli olmuştur...

Video: http://www.youtube.com/watch?v=IzkS-TiBtA8

Main:

#include <htc.h>
#include "lcd.h"
#include "delay.h"

__CONFIG( UNPROTECT & UNPROTECT & WDTDIS & INTIO & MCLRDIS & LVPDIS & BORDIS & PWRTDIS );

void doo(unsigned char i)
{
	unsigned char j;
	TMR2ON=0;
			
	PR2 	= 0xED;		// 262,61
	T2CON 	= 0x07;
	CCPR1L 	= 0x76;
	CCP1CON = 0x3C;
				
	TMR2ON=1;
	
	for(j=0;j<i;j++)
		DelayMs(250);
}

void re(unsigned char i)
{
	unsigned char j;
	TMR2ON=0;
			
	PR2 	= 0xD4;		// 293,66
	T2CON 	= 0x07;
	CCPR1L 	= 0x6A;
	CCP1CON = 0x1C;
				
	TMR2ON=1;
	for(j=0;j<i;j++)
		DelayMs(250);
}

void mi(unsigned char i)
{
	unsigned char j;
	TMR2ON=0;
			
	PR2 	= 0xBD;		//329,6
	T2CON 	= 0x07;
	CCPR1L 	= 0x5E;
	CCP1CON = 0x3D;
				
	TMR2ON=1;
	for(j=0;j<i;j++)
		DelayMs(250);
}

void fa(unsigned char i)
{
	unsigned char j;
	TMR2ON=0;
			
	PR2 	= 0xB2;		// 349,28
	T2CON 	= 0x07;
	CCPR1L 	= 0x59;
	CCP1CON = 0x1C;
				
	TMR2ON=1;
	for(j=0;j<i;j++)
		DelayMs(250);
}

void sol(unsigned char i)
{
	unsigned char j;
	TMR2ON=0;
			
	PR2 	= 0x9E;		// 392
	T2CON 	= 0x07;
	CCPR1L 	= 0x4F;
	CCP1CON = 0x1C;
				
	TMR2ON=1;
	for(j=0;j<i;j++)
		DelayMs(250);
}

void la(unsigned char i)
{
	unsigned char j;
	TMR2ON=0;
			
	PR2 	= 0x8D;		// 440
	T2CON 	= 0x07;
	CCPR1L 	= 0x46;
	CCP1CON = 0x3C;
				
	TMR2ON=1;
	for(j=0;j<i;j++)
		DelayMs(250);
}

void si(unsigned char i)
{
	unsigned char j;
	TMR2ON=0;
			
	PR2 	= 0x7E;		// 493,92
	T2CON 	= 0x07;
	CCPR1L 	= 0x3F;
	CCP1CON = 0x1C;
				
	TMR2ON=1;
	for(j=0;j<i;j++)
		DelayMs(250);
}

void yari_dur(void)
{
	TMR2ON=0;
	PR2 = 0;
	CCPR1L = 0;
	CCP1CON = 0;
	RB3=0;
	DelayMs(50);
}

void tam_dur(void)
{
	TMR2ON=0;
	PR2 = 0;
	CCPR1L = 0;
	CCP1CON = 0;
	RB3=0;
	DelayMs(150);
}

void daha_dun(void)
{
	lcd_yaz("Da");
	doo(2);
	yari_dur();
	
	lcd_yaz("-ha");
	doo(2);
	yari_dur();
	
	lcd_yaz(" Dun");
	sol(2);
	yari_dur();
	
	lcd_yaz(" An");
	sol(2);
	yari_dur();
	
	lcd_yaz("-ne");
	la(2);
	yari_dur();
	
	lcd_gotoxy(2,1);
	lcd_yaz("-mi");
	la(2);
	yari_dur();
	
	lcd_yaz("-zin");
	sol(4);
	tam_dur();
	
	lcd_yaz(" Kol");
	fa(2);
	yari_dur();
	
	lcd_yaz("-la");
	fa(2);
	yari_dur();
	
	lcd_clear();
	lcd_yaz("-rin");
	mi(2);
	yari_dur();
	
	lcd_yaz("-da");
	mi(2);
	yari_dur();
	
	lcd_yaz(" Ya");
	re(2);
	yari_dur();
	
	lcd_yaz("-sar");
	re(2);
	yari_dur();
	
	lcd_gotoxy(2,1);
	lcd_yaz("-ken");
	doo(4);
	tam_dur();
	
	lcd_yaz(" Ci");
	doo(2);
	yari_dur();
	
	lcd_yaz("-cek");
	doo(2);
	yari_dur();
	
	lcd_yaz("-li");
	sol(2);
	yari_dur();
	
	lcd_clear();
	lcd_yaz("Bah");
	sol(2);
	yari_dur();
	
	lcd_yaz("-ce");
	la(2);
	yari_dur();
	
	lcd_yaz("-mi");
	la(2);
	yari_dur();
	
	lcd_yaz("-zin");
	sol(4);
	yari_dur();
	
	lcd_gotoxy(2,1);
	lcd_yaz("Yol");
	fa(2);
	yari_dur();
	
	lcd_yaz("-la");
	fa(2);
	yari_dur();
	
	lcd_yaz("-rin");
	mi(2);
	yari_dur();
	
	lcd_yaz("-da");
	mi(2);
	yari_dur();
	
	lcd_clear();
	lcd_yaz(" Ko");
	re(2);
	yari_dur();
	
	lcd_yaz("-sar");
	re(2);
	yari_dur();
	
	lcd_yaz("-ken");
	doo(4);
	tam_dur();

	lcd_gotoxy(2,1);
	lcd_yaz("Sim");
	sol(2);
	yari_dur();
	
	lcd_yaz("-di");
	sol(2);
	yari_dur();
	
	lcd_yaz(" O");
	fa(2);
	yari_dur();
	
	lcd_yaz("-kul");
	fa(2);
	yari_dur();
	
	lcd_yaz("-lu");
	mi(2);
	yari_dur();
	
	lcd_clear();
	lcd_yaz(" Ol");
	mi(2);
	yari_dur();
	
	lcd_yaz("-duk");
	re(4);
	tam_dur();
	
	lcd_yaz(" Si");
	sol(2);
	yari_dur();
	
	lcd_yaz("-nif");
	sol(2);
	yari_dur();
	
	lcd_gotoxy(2,1);
	lcd_yaz("-la");
	fa(2);
	yari_dur();
	
	lcd_yaz("-ri");
	fa(2);
	yari_dur();
	
	lcd_yaz(" Dol");
	mi(2);
	yari_dur();
	
	lcd_yaz("-dur");
	mi(2);
	yari_dur();
	
	lcd_clear();
	lcd_yaz("-duk");
	re(4);
	tam_dur();

	lcd_yaz(" Se");
	doo(2);
	yari_dur();
	
	lcd_yaz("-vinc");
	doo(2);
	yari_dur();
	
	lcd_gotoxy(2,1);
	lcd_yaz("-li");
	sol(2);
	yari_dur();
	
	lcd_yaz("-yiz");
	sol(2);
	yari_dur();
	
	lcd_yaz(" He");
	la(2);
	yari_dur();
	
	lcd_yaz("-pi");
	la(2);
	yari_dur();

	lcd_clear();
	lcd_yaz("-miz");
	sol(4);
	yari_dur();
	
	lcd_yaz(" Ya");
	fa(2);
	yari_dur();
	
	lcd_yaz("-sa");
	fa(2);
	yari_dur();
	
	lcd_yaz("-sin");
	mi(2);
	yari_dur();
	
	lcd_gotoxy(2,1);
	lcd_yaz("O");
	mi(2);
	yari_dur();
	
	lcd_yaz("-ku");
	re(2);
	yari_dur();
	
	lcd_yaz("-lu");
	re(2);
	yari_dur();
	
	lcd_yaz("-muz");
	doo(4);
	tam_dur();
	lcd_clear();
}

void main(void)
{
	unsigned char i;
	CMCON=0x07;
	PORTB=0x00;
	PORTA=0x00;
	TRISB=0x00;
	TRISA=0x00;
	
	lcd_init();
	
	for(;;)
	{
		for(i=0;i<3;i++)
			daha_dun();
		lcd_clear();
	}
}

Ankaralı

Gayet keyifli  :lol:

Hocam bu protonda bölme çarpma işlemleri 0,00xxx den sonra bilgisayarın hesap makinesi ile farklı çıkıyor bi bilgin varmı?
@ NEXYS2

Ankaralı

Dim X As Float
Dim Y As Float
Dim Z As Float
Dim Q As Float
Cls

BASLA:
Y=14534577
Z=138.298
DelayMS 2
X=Y/Z
DelayMS 2
Q=X+Z
DelayMS 200
Print At 1,1, "X:", DEC6 X
Print At 2,1, "Q:", DEC6 Q
@ NEXYS2