ARM920T实验箱s3c2410 矩阵按键控制步进电机正反转和停止

ARM920T实验箱s3c2410 矩阵按键控制步进电机正反转和停止

问题描述

按下第一个按键使步进电机可以正转、第二个反转反转、第三个按键停止

矩阵按键控制

画了张矩阵按键的内部电路图:

请添加图片描述

矩阵按键实物图:
请添加图片描述

ABC按键右边的就是步进电机。

按键第一行连接的是寄存器GPFDAT0的端口
第二行连接的是寄存器GPFDAT2的端口
第三行连接的是寄存器GPGDAT3的端口
第四行连接的是寄存器GPGDAT11的端口

GPF寄存器是8个位;GPG、GPE寄存器是16位。每种寄存器还对应有GPCON控制寄存器和GPUP上拉电阻寄存器。这里可以不用配置GP*UP上拉电阻。

GP*CON控制寄存器00输入,01输出,10中断,11保留

思路

将行配置为输入,列配置为输出。因为行连接电源,在按键没被按下时是高电平,按下后行的电平变为列电平值。

//按键,列的地址,低四位控制 #define KEY_LINE (*(volatile unsigned short*)0x38001002)

检测分三步:
1、将行配置为输入,列配置为输出。
2、首先将列全部置0,检测行是否位0,是则说明这一行有按键被按下;
3、再将一列置0,其余三列置1,检测行是否位0,是则说明这行这列的按键被按下。若不是,再将第二列置0,其余三列置1,再检测行是否为0。剩余两列也一样。

配置输入输出
void KeyInit() //按键初始化
{
    //00为输入,01为输出
    
    //输入
    GPFCON=(GPECON & (~(0x3<<0)));//初始化GPF0为输入
    GPFCON=(GPECON & (~(0x3<<4)));//初始化GPF2为输入
    
    
    GPGCON=(GPGCON & (~(0x3<<6)));//初始化GPG3、GPG11为输入
    GPGCON=(GPGCON & (~(0x3<<22)));
    
    //输出
    GPECON=(GPECON & (~(0x3<<6)));
    GPECON=(GPECON | (0x1<<6));//初始化GPE3为输出
    GPECON=(GPECON & (~(0x3<<22)));
    GPECON=(GPECON | (0x1<<22));//初始化GPE11为输出
    
    
    GPGCON=(GPGCON & (~(0x3<<4)));
    GPECON=(GPECON | (0x1<<4));//初始化GPG2为输出
    GPGCON=(GPGCON & (~(0x3<<12)));
    GPECON=(GPECON | (0x1<<12));//初始化GPG6为输出
}
按键扫描

//*
*按键扫描函数
*/
unsigned int KeyNum() 
{
    //初始化不为0~15就都行
    //0000
    column(0);
    if((GPFDAT & 0X01) == 0)
    {
        delay_ms(20);//消抖
        //0111
        column(1);
        if((GPFDAT & 0X01) == 0) // key7被按下
        {
            delay_ms(20);
            return Key = SEVEN;
        }
        else
            column(2); //1011
        if((GPFDAT & 0X01) == 0) //key8被按下
        {
            delay_ms(20);
            return Key = EIGHT;
        }
        else
            column(3);//1101
        if((GPFDAT & 0X01) == 0) //key9 被按下
        {
            delay_ms(20);
           return Key= NINE;
        }
        else
           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LrvinOen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值