一.結構
芯片是STC89C,晶振用的11.0592M的Hz的,8個按鍵開關可以使蜂鳴器發出8個聲調:dol re mi fa sol la xi dol(RST3~RST10),蜂鳴器為有源的,也可以換成0.5W的大喇叭,由于我是在單片機上做的實驗,沒有做出成品,所以沒有實物圖。
二.代碼
代碼比較簡單,沒有用的中斷,也沒有用延時,全由if,for,while語句外加兩個數組所組成的。
三.或許其中還存在一些問題,希望大佬們能夠指出,我也是第一次發帖,謝謝大家!
單片機源程序如下:
- #include<reg52.h>
- #define unchar unsigned char
- #define unint unsigned int
- unchar code SONG_TONE[]={212,190,169,159,142,126,119,106};//音調
- unchar code SONG_LONG[]={12,12,12,12,21,12,12,12};//各個音調的時間
- sbit BEEP = P1^4;
- sbit key1=P3^0;
- sbit key2=P3^1;
- sbit key3=P3^2;
- sbit key4=P3^3;
- sbit key5=P3^4;
- sbit key6=P3^5;
- sbit key7=P3^6;
- sbit key8=P3^7;
- void main(void)
- {
- unint a,b,c,n;
- if(key1 == 0)//判斷按鍵按下
- {
- a = 0;
- while(SONG_LONG[a]!=0||SONG_TONE[a]!=0)
- {
- for(b=0;b<SONG_LONG[a]*20;b++)
- {
- for(n=0;n<10;n++)
- {
- BEEP=~BEEP;//蜂鳴器開始響
- for(c=0;c<SONG_TONE[a]/4;c++);
- }
- break;
- }
- break;
- }
- BEEP=1;//使蜂鳴器停止響
- }
- if(key2 == 0)
- {
- a = 1;
- while(SONG_LONG[a]!=0||SONG_TONE[a]!=0)
- {
- for(b=0;b<SONG_LONG[a]*20;b++)
- {
- for(n=0;n<10;n++)
- {
- BEEP=~BEEP;
- for(c=0;c<SONG_TONE[a]/4;c++);
- }
- break;
- }
- break;
- }
- BEEP=1;
- }
- if(key3 == 0)
- {
- a = 2;
- while(SONG_LONG[a]!=0||SONG_TONE[a]!=0)
- {
- for(b=0;b<SONG_LONG[a]*20;b++)
- {
- for(n=0;n<10;n++)
- {
- BEEP=~BEEP;
- for(c=0;c<SONG_TONE[a]/4;c++);
- }
- break;
- }
- break;
- }
- BEEP=1;
- }
- if(key4 == 0)
- {
- a = 3;
- while(SONG_LONG[a]!=0||SONG_TONE[a]!=0)
- {
- for(b=0;b<SONG_LONG[a]*20;b++)
- {
- for(n=0;n<10;n++)
- {
- BEEP=~BEEP;
- for(c=0;c<SONG_TONE[a]/4;c++);
- }
- break;
- }
- break;
- }
- BEEP=1;
- }
- if(key5 == 0)
- {
- a = 4;
- while(SONG_LONG[a]!=0||SONG_TONE[a]!=0)
- {
- for(b=0;b<SONG_LONG[a]*20;b++)
- {
- for(n=0;n<10;n++)
- {
- BEEP=~BEEP;
- for(c=0;c<SONG_TONE[a]/4;c++);
- }
- break;
- }
- break;
- }
- BEEP=1;
- }
- if(key6 == 0)
- {
- a = 5;
- while(SONG_LONG[a]!=0||SONG_TONE[a]!=0)
- {
- for(b=0;b<SONG_LONG[a]*20;b++)
- {
- for(n=0;n<10;n++)
- {
- BEEP=~BEEP;
- for(c=0;c<SONG_TONE[a]/4;c++);
- }
- break;
- }
- break;
- }
- BEEP=1;
- }
- if(key7 == 0)
- {
- a = 6;
- while(SONG_LONG[a]!=0||SONG_TONE[a]!=0)
- {
- for(b=0;b<SONG_LONG[a]*20;b++)
- {
- for(n=0;n<10;n++)
- {
- BEEP=~BEEP;
- for(c=0;c<SONG_TONE[a]/4;c++);
- }
- break;
- }
- break;
- }
- BEEP=1;
- }
- if(key8 == 0)
- {
- a = 7;
- while(SONG_LONG[a]!=0||SONG_TONE[a]!=0)
- {
- for(b=0;b<SONG_LONG[a]*20;b++)
- {
- for(n=0;n<10;n++)
- {
- BEEP=~BEEP;
- for(c=0;c<SONG_TONE[a]/4;c++);
- }
- break;
- }
- break;
- }
- BEEP=1;
- }
- }
復制代碼 全部資料51hei下載地址:
電子琴.zip
(722 Bytes, 下載次數: 41)
2019-6-5 22:11 上傳
點擊文件名下載附件
|