📄 keydrvavr(16m).c
字号:
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 + -