本帖最後由 boy50000 於 2016-7-26 23:44 編輯
最近整緊音樂盒
呢日係proteus到寫好段code
當我去模擬個陣
用內置個counter timer去check個個pin
發現do音調唔到261 Hz
只係得131Hz
其他音調更加唔洗講
小弟捻極都捻唔明點解
求各位指點迷津:crybye- #include <reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define c 191 // Do - 261 Hz
- #define d 170 // Re - 294 Hz
- #define e 152 // Mi - 329 Hz
- #define f 143 // Fa - 349 Hz
- #define g 127 // Sol - 392 Hz
- #define a 113 // La - 440 Hz
- #define b 101 // Ti - 493 Hz
- #define C 95 // Do# - 523 Hz
- #define MAXMIUM_MUSIC 3
- uint music;
- uint is_pressed;
- uint looping;
- uint melody_1[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
- uint beats_1[] = { 100, 50, 75, 100, 75, 100, 200, 300 };
- sbit buzzer = P3^7;
- sbit button_play = P1^0;
- sbit button_next = P1^3;
- sbit button_looping = P1^7;
- void key_scanning();
- void play_music();
- void delay(int time);
- void melody_effect(int key);
- void main(void)
- {
- P1 = 0x0;
- P3 = P2 = 0xFF;
-
- music = 0;
-
- buzzer = 0;
-
- is_pressed = 0;
-
- while (1)
- {
- melody_effect(0);
- //key_scanning();
- }
- }
- void key_scanning()
- {
- if (button_play || button_next || button_looping)
- {
- if (is_pressed)
- return;
-
- if (button_play)
- play_music();
- else if (button_next)
- {
- music++;
-
- if (music > MAXMIUM_MUSIC)
- music = 0;
- }
- else
- looping = ~looping;
-
- is_pressed = 1;
- }
- else if (!button_play && !button_next && !button_looping)
- is_pressed = 0;
- }
- void play_music()
- {
- switch(music)
- {
- case 0:
- {
- int i, j;
- for(i=0;i<=7;i++)
- {
- for(j=0;j<=beats_1[i];j++)
- melody_effect(i);
- }
- break;
- }
- }
-
- P2 = 0xFF;
- }
- void melody_effect(int key)
- {
- char led = 0;
- int time = 0;
-
- switch(key)
- {
- case 0:
- {
- led = 0xFE; // Red LED
- time = c;
- break;
- }
- case 1:
- {
- led = 0xFD; // Orange LED
- time = d;
- break;
- }
- case 2:
- {
- led = 0xFB; // Yellow LED
- time = e;
- break;
- }
- case 3:
- {
- led = 0xF7; // Green LED
- time = f;
- break;
- }
- case 4:
- {
- led = 0xEF; // Blue LED
- time = g;
- break;
- }
- case 5:
- {
- led = 0xDF; // Pink LED
- time = a;
- break;
- }
- case 6:
- {
- led = 0xBF; // Purple LED
- time = b;
- break;
- }
- case 7:
- {
- led = 0x7F; // White LED
- time = C;
- break;
- }
- }
-
- P2 = led;
- buzzer = 1;
- delay(time);
- buzzer = 0;
- delay(time);
- }
- void delay(int time)
- {
- int i;
-
- TMOD = 0x00;
-
- while(time--)
- {
- TH0 = 255;
- TL0 = 22;
- TR0 = 1;
- while(TF0 = 0);
- TR0 = 0;
- }
- }
複製代碼 Crystal用左12Mhz
---------------------------------------
岩岩發現捻錯左方向
依加已經重新寫返好program |