免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5080 | 回复: 23
打印 上一主题 下一主题

高手们!帮忙看一下!矩阵键盘扫描,程序! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-28 13:20 |只看该作者 |倒序浏览
目前row0---row2 GPN0 - GPN2
      col0-clo4       GPN4-GPN6 和 GPN9

反转法扫描键盘!大家看看是什么问题!用的是中断!

论坛徽章:
0
2 [报告]
发表于 2011-11-28 13:21 |只看该作者
static void Scan_Keyboard(void)
{
        unsigned char IOValue = 0;
       
        IOValue |= 0xfff8; // 0 1 2是输出值0
        writel(0xfff8,S3C64XX_GPNDAT);
        Port_Init();/*012 output 4 5 6 9 是input*/
        IOValue = readl(S3C64XX_GPNDAT);
        printk("4569IOVAlue = %d...\n",IOValue);

        if((IOValue & (1 << 4)) == 0)
                COLVAL = 1;
        else if((IOValue & (1 << 5)) == 0)
                COLVAL = 2;
        else if ((IOValue & (1 << 6)) == 0)
                COLVAL = 3;
        else if((IOValue & (1 << 9)) == 0)
                COLVAL = 4;
       
                //反转
        writel(0xfd8f,S3C64XX_GPNDAT);
        port_init();/*012是input 4 5 6 9是output*/
        IOValue = readl(S3C64XX_GPNDAT);
        printk("123IOvalue = %d...\n",IOValue);
        if((IOValue & 1) == 0)
                ROWVAL = 1;
        else if((IOValue & (1 << 1)) == 0)
                ROWVAL = 2;
        else if((IOValue & (1 << 2))        == 0)
                ROWVAL = 3;       
       
        writel(0x2a,S3C64XX_GPNCON);//把0 1 2 重新设置成中断模式
}

论坛徽章:
0
3 [报告]
发表于 2011-11-28 13:22 |只看该作者
static void Scan_Keyboard(void)
{
        unsigned char IOValue = 0;
       
         这一行是没有的-----//IOValue |= 0xfff8; // 0 1 2是输出值0
        writel(0xfff8,S3C64XX_GPNDAT);
        Port_Init();/*012 output 4 5 6 9 是input*/
        IOValue = readl(S3C64XX_GPNDAT);
        printk("4569IOVAlue = %d...\n",IOValue);

        if((IOValue & (1 << 4)) == 0)
                COLVAL = 1;
        else if((IOValue & (1 << 5)) == 0)
                COLVAL = 2;
        else if ((IOValue & (1 << 6)) == 0)
                COLVAL = 3;
        else if((IOValue & (1 << 9)) == 0)
                COLVAL = 4;
       
                //反转
        writel(0xfd8f,S3C64XX_GPNDAT);
        port_init();/*012是input 4 5 6 9是output*/
        IOValue = readl(S3C64XX_GPNDAT);
        printk("123IOvalue = %d...\n",IOValue);
        if((IOValue & 1) == 0)
                ROWVAL = 1;
        else if((IOValue & (1 << 1)) == 0)
                ROWVAL = 2;
        else if((IOValue & (1 << 2))        == 0)
                ROWVAL = 3;       
       
        writel(0x2a,S3C64XX_GPNCON);//把0 1 2 重新设置成中断模式
}

论坛徽章:
0
4 [报告]
发表于 2011-11-28 14:16 |只看该作者
反转法  这么写有BUG吗?

论坛徽章:
0
5 [报告]
发表于 2011-11-28 14:18 |只看该作者

论坛徽章:
0
6 [报告]
发表于 2011-11-30 14:54 |只看该作者
再补充一个问题  readl  wtitel 函数原型是什么样子的!

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
7 [报告]
发表于 2011-11-30 19:11 |只看该作者
Why don't you use the kernel symbol functions?
for example irq_request? use the irq_handler ?

论坛徽章:
0
8 [报告]
发表于 2011-11-30 19:21 |只看该作者
回复 7# T-Bagwell


    where can I find the symbole ?
    i dont know how to change it?
     can you speak chinese

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
9 [报告]
发表于 2011-11-30 19:38 |只看该作者
回复 8# liutaolinux


    There have no chinese input method in this system
    I'm very lazy,
    you can see all of the symbol in Documentations,
Documentation/input/input.txt
Documentation/input/input-programming.txt

It will provide you how to use it.

论坛徽章:
0
10 [报告]
发表于 2011-11-30 19:52 |只看该作者
回复 9# T-Bagwell


    thank you very much!
    let me see!
    I will ask you where I can no learn of!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP