找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1242|回复: 0
打印 上一主题 下一主题
收起左侧

简易电子琴

[复制链接]
跳转到指定楼层
楼主
ID:245283 发表于 2017-11-2 13:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>   
sbit P14=P1^4;      
sbit P15=P1^5;     
sbit P16=P1^6;      
sbit P17=P1^7;   
unsigned char keyval;   
sbit sound=P3^7;   
unsigned int C;   
unsigned int f;     
#define l_dao 262   
#define l_re 286   
#define l_mi 311   
#define l_fa 349   
#define l_sao 392  
#define l_la 440   
#define l_xi 494   
#define dao 523     
#define re 587      
#define mi 659      
#define fa 698     
#define sao 784     
#define la 880     
#define xi 987     
#define h_dao 1046     
#define h_re 1174     
#define h_mi 1318      
#define h_fa 1396     
#define h_sao 1567   
#define h_la 1760     
#define h_xi 1975   
void delay20ms(void)   
{
   unsigned char i,j;
        for(i=0;i<100;i++)
         for(j=0;j<60;j++)
}
void delay()               
   {
     unsigned char i,j;
          for(i=0;i<250;i++)
            for(j=0;j<250;j++)
                    ;
   }
void Output_Sound(void)
{
  C=(46083/f)*10;          
  TH0=(8192-C)/32;     
  TL0=(8192-C)%32;   
  TR0=1;              
  delay();            
  TR0=0;               
  sound=1;        
  keyval=0xff;          
}
void main(void)
  {  
             EA=1;         
           ET0=1;         
                ET1=1;      
                TR1=1;      
      TMOD=0x10;   
     TH1=(65536-500)/256;  
          TL1=(65536-500)%256;                                                            
                                 while(1)            
                                   {
                                    switch(keyval)
                                            {
                                                    case 1:f=dao;            
                                                            Output_Sound();   
                                                                 break;
                                                         case 2:f=l_xi;           
                                                            Output_Sound();   
                                                                 break;
                      case 3:f=l_la;         
                                                            Output_Sound();     
                                                                 break;
                                                    case 4:f=l_sao;         
                                                              Output_Sound();     
                                                                 break;
                                                         case 5:f=sao;            
                                                                Output_Sound();   
                                                                 break;
                                                         case 6:f=fa;            
                                                             Output_Sound();   
                                                                 break;
                      case 7:f=mi;            
                                                            Output_Sound();     
                                                                 break;
                                                    case 8:f=re;              
                                                            Output_Sound();   
                                                                 break;
                                                         case 9:f=h_re;         
                                                             Output_Sound();   
                                                                 break;
                                                         case 10:f=h_dao;         
                                                            Output_Sound();   
                                                                 break;
                      case 11:f=xi;           
                                                           Output_Sound();   
                                                                 break;
                                                    case 12:f=la;            
                                                            Output_Sound();   
                                                                 break;
                                                         case 13:f=h_la;         
                                                            Output_Sound();   
                                                                 break;
                                                         case 14:f=h_sao;         
                                                            Output_Sound();   
                                                                 break;
                      case 15:f=h_fa;         
                                                            Output_Sound();   
                                                                 break;
                                                    case 16:f=h_mi;           
                                                            Output_Sound();     
                                                                 break;  
                           }
                          }       
        }
  void Time0_serve(void ) interrupt 1 using 1  
  {
        TH0=(8192-C)/32;     
        TL0=(8192-C)%32;   
             sound=!sound;        
  }
  void time1_serve(void) interrupt 3 using 2   
  {
     TR1=0;                  
     P1=0xf0;                 
          if((P1&0xf0)!=0xf0)      
           {
                                 delay20ms();           
                                  if((P1&0xf0)!=0xf0)     
                                    {
                                       P1=0xfe;            
                                       if(P14==0)         
                                     keyval=1;           
                                   if(P15==0)            
                                     keyval=2;            
                                   if(P16==0)            
                                     keyval=3;           
                                   if(P17==0)           
                                     keyval=4;                                  
                                   P1=0xfd;            
                                      if(P14==0)           
                                     keyval=5;            
                                   if(P15==0)            
                                     keyval=6;            
                                   if(P16==0)            
                                     keyval=7;           
                                   if(P17==0)           
                                     keyval=8;           
                                   P1=0xfb;           
                                    if(P14==0)         
                                     keyval=9;        
                                   if(P15==0)         
                                     keyval=10;         
                                   if(P16==0)         
                                     keyval=11;        
                                   if(P17==0)         
                                     keyval=12;                              
                                   P1=0xf7;            
                                    if(P14==0)         
                                     keyval=13;         
                                   if(P15==0)         
                                     keyval=14;         
                                   if(P16==0)         
                                     keyval=15;        
                                   if(P17==0)         
                                     keyval=16;        
                             }
                }
     TR1=1;                  
     TH1=(65536-500)/256;  
         TL1=(65536-500)%256;           
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表