⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keydrvavr(16m).c

📁 AVR单片机应用开发指南及实例,包含许多实例,挺不错
💻 C
📖 第 1 页 / 共 3 页
字号:
                                 case  8:    PORTC&=~(1<<PORTC0);     
                                             PORTC&=~(1<<PORTC4);         
                                             Key_status[Meboard_key_num]=00;   
                                             break;    

                                 case  9:    PORTC&=~(1<<PORTC1);     
                                             PORTC&=~(1<<PORTC5);        
                                             Key_status[Meboard_key_num]=00;   
                                             break;    

                                 case 10:    PORTC&=~(1<<PORTC2);     
                                             PORTC&=~(1<<PORTC6);          
                                             Key_status[Meboard_key_num]=00;   
                                             break;    

                                 case 11:    PORTC&=~(1<<PORTC3);     
                                             PORTC&=~(1<<PORTC7);        
                                             Key_status[Meboard_key_num]=00;   
                                             break;    
                            }
                                    
                         }
                     else                 //力度处理
                         {
                             switch(Meboard_key_num)          //具体键号
                             {
                                 case  0:   PORTA&=~(1<<PORTA0);    //关闭保持信号     
                                            Key_status[Meboard_key_num]=0x11;   //需要动作状态
                                            Key_hit_status[Meboard_key_num]=0;  //初始为0
                                            Key_lidu_high[Meboard_key_num]  =lidu1[data_temp2]; //力度值高电平...PWM
                                            Key_lidu_low[Meboard_key_num]=255-Key_lidu_high[Meboard_key_num]; //力度值低电平
                                            Key_lidu_reg[Meboard_key_num]=Key_lidu_high[Meboard_key_num];     //力度缓存,参与递减
                                            Key_hit_time[Meboard_key_num]=lidu2[data_temp2];//击键时间
                                            PORTB|=(1<<PB0);   //高电平开始
                                            break;    

                                 case  1:   PORTA&=~(1<<PORTA1);        
                                            Key_status[Meboard_key_num]=0x11;   
                                            Key_hit_status[Meboard_key_num]=0;  
                                            Key_lidu_high[Meboard_key_num]  =lidu1[data_temp2];
                                            Key_lidu_low[Meboard_key_num]=255-Key_lidu_high[Meboard_key_num]; 
                                            Key_lidu_reg[Meboard_key_num]=Key_lidu_high[Meboard_key_num];     
                                            Key_hit_time[Meboard_key_num]=lidu2[data_temp2];
                                            PORTB|=(1<<PB1);
                                            break;    

                                 case  2:   PORTA&=~(1<<PORTA2);        
                                            Key_status[Meboard_key_num]=0x11;   
                                            Key_hit_status[Meboard_key_num]=0;  
                                            Key_lidu_high[Meboard_key_num]  =lidu1[data_temp2]; 
                                            Key_lidu_low[Meboard_key_num]=255-Key_lidu_high[Meboard_key_num]; 
                                            Key_lidu_reg[Meboard_key_num]=Key_lidu_high[Meboard_key_num];     
                                            Key_hit_time[Meboard_key_num]=lidu2[data_temp2];
                                            PORTB|=(1<<PB2);
                                            break;    

                                 case  3:   PORTA&=~(1<<PORTA3);        
                                            Key_status[Meboard_key_num]=0x11;   
                                            Key_hit_status[Meboard_key_num]=0;  
                                            Key_lidu_high[Meboard_key_num]  =lidu1[data_temp2]; 
                                            Key_lidu_low[Meboard_key_num]=255-Key_lidu_high[Meboard_key_num]; 
                                            Key_lidu_reg[Meboard_key_num]=Key_lidu_high[Meboard_key_num];     
                                            Key_hit_time[Meboard_key_num]=lidu2[data_temp2];
                                            PORTB|=(1<<PB3);  
                                            break;    

                                 case  4:   PORTA&=~(1<<PORTA4);        
                                            Key_status[Meboard_key_num]=0x11;  
                                            Key_hit_status[Meboard_key_num]=0;  
                                            Key_lidu_high[Meboard_key_num]  =lidu1[data_temp2]; 
                                            Key_lidu_low[Meboard_key_num]=255-Key_lidu_high[Meboard_key_num]; 
                                            Key_lidu_reg[Meboard_key_num]=Key_lidu_high[Meboard_key_num];     
                                            Key_hit_time[Meboard_key_num]=lidu2[data_temp2];
                                            PORTB|=(1<<PB4);
                                            break;    

                                 case  5:   PORTA&=~(1<<PORTA5);        
                                            Key_status[Meboard_key_num]=0x11;   
                                            Key_hit_status[Meboard_key_num]=0;  
                                            Key_lidu_high[Meboard_key_num]  =lidu1[data_temp2];
                                            Key_lidu_low[Meboard_key_num]=255-Key_lidu_high[Meboard_key_num]; 
                                            Key_lidu_reg[Meboard_key_num]=Key_lidu_high[Meboard_key_num];     
                                            Key_hit_time[Meboard_key_num]=lidu2[data_temp2];
                                            PORTB|=(1<<PB5);
                                            break;    

                                 case  6:   PORTA&=~(1<<PORTA6);       
                                            Key_status[Meboard_key_num]=0x11;   
                                            Key_hit_status[Meboard_key_num]=0;  
                                            Key_lidu_high[Meboard_key_num]  =lidu1[data_temp2]; 
                                            Key_lidu_low[Meboard_key_num]=255-Key_lidu_high[Meboard_key_num]; 
                                            Key_lidu_reg[Meboard_key_num]=Key_lidu_high[Meboard_key_num];     
                                            Key_hit_time[Meboard_key_num]=lidu2[data_temp2];
                                            PORTB|=(1<<PB6); 
                                            break;    

                                 case  7:   PORTA&=~(1<<PORTA7);      
                                            Key_status[Meboard_key_num]=0x11;   
                                            Key_hit_status[Meboard_key_num]=0;  
                                            Key_lidu_high[Meboard_key_num]  =lidu1[data_temp2]; 
                                            Key_lidu_low[Meboard_key_num]=255-Key_lidu_high[Meboard_key_num]; 
                                            Key_lidu_reg[Meboard_key_num]=Key_lidu_high[Meboard_key_num];     
                                            Key_hit_time[Meboard_key_num]=lidu2[data_temp2];
                                            PORTB|=(1<<PB7);
                                            break;    

                                 case  8:   PORTC&=~(1<<PORTC4);       
                                            Key_status[Meboard_key_num]=0x11;   
                                            Key_hit_status[Meboard_key_num]=0;  
                                            Key_lidu_high[Meboard_key_num]  =lidu1[data_temp2]; 
                                            Key_lidu_low[Meboard_key_num]=255-Key_lidu_high[Meboard_key_num]; 
                                            Key_lidu_reg[Meboard_key_num]=Key_lidu_high[Meboard_key_num];    
                                            Key_hit_time[Meboard_key_num]=lidu2[data_temp2];
                                            PORTC|=(1<<PC0);
                                            break;    

                                 case  9:   PORTC&=~(1<<PORTC5);         
                                            Key_status[Meboard_key_num]=0x11;   
                                            Key_hit_status[Meboard_key_num]=0;  
                                            Key_lidu_high[Meboard_key_num]  =lidu1[data_temp2]; 
                                            Key_lidu_low[Meboard_key_num]=255-Key_lidu_high[Meboard_key_num]; 
                                            Key_lidu_reg[Meboard_key_num]=Key_lidu_high[Meboard_key_num];    
                                            Key_hit_time[Meboard_key_num]=lidu2[data_temp2];
                                            PORTC|=(1<<PC1);
                                            break;    

                                 case 10:   PORTC&=~(1<<PORTC6);        
                                            Key_status[Meboard_key_num]=0x11;   
                                            Key_hit_status[Meboard_key_num]=0;  
                                            Key_lidu_high[Meboard_key_num]  =lidu1[data_temp2];
                                            Key_lidu_low[Meboard_key_num]=255-Key_lidu_high[Meboard_key_num];
                                            Key_lidu_reg[Meboard_key_num]=Key_lidu_high[Meboard_key_num];     
                                            Key_hit_time[Meboard_key_num]=lidu2[data_temp2];
                                            PORTC|=(1<<PC2);
                                            break;    

                                 case 11:   PORTC&=~(1<<PORTC7);       
                                            Key_status[Meboard_key_num]=0x11;   
                                            Key_hit_status[Meboard_key_num]=0;  
                                            Key_lidu_high[Meboard_key_num]  =lidu1[data_temp2]; 
                                            Key_lidu_low[Meboard_key_num]=255-Key_lidu_high[Meboard_key_num]; 
                                            Key_lidu_reg[Meboard_key_num]=Key_lidu_high[Meboard_key_num];     
                                            Key_hit_time[Meboard_key_num]=lidu2[data_temp2];
                                            PORTC|=(1<<PC3); 
                                            break;    
                                
                             }
                         }
                  Midi_data_flow[data_out]=0;             
                 data_out++;
               	if(data_out>249)
               	 {
               	 data_out=0;
               	 }  
                         
               	 
               	 
               	
               }
            
            
       
           
            //轮判断键的状态和对应的动作    key_status_xx :  00 关闭  0x11动作  0x22保持 
            //Key_status_   ;Key_lidu_  ;Key_lidu_reg_ ;Key_hit_time_; 
            for(i=0;i<8;i++)
            {
                if(Key_status[i]==0x11)
                {
                    if(Key_hit_time[i]==0)
                    {  //击键结束,到保持阶段
                        Key_status[i]=0x22;
                        PORTB|=(1<<i);   //1  保持  
                      //PORTB |=(1<<PORTB0)   1 // PORTB0=0x00;//关闭PWM
                        PORTA |=(1<<i); //    PORTA0=1;        //打开保持信号 
                    }
                    else     //击键过程
                    {
                      //  Key_lidu_reg[i]--;
                        if((Key_lidu_reg[i]==0)||(Key_lidu_reg[i]>252))
                        {
                            if(Key_hit_status[i]==0)            //0  表示目前是高电平   
                            {
                                Key_hit_status[i]=1; 
                                Key_lidu_reg[i]=Key_lidu_low[i];
                            }
                            else
                            {
                                Key_hit_status[i]=0; 
                                Key_lidu_reg[i]=Key_lidu_high[i];    
                            }
                            Key_hit_time[i]--;    
              
                            PORTB ^= (1<<i); // PORTB0=~PORTB0 ; //脉冲
                        }
              
                    }
                }//NO.
            }
            /////////
            i = 8;
            j = 0;
            k = 4;
            for(i=8;i<12;i++)
            {
                if(Key_status[i]==0x11)
                {
                    if(Key_hit_time[i]==0)
                    {  //击键结束,到保持阶段
                        Key_status[i]=0x22;
                        PORTC|=(1<<j);   //1 保持 
                      //PORTB |=(1<<PORTB0)   1 // PORTB0=0x00;//关闭PWM
                        PORTC |=(1<<k); //    PORTA0=1;        //打开保持信号 
                    }
                    else     //击键过程
                    {
                       // Key_lidu_reg[i]--;
                        if((Key_lidu_reg[i]==0)||(Key_lidu_reg[i]>252))
                        {
                            if(Key_hit_status[i]==0)            //0  表示目前是高电平   
                            {
                                Key_hit_status[i]=1; 
                                Key_lidu_reg[i]=Key_lidu_low[i];
                            }
                            else
                            {
                                Key_hit_status[i]=0; 
                                Key_lidu_reg[i]=Key_lidu_high[i];    
                            }
                            Key_hit_time[i]--;    
                            PORTC ^= (1<<j); // PORTB0=~PORTB0 ; //脉冲
                        }
                    }
                }//NO.
        
                j++;
                k++;
          
            } 
       
        /////轮巡结束        
         
         
     } //while(1)
   
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -