|
看过很多前辈的处理程式 觉得我的比较简洁和明朗。发出来给大家参考和建议!总觉得很简单的程式 在这上面看到的都是很复杂化的东西!也许上面的东西原本就不是实际使用的东西!
采用了2片TM1629,程序有点长,都是同类化的东西,主要是明朗,扫描占MCU的时间也少!
感谢昨天在这帮助我的前辈们!细化的东西自己想想再加入。技术人主要是找方法,不是找程式!
图片在这上不了,自己也很少来这里! 图片可以查看我昨天的求助帖子!
再次谢谢大家的帮助!
uint8 Key_A_buf[4],Key_B_buf[4],key_val,key_get;
void SPI_Read_A(unsigned char *KeyBuff_A)
{
unsigned char N,i,RetDat=0;
NOP();
NOP();
PORTC|=(1<<ASTB);
PORTC|=(1<<BSTB);
PORTC|=(1<<DIO);
PORTC|=(1<<CLK);
NOP();
NOP();
SPI_Write_A(0x42); //发送读键盘命令//
NOP();
NOP();
PORTC|=(1<<DIO);
DDRC&=~(1<<DIO); //设定为输入//
NOP();
NOP();
for(i=0;i<4;i++)
{
for(N=0;N<8;N++)
{
RetDat>>=1;
PORTC&=~(1<<CLK);
NOP();
NOP();
NOP();
NOP();
PORTC|=(1<<CLK);
NOP();
NOP();
if((PINC&0x02)!=0)
{
RetDat|=0x80;
}
NOP();
NOP();
}
*(KeyBuff_A+i)=RetDat;
RetDat=0;
NOP();
NOP();
}
PORTC|=(1<<ASTB);
PORTC|=(1<<DIO);
DDRC|=(1<<DIO); //设定为输出//
NOP();
NOP();
}
void SPI_Read_B(unsigned char *KeyBuff_B)
{
unsigned char N,i,RetDat=0;
NOP();
NOP();
PORTC|=(1<<ASTB);
PORTC|=(1<<BSTB);
PORTC|=(1<<DIO);
PORTC|=(1<<CLK);
NOP();
NOP();
SPI_Write_B(0x42); //发送读键盘命令//
NOP();
NOP();
PORTC|=(1<<DIO);
DDRC&=~(1<<DIO); //设定为输入//
NOP();
NOP();
for(i=0;i<4;i++)
{
for(N=0;N<8;N++)
{
RetDat>>=1;
PORTC&=~(1<<CLK);
NOP();
NOP();
NOP();
NOP();
PORTC|=(1<<CLK);
NOP();
NOP();
if((PINC&0x02)!=0)
{
RetDat|=0x80;
}
NOP();
NOP();
}
*(KeyBuff_B+i)=RetDat;
RetDat=0;
NOP();
NOP();
}
PORTC|=(1<<BSTB);
PORTC|=(1<<DIO);
DDRC|=(1<<DIO); //设定为输出//
NOP();
NOP();
}
//键盘键值扫描//
void key_val_pro(void)
{
uint8 N,M;
SPI_Read_A(Key_A_buf);
for(N=0;N<4;N++)
{
switch(Key_A_buf[N])
{
case 0x08:
switch(N)
{
case 0: //sw2//
key_val=2; //键值//
key_get=1; //压键标志//
break;
case 1: //sw4//
key_val=4;
key_get=1;
break;
case 2: //sw6//
key_val=6;
key_get=1;
break;
case 3: //sw8//
key_val=8;
key_get=1;
break;
default:
break;
}
break;
case 0x80:
switch(N)
{
case 0: //sw3//
key_val=3;
key_get=1;
break;
case 1: //sw5//
key_val=5;
key_get=1;
break;
case 2: //sw7//
key_val=7;
key_get=1;
break;
case 3: //sw9//
key_val=9;
key_get=1;
break;
default:
break;
}
break;
case 0x04:
switch(N)
{
case 0: //sw10//
key_val=10;
key_get=1;
break;
case 1: //sw12//
key_val=12;
key_get=1;
break;
case 2: //sw14//
key_val=14;
key_get=1;
break;
case 3: //sw16//
key_val=16;
key_get=1;
break;
default:
break;
}
break;
case 0x40:
switch(N)
{
case 0: //sw11//
key_val=11;
key_get=1;
break;
case 1: //sw13//
key_val=13;
key_get=1;
break;
case 2: //sw15//
key_val=15;
key_get=1;
break;
case 3: //sw17//
key_val=17;
key_get=1;
break;
default:
break;
}
break;
default:
break;
}
}
SPI_Read_B(Key_B_buf);
for(M=0;M<4;M++)
{
switch(Key_B_buf[M])
{
case 0x08:
switch(M)
{
case 0: //sw18//
key_val=18; //键值//
key_get=1; //压键标志//
break;
case 1: //sw20//
key_val=20;
key_get=1;
break;
case 2: //sw22//
key_val=22;
key_get=1;
break;
case 3: //sw_nop//
//key_val=88;
//key_get=0;
break;
default:
break;
}
break;
case 0x80:
switch(M)
{
case 0: //sw19//
key_val=19;
key_get=1;
break;
case 1: //sw21//
key_val=21;
key_get=1;
break;
case 2: //sw23//
key_val=23;
key_get=1;
break;
case 3: //sw_nop//
//key_val=88;
//key_get=0;
break;
default:
break;
}
break;
case 0x04:
switch(M)
{
case 0: //sw24//
key_val=24;
key_get=1;
break;
case 1: //sw26//
key_val=26;
key_get=1;
break;
case 2: //sw28//
key_val=28;
key_get=1;
break;
case 3: //sw_nop//
//key_val=88;
//key_get=0;
break;
default:
break;
}
break;
case 0x40:
switch(M)
{
case 0: //sw25//
key_val=25;
key_get=1;
break;
case 1: //sw27//
key_val=27;
key_get=1;
break;
case 2: //sw29//
key_val=29;
key_get=1;
break;
case 3: //sw_nop//
//key_val=88;
//key_get=0;
break;
default:
break;
}
break;
default:
break;
}
}
}
void main(void )
{
uint8 i;
init_devices();
PORTC&=~(1<<P_LED);
init_TM1629B();
delay_ms(1000);
dis_coun=98765; //计数器//
disdat_A[7]=(WELD|OFF); //LED_A 点亮数据//
disdat_B[4]=(COUN|CUR|FUN); //LED_B 点亮数据//
display_A();
TM1629B_Write_A(Dis_Buf_A);
delay_ms(1000);
display_B();
display_COUN();
TM1629B_Write_B(Dis_Buf_B);
while(1)
{
delay_ms(1);
key_val_pro();
delay_ms(1);
dis_coun=key_val;
display_B();
display_COUN();
TM1629B_Write_B(Dis_Buf_B);
delay_ms(1);
}
}
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|