美文网首页我用 LinuxLinux学习之路
Tiny4412裸机按键控制LED灯

Tiny4412裸机按键控制LED灯

作者: TonyCode | 来源:发表于2019-03-24 17:47 被阅读3次

试过了GPIO的输出功能,再来测试下GPIO的输入功能。开发板上有四个用户按键,使用这四个按键来控制四个LED的状态,发现使用位操作真的是非常方便。

  • 开发板:Tiny4412SDK标准版 「Tiny4412 SDK 1506」
  • 工具:「arm-linux-gcc-4.5.1」 「minicom」 「dnw」
  • 平台:Ubuntu 14.04

1. 在原理图上找到按键对应的GPIO

在上一篇中,通过原理图已经知道了用户LED1-4,对应了GPM4_0-GPM4_3,再来看下KEY1-4对应的管脚。

用户按键 GPX3

用户按键KEY1、KEY2、KEY3、KEY4分别对应了GPX3_2、GPX3_3、GPX3_4、GPX3_5,并且按键引脚平常是高电平,按键被按下变为低电平。

2. 芯片手册查找GPIO相关寄存器

控制寄存器GPX3CON:

GPX3CON

数据寄存器GPX3DAT:

GPX3DAT

配置GPX3所对应的位为0,即为输入模式。

3. 编写程序

#define GPIOBASE    0x11000000
#define GPM4CON     (*(volatile unsigned long *)(GPIOBASE + 0x02E0))
#define GPM4DAT     (*(volatile unsigned long *)(GPIOBASE + 0x02E4))
#define GPX3CON     (*(volatile unsigned long *)(GPIOBASE + 0x0C60))
#define GPX3DAT     (*(volatile unsigned long *)(GPIOBASE + 0x0C64))

int key(void)
{
    unsigned long value;

    /*设置LED1-4对应GPIO为输出模式*/
    GPM4CON &= ~((0xF<<0) | (0xF<<4) | (0xF<<8) | (0xF<<12));
    GPM4CON |= ((1<<0) | (1<<4) | (1<<8) | (1<<12));

    /*设置KEY1-4对应GPIO为输入模式*/
    GPX3CON &= ~((0xF<<8) | (0xF<<12) | (0xF<<16) | (0xF<<20));

    while(1)
    {
        value = GPX3DAT; //读取GPX3电平状态

        if(value & (1<<2)) //Key1 --> GPX3_2
        {
            GPM4DAT |= (1<<0); //LED1 --> GPM4_0
        }else{
            GPM4DAT &= ~(1<<0);
        }

        if(value & (1<<3)) //Key2 --> GPX3_3
        {
            GPM4DAT |= (1<<1);  //LED2 --> GPM4_1
        }else{
            GPM4DAT &= ~(1<<1);
        }

        if(value & (1<<4)) //Key3 --> GPX3_4
        {
            GPM4DAT |= (1<<2);  //LED3 --> GPM4_2
        }else{
            GPM4DAT &= ~(1<<2);
        }

        if(value & (1<<5)) //Key4 --> GPX3_5
        {
            GPM4DAT |= (1<<3); //LED4 --> GPM4_3
        }else{
            GPM4DAT &= ~(1<<3);
        }
    }
    return 0;
}

Makefile代码如下:

default:
    arm-linux-gcc -c key.c  -o key.o
    arm-linux-ld  -Ttext=0x70003000  key.o  -o key
    arm-linux-objcopy  -O binary   key  key.bin
clean:
    rm -f key.o  key  key.bin   *~

执行make clean,然后make,生成key.bin二进制文件。

生成二进制文件

4. 上传程序到开发板

  1. 在串口中执行:
dnw 70003000

等待dnw下载。

等待下载
  1. 在ubuntu下文件目录下执行:
dnw key.bin
上传 完成
  1. 文件通过dnw下载到开发板内存地址0x70003000,执行:
go 70003000

程序运行。

运行

5. 按键控制LED状态

LED KEY

相关文章

  • Tiny4412裸机按键控制LED灯

    试过了GPIO的输出功能,再来测试下GPIO的输入功能。开发板上有四个用户按键,使用这四个按键来控制四个LED的状...

  • 树莓派按键控制LED灯

    上一次学习了用树莓派控制一个led灯。 那么如何用按键来控制led灯呢? 就是说有一个按键,我们按下的时候led灯...

  • Tiny4412裸机点亮LED

    之前的工作中都是基于STM32开发项目的,很想学习下系统级别ARM Linux开发,手上正好有块友善之臂的Tiny...

  • 灵动微MM32F003硬件最小系统 --- 按键扫描例程解析【9

    修改了官方的按键扫描例程,该例程实现按下按键,控制LED指示灯状态翻转的功能。 1 按键扫描函数 2 main函数...

  • 智能门铃学习活动教学设计方案设计

    适用对象 本教案适用于五年级学生,之前在课堂上完成过一些简单的点亮LED灯、呼吸灯、按键控制LED灯,关于分支结构...

  • 2018-10-09

    项目一:按键 上图是使用接在2口的按键来控制接在13口的led灯的程序,在程序当中,出现了 pinMode(2,...

  • 3.STM32之扫描式按键

    1.目的 本次STM32实验希望通过扫描式按键对LED灯进行控制。这种方式需要CPU不断扫描用户是否按下按键,效率...

  • STM32CubeMx实验之按键控制灯的亮灭

    说明:本次实验目的为按键KEY1按下,LED灯亮;按键KEY2按下,LED灯灭 一、STM32CubeMX创建工程...

  • 2020-02-05

    ESP82266外部中断函数及按键控制LED灯 GPIO 输⼊入输出相关宏 GPIO_OUTPUT_SET(gpi...

  • Micro:bit 模拟传球小程序

    今天我们来实现一个模拟传球小程序,通过按键 A 和 B 来控制球( led 小灯)左右移动,通过这个小程序,你将了...

网友评论

    本文标题:Tiny4412裸机按键控制LED灯

    本文链接:https://www.haomeiwen.com/subject/eiiuvqtx.html