初级会员

- 积分
- 100
- 金钱
- 100
- 注册时间
- 2015-11-2
- 在线时间
- 4 小时
|
5金钱
参照网上程序所学的程序。输出LED显示正常,但读取键盘值不对,
请大家给指导一下。
问题出地哪里?
void TM1638_Init()
{ int i=0;
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRL&=0XFFFFF000;
GPIOA->CRL|=0X00000333;//PA8 推挽输出
GPIOB->ODR|=7;
STB=0;
Write_Byte(0x8a);
STB=1;
STB=0;
Write_Byte(0X40);
for(i=0;i<16;i++)
{ Write_Byte(0x00);
}
STB=1;
}
//=======================================================================================
//=======================================================================================
void Write_Byte(u8 byte)
{ u8 i=0;
for(i=0;i<8;i++){
CLK=0;
if(byte&0x01){
DI=1;
}else{
DI=0;
}
CLK=1;
byte>>=1;
}
}
//??????????????????????????????????????????????????????????????????????????
unsigned char TM1638_Read(void)
{
unsigned char i=0;
unsigned char temp=0x00;
for(i=0;i<8;i++)
{
CLK=1;
temp>>=1;
if(DO)
{
temp|=0x80;
}
CLK=0;
}
return temp;
}
unsigned char Read_key(void) //?áè?°′?ü?μμ?oˉêy
{ unsigned char c[4],i=0;
STB=0; //????
Write_Byte(0x42);
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRL&=0XFFFFF000;
GPIOA->CRL|=0X00000833;//PA8 推挽输出
GPIOB->ODR|=7;
for(i=0;i<4;i++)
c=TM1638_Read();
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRL&=0XFFFFF000;
GPIOA->CRL|=0X00000333;//PA8 推挽输出
GPIOB->ODR|=7;
STB=1;
return i;
}
//?????????????????????????????????????????????????????????????????????
u8 V[10]= {0,9,8,7,6,5,6,7,8,9} ;
u8 const H[10]= {0XEB,0X28,0X73,0X7A,0XB8,0XDA,0XDB,0X68,0XFB,0XFA} ;
void HH_L(void)
{ u8 P,M;
u8 Q,U;
STB=0;
Write_Byte(0X40);
STB=1;
STB=0;
Write_Byte(0Xc0);
for(Q=0;Q<8;Q++)
{ U=128;M=0;
for(P=0 <8 ++)
{ M= ((H[V[2+P]]>>Q)&0x01)*U+M;
U=U/2;
}
Write_Byte(M);
U=2;M=0;
for(P=0 <2 ++)
{ M= ((H[V[P]]>>Q)&0x01)*U+M;
U=U/2;
}
Write_Byte(M);
}
STB=1;
}
|
|