智能车制作

标题: k60 和键盘扫描的问题 [打印本页]

作者: 张扬2004    时间: 2013-11-29 20:00
标题: k60 和键盘扫描的问题
我本意是要用k60,5110液晶屏和矩阵按键做简易计算器,但现在液晶屏能驱动了,
目前我只检测一个按键试试,但按键没反应,求大神们指教!!!
求指点!!!
    unsigned char KeyScan(void)  
{
    unsigned char cord_h,cord_l;
   int a,b,c,d,e,f,g,i;           
            Init1();      //引脚初始化函数,引脚0,1,2,3为输出,引脚4,5,6,7为输入
           GPIO_ResetBits(PTD,GPIO_Pin_0); 引脚0输出低电平
           GPIO_ResetBits(PTD,GPIO_Pin_1);引脚1输出低电平
          GPIO_ResetBits(PTD,GPIO_Pin_2);引脚2输出低电平
          GPIO_ResetBits(PTD,GPIO_Pin_3);引脚3输出低电平   
a=GPIO_ReadInputDataBit(PTD, 4);读取4脚输入状态赋给a
b=GPIO_ReadInputDataBit(PTD, 5);同上
c=GPIO_ReadInputDataBit(PTD, 6);同上
d=GPIO_ReadInputDataBit(PTD, 7);同上                                                
   if(a==0||b ==0||c==0||d==0 )    //
   {delay(20);                              
     if( a==0 || b==0 || c==0 || d==0 )
     {
           if(a==0 && b!=0 && c!=0 && d!=0)
               cord_h=10;
           else if(a!=0 && b==0 && c!=0 && d!=0)
               cord_h=20;
           else if(a!=0 && b!=0 && c==0 && d!=0)
               cord_h=30;
           else if(a!=0 && b!=0 && c!=0 && d==0)
                cord_h=40;
             Init2(); 引脚初始化,引脚4,5,6,7为输出,引脚0,1,2,3为输入      
           GPIO_ResetBits(PTD,GPIO_Pin_4);4脚输出低电平
             GPIO_ResetBits(PTD,GPIO_Pin_5);
             GPIO_ResetBits(PTD,GPIO_Pin_6);
             GPIO_ResetBits(PTD,GPIO_Pin_7);                                                   
            e=GPIO_ReadInputDataBit(PTD, 0);读引脚状态
            f=GPIO_ReadInputDataBit(PTD, 1);
            g=GPIO_ReadInputDataBit(PTD, 2);
            i=GPIO_ReadInputDataBit(PTD, 3);         
             if(e==0 && f!=0 && g!=0 && i!=0)
                cord_l=1;
             else if(e!=0 && f==0 && g!=0 && i!=0)
                cord_l=2;
             else if(e!=0 && f!=0 && g==0 && i!=0)
                cord_l=3;
             else if(e!=0 && f!=0 && g!=0 && i==0)
                 cord_l=4;
      }
      while(e==0 || f==0 || g==0 || i==0);
} return(cord_l+cord_h);
}
unsigned char KeyPro(void)
{
switch(KeyScan())
{
  case 11CD_Write_Char(45,2,35);delay(20); break;先只检测一个按键,LCD_Write_Char()函数是显示一个字符
  default:return 0xff;break;
}
}
void main()
{
  LCD_Init();液晶屏驱动  
LCD_clear();清屏
while(1)
{
     KeyPro();
    delay(100);
}
  }

作者: 张扬2004    时间: 2013-11-29 20:02
字打错了,是case 11CD_Write_Char(45,2,35);delay(20); break;求指教啊
作者: 为丞而琳    时间: 2013-11-29 22:48
作为按键的时候,gpio的引脚要设置为输入上拉模式,你的初始化是错的
作者: 张扬2004    时间: 2013-11-30 10:45
为丞而琳 发表于 2013-11-29 22:48
作为按键的时候,gpio的引脚要设置为输入上拉模式,你的初始化是错的

我的行设为输出,列设为上拉输入,再作判断,得出cord_h的值,再将行设为上拉输入,列设为输出,再判断得出cord_l的值,最后再将cord_h+cord_l的值返回。





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2