一.结构
芯片是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)
|