stm8s003写的3*4矩阵键盘程序,有点问题。

2019-07-19 21:44发布

程序在下面。PD3-6是行线,PA1-3是列线。按列扫描的。
结果是,刚开始那个参数key能显示第一行和第三行的。后来,不管按哪个键,都是进第一行,第n列的。
PD 的IDR,和ODR,只要输出了0x07.   IDR也是0x07的。 按键不变化。
  另外,又一次单步调试的时候,正确进了第 [mw_shl_code=c,true]void key1(void) { GPIO_Init(GPIOD,(GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6),GPIO_MODE_OUT_PP_HIGH_FAST );//行线推挽输出 GPIO_Init(GPIOA,(GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 ), GPIO_MODE_IN_PU_IT );//列线上拉输入 GPIO_WriteLow(GPIOD,(GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6));//输出行线全部输出高 COLUMN_VALUE1=GPIO_ReadInputPin(GPIOA, GPIO_PIN_1); COLUMN_VALUE2=GPIO_ReadInputPin(GPIOA, GPIO_PIN_2); COLUMN_VALUE3=GPIO_ReadInputPin(GPIOA, GPIO_PIN_3); column_value=COLUMN_VALUE1+COLUMN_VALUE2+COLUMN_VALUE3; if(column_value!=0x0E)//cuo { GPIO_Write(GPIOD,0X70); ROW_VALUE1=GPIO_ReadInputPin(GPIOD, GPIO_PIN_3); ROW_VALUE2=GPIO_ReadInputPin(GPIOD, GPIO_PIN_4); ROW_VALUE3=GPIO_ReadInputPin(GPIOD, GPIO_PIN_5); ROW_VALUE4=GPIO_ReadInputPin(GPIOD, GPIO_PIN_6); row_value=ROW_VALUE1+ROW_VALUE2+ROW_VALUE3+ROW_VALUE4; key_value=row_value+column_value; switch(key_value) { case(0X76): {key=1;return;} case(0X7A): {key=2;return;} case(0X7C): {key=3;return;} } GPIO_Write(GPIOD,0X68); ROW_VALUE1=GPIO_ReadInputPin(GPIOD, GPIO_PIN_3); ROW_VALUE2=GPIO_ReadInputPin(GPIOD, GPIO_PIN_4); ROW_VALUE3=GPIO_ReadInputPin(GPIOD, GPIO_PIN_5); ROW_VALUE4=GPIO_ReadInputPin(GPIOD, GPIO_PIN_6); row_value=ROW_VALUE1+ROW_VALUE2+ROW_VALUE3+ROW_VALUE4; key_value=column_value+row_value; switch(key_value) { case(0X6E): {key=4;return;} case(0X72): {key=5;return;} case(0X74): {key=6;return;} } GPIO_Write(GPIOD,0X58); ROW_VALUE1=GPIO_ReadInputPin(GPIOD, GPIO_PIN_3); ROW_VALUE2=GPIO_ReadInputPin(GPIOD, GPIO_PIN_4); ROW_VALUE3=GPIO_ReadInputPin(GPIOD, GPIO_PIN_5); ROW_VALUE4=GPIO_ReadInputPin(GPIOD, GPIO_PIN_6); row_value=ROW_VALUE1+ROW_VALUE2+ROW_VALUE3+ROW_VALUE4; key_value=column_value+row_value; switch(key_value) { case(0X5E): {key=7;return;} case(0X62): {key=8;return;} case(0X64): {key=9;return;} } GPIO_Write(GPIOD,0X38); ROW_VALUE1=GPIO_ReadInputPin(GPIOD, GPIO_PIN_3); ROW_VALUE2=GPIO_ReadInputPin(GPIOD, GPIO_PIN_4); ROW_VALUE3=GPIO_ReadInputPin(GPIOD, GPIO_PIN_5); ROW_VALUE4=GPIO_ReadInputPin(GPIOD, GPIO_PIN_6); row_value=ROW_VALUE1+ROW_VALUE2+ROW_VALUE3+ROW_VALUE4; key_value=column_value+row_value; switch(key_value) { case(0X3E): {key=10;return;} case(0X42): {key=11;return;} case(0X44): {key=12;return;} } } }[/mw_shl_code]
二行的程序,当时IDR的值是0 1100 11 0(stm8没有PD0和PD7)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。