这个模块自带程序实际使用不方便,可以按照上面的改,主程序按键如何操作很简单了!判断键值就行 |
//------------下面是读按键和键值分离程序------------ unsigned char Read_key(void) { unsigned char c[4],i,key_value=0; STB=0; TM1638_Write(0x42); Delay10us(); for(i=0;i<4;i++) c[i]=TM1638_Read(); STB=1; //K1组合8键 if(c[0]==0x04) key_value=1; //KS1K1 if(c[0]==0x40) key_value=2; //KS2K1 if(c[1]==0x04) key_value=3; //KS3K1 if(c[1]==0x40) key_value=4; //KS4K1 if(c[2]==0x04) key_value=5; //KS5K1 if(c[2]==0x40) key_value=6; //KS6K1 if(c[3]==0x04) key_value=7; //KS7K1 if(c[3]==0x40) key_value=8; //KS8K1 //K2组合8键 if(c[0]==0x02) key_value=9; //KS1K2 if(c[0]==0x20) key_value=10; //KS2K2 if(c[1]==0x02) key_value=11; //KS3K2 if(c[1]==0x20) key_value=12; //KS4K2 if(c[2]==0x02) key_value=13; //KS5K2 if(c[2]==0x20) key_value=14; //KS6K2 if(c[3]==0x02) key_value=15; //KS7K2 if(c[3]==0x20) key_value=16; //KS8K2 //K3组合8键 if(c[0]==0x01) key_value=17; //KS1K3 if(c[0]==0x10) key_value=18; //KS2K3 if(c[1]==0x01) key_value=19; //KS3K3 if(c[1]==0x10) key_value=20; //KS4K3 if(c[2]==0x01) key_value=21; //KS5K3 if(c[2]==0x10) key_value=22; //KS6K3 if(c[3]==0x01) key_value=23; //KS7K3 if(c[3]==0x10) key_value=24; //KS8K3 return key_value; } |
最简单的改动,现在实现了只显示1或0状态。只是这样的话理论上所有的按键都可以控制电机开启了。。。。 while(Read_key()==i); //等待按键释放 // if(num[i]>15) //原程序是按一下键,自动计数加1.可以加到15 if(num[i]>1) //改为实现了只显示1与0(加到1,就值改为0),1电机启动,0电机断开 num[i]=0; Write_DATA(i*2,tab[num[i]]); Write_allLED(1<<i); } if(num[i]==1) { //电机开启程序 } |
但是这样的显示执行结果不是我想要的。明天再研究改一下程序。我只需要按一个键做开关,显示1或0就可以了,别的键都不需要改变。或者有哪个大神帮我改一下。 |