智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1912|回复: 3
打印 上一主题 下一主题

k60 和键盘扫描的问题

[复制链接]

8

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
425
威望
225
贡献
108
兑换币
133
注册时间
2013-10-26
在线时间
46 小时
毕业学校
中南民族大学
跳转到指定楼层
1#
发表于 2013-11-29 20:00:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我本意是要用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);
}
  }

8

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
425
威望
225
贡献
108
兑换币
133
注册时间
2013-10-26
在线时间
46 小时
毕业学校
中南民族大学
2#
 楼主| 发表于 2013-11-29 20:02:21 | 只看该作者
字打错了,是case 11CD_Write_Char(45,2,35);delay(20); break;求指教啊
回复 支持 反对

使用道具 举报

1

主题

243

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4541
威望
2107
贡献
1180
兑换币
1179
注册时间
2012-5-24
在线时间
627 小时
3#
发表于 2013-11-29 22:48:48 | 只看该作者
作为按键的时候,gpio的引脚要设置为输入上拉模式,你的初始化是错的
回复 支持 反对

使用道具 举报

8

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
425
威望
225
贡献
108
兑换币
133
注册时间
2013-10-26
在线时间
46 小时
毕业学校
中南民族大学
4#
 楼主| 发表于 2013-11-30 10:45:36 | 只看该作者
为丞而琳 发表于 2013-11-29 22:48
作为按键的时候,gpio的引脚要设置为输入上拉模式,你的初始化是错的

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-5 19:31 , Processed in 0.059381 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表