单片机电子琴模拟系统


实验一:


电子琴模拟系统即电子琴模拟器当选择不同的按键时,扬声器发出不同音阶的声音,仪器的最基本组成部分应包括:扬声器、模数转换电路、单片机控制电路。 设计一个用蜂鸣器模拟电子琴演奏音乐的程序。产生e调8个音阶的振荡频率,它分别由1、2、3、4、5、6、7、0号数字键控制。
实物图连线如图所示:

汇编程序如下:

    ;电子琴  -----------连续型   查询式键盘;P3.2(INT0)   接扬声器;P1 键盘读入口    查询式
Pulse    equ 10h  ;脉冲
PulseCNT equ 50h  ;脉冲计数
ToneHigh equ 40h  ;高音调
ToneLow  equ 41h  ;低音调
Tone     equ 42h  ;音调
KeyBuf   equ 54hSpeaker  BIT  P2.0ORG  0000Hljmp  Startorg   000bhLJMP  Timer0IntORG   0030H
Timer0Int:        ;定时中断push  PSWclr   TR0mov   TH0, ToneHighmov   TL0, ToneLowsetb  TR0mov   C, PulseMOV   Speaker,CCPL   Pulsepop   PSWretiToneTable:DW    64578,64686,64778,64821DW    64898,64968,65029TestKey:MOV   P1,  #0FFHMOV   A,   P1CPL   A                ; 读入键状态retKeyTable:DB 0FEH,0FDH,0FBH,0F7HDB 0EFH,0DFH,0BFH,07FH    ; 键码定义
GETKEY:MOV       R6,#10ACALL     DELAYMOV       A,P1CJNE      A,#0FFH,K01               ;确有键按下LJMP      MLOOP
K01:    MOV       R3,#8                    ;8个键MOV       R2,#0                    ;键码MOV       B,A                      ;暂存键值MOV       DPTR,#KeyTable
K02:    MOV       A,R2MOVC      A,@A+DPTR                ;从键值表中取键值CJNE      A,B,K04                  ;键值比较MOV       A,R2                     ;得键码INC       ARET
K04:    INC       R2            ;不相等,到继续访问键值表DJNZ      R3,K02MOV       A,#0FFH       ;键值不在键值中,即多键同时按下LJMP      MLOOPDelay:               ; 延时子程序mov   r7, #0
DelayLoop:djnz  r7, DelayLoopdjnz  r6, Delayret;#########################
Start:mov  sp, #70hmov  TMOD, #01  ;  Timermov  IE, #82h   ;  EA=1, IT0 = 1mov  Tone,#0
MLoop:call TestKeyjz   MLoopcall GetKeymov  b, ajz   MLoop      ; = 0, < 1anl  a, #8jnz  MLoop      ; > 8dec  bmov  a, brl   a          ; a = a*2mov  b, amov  dptr, #ToneTablemovc a, @a+dptrmov  ToneHigh, amov  TH0, amov  a, binc  amovc a, @a+dptrmov  ToneLow, amov  TL0, aSETB      TR0MOV       P1,#0FFH
WAIT:MOV       A,P1CJNE      A,#0FFH, WAITMOV       R6,#10ACALL     DELAYCLR       TR0LJMP      MLOOPEND

实验二


把VOICE接到P2.2,能弹奏一首简单的儿歌《两只老虎》,实物图连接如图所示:

C语言代码如下:

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char  //无符号字符型 宏定义   变量范围0~255
#define uint  unsigned int   //无符号整型   宏定义  变量范围0~65535
sbit SDA1=P0^2;//串行数据输入,对应595的14脚SER
sbit SCL1=P0^1;//移位寄存器时钟输入,对应595的11脚SCK
sbit SCL2=P0^0;//存储寄存器时钟输入,对应595的12脚RCK
sbit W1=P0^3;
sbit W2=P0^4;
sbit k1=P1^0;  //哆1 啦2 咪3 发4 嗦5 啦6 西7 哆
sbit k2=P1^1;  //哆1 啦2 咪3 发4 嗦5 啦6 西7 哆
sbit k3=P1^2;  //哆1 啦2 咪3 发4 嗦5 啦6 西7 哆
sbit k4=P1^3;  //哆1 啦2 咪3 发4 嗦5 啦6 西7 哆
sbit k5=P1^4;  //哆1 啦2 咪3 发4 嗦5 啦6 西7 哆
sbit k6=P1^5;  //哆1 啦2 咪3 发4 嗦5 啦6 西7 哆
sbit k7=P1^6;  //哆1 啦2 咪3 发4 嗦5 啦6 西7 哆
sbit D1=P2^6;  //播放音乐模式
sbit D2=P2^7;  //弹奏模式
sbit k8=P3^2;  //功能切换键
sbit k9=P3^3;  //低音
sbit k10=P3^4; //中音
sbit k11=P3^5; //高音
sbit beep=P2^2;//蜂鸣器接口
uchar code table1[]={   //共阴极数码管0x3F,/*0*/0x06,/*1*/0x5B,/*2*/0x4F,/*3*/0x66,/*4*/0x6D,/*5*/0x7D,/*6*/0x07,/*7*/0x7F,/*8*/0x6F,/*9*/0x37,/*N*///中音 0x38,/*L*///低音0x76,/*H*///高音0x79 /*E*/};
/格式为: 频率常数, 节拍常数, 频率常数, 节拍常数///
uchar code table2[]={  //音阶频率表 低八位  0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,//中音0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,//低音的高8位0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,};
uchar code table3[]={      0x8E,0xED,0x44,0x6B,0xB4,0xF4,0x2D,//中音0x21,0xDB,0x87,0xD7,0x68,0xE8,0x5B,//低音的低8位0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};
uchar code table4[]={1,2,3,1,      1,2,3,1,      3,4,5,    3,4,5,     5,6,5,4,3,1,    5,6,5,4,3,1,   1,12/*低音5*/,1,     1,12,1};
uchar code table5[]={  //演奏歌曲延时表4,4,4,4,   4,4,4,4,     4,4,8,    4,4,8,     2,1,2,1,4,4,    2,1,2,1,4,4,   4,4,6,      4,4,6};
uchar i;
uchar key,aa=0;
uchar bb,cc;
bit flag=0;//延时子函数
void delay(uint z)
{uint x,y;for(x=z;x>0;x--)for(y=340;y>0;y--);
}
void in(uchar Data)
{uchar i;for(i=0;i<8;i++)   //循环8次,刚好移完8位{Data<<=1;SCL1=CY;SDA1=1;        //先将移位寄存器控制引脚置为低    _nop_();_nop_();SDA1=0;}
}
void out()
{SCL2=0;   //先将存储寄存器引脚置为低_nop_(); SCL2=1;    //再置为高,产生移位时钟上升沿,上升沿时移位寄存器的数据进入数据存储寄存器,更新显示数据。_nop_(); SCL2=0;
}
//初始化子函数
void init()
{beep=0;      //蜂鸣器关闭D1=1;       //开始演奏音乐D2=0;      //关闭弹奏功能EA=1;      //开总中断TCON=0x01; //外部中断0设置为边沿触发
/*   以下是D7~D0 ,0x01=0000 0001  所以该函数相当于 IT0=1
TF1:定时器T1溢出标志位。当定时器T1溢出时,由硬件自动使TF1置1,并向CPU申请中断。CPU响应中断后,自动对TF1清零。TF1也可以用软件清零。
TR1:定时器T 1运行控制位。可由软件置1(或清零)来启动(或关闭)定时器T1,使定时器T1开始计数。用指令SETB TR1(或CLR TR1)使TR1置1(或清零)。
TF0:定时器T0溢出标志位。其功能与TF1相同。
TR0:定时器T0运行控制位。其功能与TR1相同。
IE1:外部中断1请求标志位。
IT1:外部中断1触发方式控制位。
IE0:外部中断0请求标志位。
IT0:外部中断0触发方式控制位。
*/ EX0=1;     //开外部中断0ET0=1;     //定时器0的中断打开ET1=1;      //定时器1的中断打开TMOD=0x11; //定时器0,1工作在定时状态,均为方式1
}
//数码管显示子函数
void display1()
{in(table1[aa]);  //再传段码out();W1=0;;delay(1);             //延迟时间2ms以内W1=1;in(table1[cc+1]);  //再传段码out();W2=0;delay(1);             //延迟时间2ms以内W2=1;
}
//高低音选择子函数
void yinjie()
{if(k10==0){  delay(5);if(k10==0){   aa=10;bb=0;//返回10为seg[10]显示C}}if(k9==0){   delay(5);if(k9==0){   aa=11;bb=1;//返回11为seg[11]显示L}}if(k11==0){   delay(5);if(k11==0){  aa=12;bb=2;//返回12为seg[12]显示H}}if(aa==0){aa=13;}
}
//播放音乐子函数
void display_music()
{   TH0=table2[table4[i]-1];   //取频率常数 和 节拍常数  TL0=table3[table4[i]-1];while(flag==0){  if(i<32){TR0=1;delay(57*table5[i]);i++;}if(i==32) i=0;}
}
//演奏模式子函数
void display_play()
{TR0=0;TR1=0;yinjie();in(table1[aa]);  //再传段码out();W1=0;;delay(1);             //延迟时间2ms以内W1=1;if(aa!=13&&flag==1){  if(k1==0){    TH1=table2[7*bb+cc];     //取频率常数 和 节拍常数  TL1=table3[7*bb+cc];TR1=1;    while(k1==0){ cc=0;display1();}}if(k2==0){ TH1=table2[7*bb+cc];    //取频率常数 和 节拍常数  TL1=table3[7*bb+cc];TR1=1;while(k2==0){  cc=1;display1();}} if(k3==0){        TH1=table2[7*bb+cc];   //取频率常数 和 节拍常数  TL1=table3[7*bb+cc];TR1=1;while(k3==0){   cc=2;display1();}}if(k4==0){                           //取频率常数 和 节拍常数  TH1=table2[7*bb+cc];TL1=table3[7*bb+cc];TR1=1;while(k4==0){    cc=3;display1();       }}if(k5==0){  TH1=table2[7*bb+cc];  //取频率常数 和 节拍常数  TL1=table3[7*bb+cc];TR1=1;while(k5==0){cc=4;display1();}}if(k6==0){ TH1=table2[7*bb+cc];   //取频率常数 和 节拍常数  TL1=table3[7*bb+cc];TR1=1;while(k6==0){cc=5;display1();                          }}if(k7==0){      TH1=table2[7*bb+cc];    //取频率常数 和 节拍常数  TL1=table3[7*bb+cc];TR1=1; while(k7==0){cc=6;display1();    }}      }
}
//主函数
void main()
{init();      //初始化子函数while(1){ if(flag==0) display_music();  //演奏音乐else display_play();          //弹奏音乐}
}
//外部0中断子函数
void wb0() interrupt 0
{if(k8==0){delay(5);while(k8==0);flag=~flag;D1=~D1;D2=~D2;}
}
//定时器0中断子函数
void t0() interrupt 1
{   TR0=0;TH0=table2[table4[i]-1];  //取频率常数 和 节拍常数  TL0=table3[table4[i]-1];beep=~beep;TR0=1;
}
//定时器1中断子函数
void t1() interrupt 3
{   TR1=0;TH1=table2[7*bb+cc];   //取频率常数 和 节拍常数  TL1=table3[7*bb+cc];beep=~beep;TR1=1;
}

实验三

连接44矩阵式键盘,实物图连接如所示,可以使用44矩阵键盘自己演奏音乐

可以实现自动播放音乐,可以播放《两只蝴蝶》《生日快乐》《爱情买卖》。需要源代码第147行进行修改,把m=music1则播放《两只蝴蝶》;改成m=music2则播放《生日快乐》;改成m=music3则播放《爱情买卖》。源代码如下:

#include <reg52.h>          //调用单片机头文件
#define uchar unsigned char  //无符号字符型 宏定义   变量范围0~255
#define uint  unsigned int   //无符号整型 宏定义    变量范围0~65535
sbit beep  = P3^2;    //蜂鸣器定义
sbit K1=P2^7;//音乐播放按键
uchar flag_en = 0;    //开始放歌
uchar flag_i = 0;
uint TT=0;sbit LED=P3^7;uchar num=0;//初始化num,用于控制数1码管显示的字符 //数码管段选定义       0    1    2    3   4      5    6    7    8    9    uchar code smg_du[]={0x28,0xee,0x34,0xa4,0xe2,0xa1,0x21,0xec,0x20,0xa0, //                    A    B    C    D    E   F    不显示                       0x60,0x23,0x39,0x26,0x31,0x71,0xbf};   //断码    uchar m,n; uchar code T[49][2]={{0,0},{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB}, {0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81} };uchar code music1[][2]={{0,4},     //两只蝴蝶  {23,4},{21,4},{23,16},{23,4},{21,4},{23,4},{21,4},{19,16},{16,4},{19,4},{21,8},{21,4},{23,4},{21,4},{19,4},{16,4},{19,4},{14,24},{23,4},{21,4},{23,16},{23,4},{21,4},{23,4},{21,4},{19,24},{16,4},{19,4},{21,8},{21,4},{23,4},{21,4},{19,4},{16,4},{19,4},{21,24}, {23,4},{21,4},{23,16},{23,4},{21,4},{23,4},{21,4},{19,16},{16,4},{19,4},{21,8},{21,4},{23,4},{21,4},{19,4},{16,4},{19,4},{14,24},{23,4},{26,4},{26,16},{26,4},{28,4},{26,4},{23,24},{21,4},{23,4},{21,8},{21,4},{23,4},{21,4},{19,4},{16,4},{16,2},{19,2},{19,24},{0,20}, {26,4},{26,4},{28,4},{31,4},{30,4},{30,4},{28,4},{23,4},{21,4},{21,4},{23,16},{0,4},{23,4},{23,4},{26,4},{28,8},{28,12},{16,4},{23,4},{21,4}, {21,24},{23,4},{26,4},{26,4},{23,4},{26,8},{0,4},{31,8},{30,4},{28,4},{30,4},{23,8},{0,4},{28,4},{28,4},{30,4},{28,4},{26,4},{23,4},{21,8},{23,4},{21,4},{23,4},{26,16}, {0xFF,0xFF}}; uchar code music2[][2]={{0,4},      //生日快乐{17,6},{17,2},{19,8},{17,8},{22,8},{21,16},{17,6},{17,2},{19,8},{17,8},{24,8},{22,16},{17,6},{17,2},{29,8},{26,8},{22,8},{21,8},{19,8},{27,6},{27,2},{26,8},{22,8},{24,8},{22,16}, {0xFF,0xFF}}; uchar code music3[][2]={{0,4},     //爱情买卖 {22,4},{22,4},{17,4},{15,4},{15,4},{17,12}, {15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},{0,4}, {20,4},{20,4},{20,4},{17,4},{20,4},{20,4},{20,4},{17,4}, {22,4},{17,4},{17,4},{15,4},{15,4},{17,12}, {22,4},{22,4},{17,4},{15,4},{15,4},{17,12}, {15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12}, {20,4},{20,4},{20,2},{17,2},{17,4},{20,4},{20,4},{20,2},{17,2},{17,2},{17,2}, {24,4},{20,4},{20,2},{17,2},{17,4},{20,4},{22,12}, {17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8}, {24,4},{22,2},{24,2},{22,4},{20,4},{15,4},{17,12}, {15,4},{15,4},{15,4},{10,4},{15,4},{17,4},{20,8}, {17,4},{24,4},{24,4},{20,4},{15,4},{17,12}, {17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8}, {29,4},{27,2},{29,2},{27,4},{25,4},{25,4},{27,12}, {29,4},{29,2},{27,4},{25,4},{27,6},{27,2},{25,4},{24,4}, {20,4},{20,2},{17,2},{20,4},{20,2},{22,2},{22,16}, {0xFF,0xFF}}; void delay(uchar p) {     uchar i,j;    for(;p>0;p--)    for(i=181;i>0;i--)     for(j=181;j>0;j--); }  void pause(){     uchar i,j;     for(i=150;i>0;i--)    for(j=150;j>0;j--); } /***********************1ms延时函数*****************************/ void delay_1ms(uint q) {   uint i,j; for(i=0;i<q;i++)    for(j=0;j<120;j++); } /******************按键程序*************************/uchar key_can;//按键值    void key()   //独立按键程序 {     static uchar key_new = 0, key_l; key_can = 20;                   //按键值还原 P2 = 0x0f;if((P2 & 0x0f) != 0x0f)      //按键按下{         delay_1ms(1);           //按键消抖动     if(((P2 & 0x0f) != 0x0f) && (key_new == 1)) {                        //确认是按键按下       key_new = 0;           key_l = (P2 | 0xf0);   //矩阵键盘扫描    P2 = key_l;        switch(P2) {                         case 0xee:  key_can = 0; m = 8;  TT=0; flag_en=0;TR0 = 1; break;  //得到按键值  //打开定时器        case 0xde:  key_can = 1; m = 9;   TT=0;flag_en=0;TR0 = 1;   break;   //得到按键值  case 0xbe:  key_can = 2; m = 10;TT=0;flag_en=0;  TR0 = 1;   break;   //得到按键值 case 0x7e:  key_can = 3; m = 11;TT=0;flag_en=0;    TR0 = 1;   break;   //得到按键值 case 0xed:  key_can = 4; m = 12;TT=0;flag_en=0;    TR0 = 1;   break;  //得到按键值                 case 0xdd:  key_can = 5; m = 13;TT=0;flag_en=0; TR0 = 1;   break;   //得到按键值                case 0xbd:  key_can = 6; m = 14;TT=0;flag_en=0; TR0 = 1;  break;   //得到按键值                 case 0x7d:  key_can = 7; m = 15;TT=0;flag_en=0; TR0 = 1;   break;   //得到按键值                    case 0xeb:  key_can = 8; m = 16;TT=0;flag_en=0; TR0 = 1;   break;  //得到按键值                 case 0xdb:  key_can = 9; m = 17;TT=0;flag_en=0; TR0 = 1;   break;   //得到按键值                case 0xbb:  key_can = 10; m = 18;TT=0;flag_en=0;    TR0 = 1;   break;   //得到按键值                case 0x7b:  key_can = 11; m = 19;TT=0;flag_en=0;    TR0 = 1;   break;   //得到按键值                    case 0xe7:  key_can = 12; m = 20;TT=0;flag_en=0;    TR0 = 1;   break;  //得到按键值                 case 0xd7:  key_can = 13; m = 21;TT=0;flag_en=0;    TR0 = 1;   break;  //得到按键值                 case 0xb7:  key_can = 14; m = 22;TT=0;flag_en=0;    TR0 = 1;   break;   //得到按键值                case 0x77:  key_can = 15; m = 23;TT=0;flag_en=0;    TR0 = 1;   break;  //得到按键值             }P1 = smg_du[key_can];   //显示          while(P2 != 0x0f)              P2 = 0x0f;             TR0 = 0;       //关闭定时器     }            }  else         //按键松开     {       P1 = 0xdf;   //显示小数点       key_new = 1;       } /*********************歌曲播放*********************/ K1=1 ;  if(K1==0)     {       delay_1ms(10);   //按键去抖动        if(K1==0)         {           num=8; //          P1=smg_du[num];//使数码管显示该音调的字符          flag_en ++;           flag_i = 0;            if(flag_en > 3)          {               flag_en = 0;                   TR0 = 0;           }               while(!K1)          {           }//使蜂鸣器发出相应频率的声音;       }   }
} /******************主程序**********************/     void main() {   P0 = P1 = P2 = P3 = 0xff;   TMOD=0x11;      EA=1;       PT1=1;      ET0=1;     TR1=1;     ET1=1;         TH1=(65536-50000)/256;  TL1=(65536-50000)%256; //定时器0初始化 while(1)  {       P1 = 0xdf;   //显示小数点       key();    //按键程序        if(flag_en == 1)   //爱情买卖         {           m=music1[flag_i][0];n=music1[flag_i][1];     //放歌             P1 = smg_du[m % 16];     //显示          if(m==0x00)           {               TR0=0;                 beep = 1;              delay(n);               flag_i++;             }else if(m==0xFF)              //放歌结束             {               TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}             else if(m==music1[flag_i+1][0])                  {   TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }          else                {TR0=1;delay(n);flag_i++;}       }       else            beep = 1 ; if(flag_en == 2)   //生日歌      {   m=music2[flag_i][0];n=music2[flag_i][1];     //放歌             P1 = smg_du[m % 16];     //显示          if(m==0x00)           {               TR0=0;                 beep = 1;              delay(n);               flag_i++;             }  else if(m==0xFF)                //放歌结束             {               TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}             else if(m==music2[flag_i+1][0])                  {TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }             else                {TR0=1;delay(n);flag_i++;}       }       else            {           beep = 1 ;                         }if(flag_en == 3)  //新年好      {           m=music3[flag_i][0];n=music3[flag_i][1];     //放歌             P1 = smg_du[m % 16];     //显示          if(m==0x00)           {               TR0=0;                 beep = 1;              delay(n);               flag_i++;             }           else if(m==0xFF)               //放歌结束             {               TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}             else if(m==music3[flag_i+1][0])                  {TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }             else                {TR0=1;delay(n);flag_i++;}       }       else        {           beep = 1 ;                                                 }   } }  /*****************定时器0中断*********************/     void T0_int() interrupt 1 {     beep=!beep;    TH0=T[m][0];   TL0=T[m][1]; } void T1_int() interrupt 3 {  TH1=(65536-50000)/256;  TL1=(65536-50000)%256;  if(flag_en==0){  TT++;  LED=!LED;    if(TT>=100)  {  TT=0;  flag_en++;  //TR1=0;   }  } }

实验台型号如下图所示:

大家也可以从源代码中更换简谱,来演奏别的的音乐。这里就不过多解释了。学艺不精,还请各位大佬多多批评指正,提出把宝贵的意见,不胜感激!!!
感兴趣的可以加我qq:779551378
wx:15668141627
最后希望对大家有帮助 !!1

单片机电子琴模拟系统相关推荐

  1. 0013基于单片机电子琴控制系统设计

    文件下载地址!!!!!!!!!!!!!!!!!!!!!! 单片机原理教程--初级(视频,源仿真源代码) 本设计采用STC89C51/52(与AT89C51/52.AT89S51/52通用,指定单片机请 ...

  2. 单片机多功能电子琴课设_单片机电子琴课程设计

    单片机技术及系统设计 题 目 : 基于单片机的电子琴制作 专 业 : 自动化 班 级 : 姓 名 : 学 号 摘要 : 随着电子技术的发展,尤其是大规模集成电路的出现,给人类生活带来 了根本性的改变. ...

  3. 51单片机用c语言写音符代码,51单片机电子琴设计C语言程序实例

    51单片机C程序实例,电子琴设计 #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsi ...

  4. 基于51单片机 电子琴程序

    源程序 /*----------------------------------------------- 名称:电子琴 --------------------------------------- ...

  5. 基于51单片机电子琴设计

    1. 设计要求 设计一个电子琴.利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出8个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间再按别的键则发另一音调的声音. 2.Prot ...

  6. 单片机多功能电子琴课设_基于51单片机电子琴的设计(附源码及论文)

    单片机最小系统 单片机最小系统 单片机最小系统说明: 时钟信号的产生:在MCS-51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2.而在芯片的外部,XTAL1和 ...

  7. Atmega16 AVR 单片机 电子琴 proteus 仿真

    每个按键都是一个音.按下去显示,响,松开按键后,不显示,不响.

  8. 带存储功能的数字电子琴c语言,51单片机电子琴c语言程序代码实现

    #include #define KeyPort P1 unsigned char High,Low; //定时器预装值的高8位和低8位 sbit SPK=P3^7;          //定义蜂鸣器 ...

  9. 基于单片机的电子琴设计

    第一章 绪论 1.1 课题背景 单片机因其体积小,功能强,价格低廉而得到广泛应用,同时随着我国经济的飞速发展,单片机在越来越多的领域得到了广泛的应用,现在国内的单片机多用于电话,玩具和LCD等产品,预 ...

最新文章

  1. 独家 | 一文读懂Apache Flink技术
  2. mysql connector python linux_Python使用mysql.connector链接mysql数据库
  3. C语言中用函数实现录入信息模块,C语言程序设计用函数实现模块化程序设计(73页)-原创力文档...
  4. java中的成员变量和局部变量的区别_java中成员变量与局部变量区别分析
  5. mac java tomcat_mac平台tomcat部署web项目
  6. Radon变换——MATLAB
  7. c语言中有队列头文件吗,C语言队列学习竟是如此简单!你,懂了嘛?
  8. 项目:小型局域网的搭建(基础知识+案例)
  9. 米克科技 - 全新开发悬赏任务APP系统源码平台
  10. TensorFlow北大公开课学习笔记-3.1张量计算图会话
  11. php中hexdec,PHP hexdec()函数
  12. Android APP启动时出现白屏或者黑屏怎么办?
  13. linux usleep函数 sleep,LINUX实操:date、sleep和usleep命令
  14. 2021年智能晾衣机销售增长96%,好易点的增长引擎是什么?
  15. 半导体术语的中英文版本
  16. java地址簿管理系统
  17. SpringCloud(二)——Eureka的使用和集群搭建
  18. abacus 基本操作
  19. 2.25嵌入式设计(总结)
  20. 工作9年程序员面试华为要薪1万,华为员工:公司没这么低工资的岗.

热门文章

  1. python3 IOT设备模拟器
  2. 网易云音乐 源码(有图)
  3. 天九共享:帮助传统企业拥抱新经济
  4. Mysql基本数据类型及CRUD
  5. C++ windows已在xxx.exe中触发一个断点,其原因可能是堆被损坏,这说明xx.exe中或它所加载的任何DLL中有bug。
  6. python地图上动态显示数据_Python可视化笔记之folium交互地图
  7. java为什么是跨平台语言?
  8. 重磅!Apache Kafka 3.0 发布!
  9. Intel S5500BC
  10. 如何下载图书馆随书光盘?