Dùng PIC6F877A phát 1 vài bản nhạc.
Chào mọi nguời!
Mình đang làm về 1 vấn đề như sau: Mình muốn dùng PIC 16F877A để phát 1 vài bản nhạc không lời.Romantic... chẳng hạn.Mình cũng nghĩ là phải dùng CCP để điều chế xung PWM.Nhưng mình chưa có hướng làm cụ thể và còn 1 số chỗ chưa hiểu.Cụ thể như phát các nốt nhạc khác nhau là có tần số khác nhau.Nhưng nếu chỉ thay đổi độ rộng xung thì tần số phát là ko đổi.Ai đã từng làm về vấn đề này cho mình hỏi thêm là mình có thể luôn để độ rộng xung là 1/2 chu kì xung mà chỉ thay đổi tần số phát dc ko vậy?Mong nhận được các cao kiến từ mọi người! |
Trích:
|
uh!Cam on ban nhieu ha!
|
Trích:
#define c40 132 //dinh nghia cho tg #define c41 62 //dinh nghia cho ck #define d40 148 //may not nay moi chi viet duoc bai happy birtday #define d41 55 //con nhung not viet bai khac se cap nhat sau #define e40 174 //boi tac gia thuoc loai mu am nhac #define e41 46 //nen khong doc duoc not nhac---thank #define f40 166 #define f41 49 #define g40 196 #define g41 41 #define a40 220 #define a41 37 #define b4b0 232 #define b4b1 35 #define b40 247 #define b41 33 void not(int16 tg,int16 ck) //ck bien dat chu ky= (1/f)/30us/2 { //tg=0.25xfx2 int16 y;y=0; //not nhac chi duoc phat trong 250ms while(y!=tg) //muon keo dai thoi gian phat tang bien tg { while(count!=ck){} //tg phat con phu thuoc vao nhip dieu cua bai nhac loa1=!loa1;count=0;++y; //nen phai dieu chinh tg cho hop ly } //phai dat tg va ck 16bit de mo rong thoi gian //va so luong tan so am co the phat duoc loa1=0;delay_ms(5); //dat khoang lang 5ms } void nhac() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);//****BAT time0 DO CHIA TAN 2 set_timer0(237); LCD_putcmd(clear_scr);//xoa man hinh printf(LCD_putchar," HAPPY BIRTHDAY "); LCD_putcmd(0xC0); //xuong hang2 printf(LCD_putchar," MY DARLING"); delay_ms(1000); LCD_putcmd(clear_scr); printf(LCD_putchar," HAP"); not(c40,c41); printf(LCD_putchar,"PY "); not(c40,c41); printf(LCD_putchar,"BIRTH"); not(d40*2,d41); printf(LCD_putchar,"DAY"); not(c40*2,c41); LCD_putcmd(0xC0); printf(LCD_putchar," TO "); not(f40*2,f41); printf(LCD_putchar,"YOU"); not(e40*4,e41); LCD_putcmd(clear_scr); printf(LCD_putchar," HAP"); not(c40,c41); printf(LCD_putchar,"PY "); not(c40,c41); printf(LCD_putchar,"BIRTH"); not(d40*2,d41); printf(LCD_putchar,"DAY"); not(c40*2,c41); LCD_putcmd(0xC0); printf(LCD_putchar," TO "); not(g40*2,g41); printf(LCD_putchar,"YOU"); not(f40*4,f41); LCD_putcmd(clear_scr); printf(LCD_putchar," HAP"); not(c40,c41); printf(LCD_putchar,"PY "); not(c40,c41); printf(LCD_putchar,"BIRTH"); not(c40*2,c41);; printf(LCD_putchar,"DAY"); not(a40*2,a41); LCD_putcmd(0xC0); printf(LCD_putchar," DEAR "); not(f40*2,f41); printf(LCD_putchar,"SO "); not(e40*2,e41); printf(LCD_putchar,"SO "); not(d40*2,d41); LCD_putcmd(clear_scr); printf(LCD_putchar," HAP"); not(b4b0,b4b1); printf(LCD_putchar,"PY "); not(b4b0,b4b1); printf(LCD_putchar,"BIRTH"); not(a40*2,a41); printf(LCD_putchar,"DAY"); not(f40*2,f41); LCD_putcmd(0xC0); printf(LCD_putchar," TO "); not(g40*2,g41); printf(LCD_putchar,"YOU"); not(f40*4,f41); LCD_putcmd(clear_scr); } thạch anh 20MHz |
hay thế nhỉ
|
Mạch của nó thì sao???
|
Trích:
|
Múi giờ GMT. Hiện tại là 07:47 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam