ok6410 按键测试c语言版程序

发布者:VelvetWhisper最新更新时间:2022-05-30 来源: eefocus关键字:按键测试  c语言版 手机看文章 扫描二维码
随时随地手机看文章

直接贴代码:


/*

    name:led_key

    author:lvtory

    硬件平台:ok6410

    function:

              key1:实现从0-15二进制级数点亮led

              key2:实现初始化

              key3-key6:按键对应点亮相应led

              使用查询方式

    create:2013.3.17          

    

*/


/**** led gpio NLED1-4 -> GPM0-3  */

#define rGPMCON (*(volatile unsigned *)0x7F008820)

#define rGPMDAT (*(volatile unsigned *)0x7f008824)

#define rGPMPUD (*(volatile unsigned *)0x7f008828)



/****    key gpio  KEYINT1-6 ->GPN0-5 */

#define rGPNCON (*(volatile unsigned *)(0x7F008830))

#define rGPNDAT (*(volatile unsigned *)(0x7F008834))


#define rGPNPUD (*(volatile unsigned *)(0x7F008838))



void led_run();


void init()

{

    /*配置led*/

    rGPMCON=0x1111    ;//配置为    OUTPOUT

    rGPMPUD=0x0;    

    rGPMDAT=0x0f;    //全灭

    

    

    /*配置key*/

    rGPNCON=0x00    ;//配置为    INPUT

        

}


void delay(int n)

{

    int i=0;

    int j=0;

    for(i=0;i<10000;i++)

    {

        for(j=0;j<2000;j++)

        {

            

        }

    }

}

void key()

{

    int key;

    while(1)

    {


        while((key=(rGPNDAT&0x3f))==0x3f);


        switch(key)

        {

            case 0x3e:

                        led_run();

                        break;

            case 0x3d:

                        init();

                        break;

            case 0x3b:

                        rGPMDAT=0x0e;

                        break;

            case 0x37:

                        rGPMDAT=0x0d;

                        break;

            case 0x2f:

                        rGPMDAT=0x0b;

                        break;

            case 0x1f:

                        rGPMDAT=0x07;

                        break;

                

        }    

        

    }

}


void led_run()

{

    int num=0;

    int i;


        for(i=0;i<16;i++)

        {

        

            if((rGPNDAT&0x3f)==0x3d)

            {

                i=0;

                rGPMDAT=~i;

                break;

            }

            rGPMDAT=~i;

            delay(100);

            

        }


}


void Main()

{

    init();


    key();

  

}


汇编启动代码:

    IMPORT Main


    AREA |C$$code|, CODE, READONLY

    ENTRY

    

start


        B       Main         ;跳入MAIN程序

    END

关键字:按键测试  c语言版 引用地址:ok6410 按键测试c语言版程序

上一篇:老查的ARM学习笔记:chapter-3(串口驱动程序分析 )
下一篇:ok6410 nandflash 2

推荐阅读最新更新时间:2024-11-17 08:27

Linux下s3c6410的GPIO操作(6)
1、在 Linux下s3c6410的GPIO操作(3) 这篇博客中少分析了一个函数,当时列出了源码,但没分析,现在补上。 什么函数呢?如下所示: #ifdef CONFIG_S3C_GPIO_CFG_S3C64XX /** * s3c_gpio_setcfg_s3c64xx_4bit - S3C64XX 4bit single register GPIO config. * @chip: The gpio chip that is being configured. * @off: The offset for the GPIO being configured. * @cfg: The configurati
[单片机]
Linux下s3<font color='red'>c</font><font color='red'>6410</font>的GPIO操作(6)
s3c6410在linux下的WATCHDOG TIMER(看门狗定时器)驱动(1)
还是先说下整体结构,又要说到大家很熟悉的平台设备了,同样看门狗定时器也是作为平台设备存在的,但与以前的不同的地方是,看门狗定时器是一种混杂设备,先介绍下混杂设备。 1、混杂设备 1.1、混杂设备并没有明确的定义。它的主设备号是10,不同的设备用次设备号区分。混杂设备用结构体miscdevice表示,源码如下: struct miscdevice { int minor; 次设备号 const char *name; 设备名 const struct file_operations *fops;设备的操作函数,与字符设备相同 struct list_head list; 链接混杂设备的链表 struct device *
[单片机]
OK6410A 开发板 (三) 13 u-boot-2021.01 boot 解析 SPL 镜像运行部分 boot 详细解析
url : git@github.com:lisider/u-boot.git branch : ok6410a commit id : e63a4077ad3aea53107495b0b68b95e720fe6033 config : ok6410a_mini_defconfig // 涉及的 .S .s .c 文件 有 67个 从入口出口来看 // 运行在 0x0c00 0000 // 入口 为 arch/arm/lib/vectors.S 中的 _start 标号处的 b reset reset arch/arm/cpu/arm1176/start.S 39 lowlevel_init(1
[单片机]
OK6410A 开发板 (八) 11 linux-5.11 OK6410A start_kernel 打印角度 第一阶段 mem
该阶段完成了 1. 根据 memblock 的 reserved 成员 reserve 不需要填充的页表 // reserve_bootmem_region 2. 通过 在 全物理内存内 互补 memblock 的 reserved,得到未使用的物理内存,填充需要填充的页表 // __free_memory_core 3. 至此 , buddy 初始化完成 4. 用(内存地址,内存大小,申请块大小)填充 kmalloc_caches )] )] 5. 至此 , slab 初始化完成 6. 将 在vmalloc区间的 已经使用的虚拟内存地址A(主要是io设备) 注册到 vmap_area_root 7. 通过
[单片机]
OK6410A 开发板 (三) 20 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 system clock
system clock 的设置 主要参与的寄存器 归属 3 SYSTEM CONTROLLER 范围 0x7E00_F000 0x7E00_FFFF S3C6410的时钟 |---APLL---------ARMCLK --- 用于 CPU | 外部晶振(XTIPLL)+内部的OSC(振荡器) | 0 | |----HCLK --- 用于 AXI/AHB 总线外设 |---OM --- 主时钟 ---- |---MPLL----| 外部时钟(EXTCLK) | 1 | |----PCLK --- 用于 APB 总线外设
[单片机]
OK<font color='red'>6410</font>A 开发板 (三) 20 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 system clock
linux串口终端驱动——s3c6410平台(三)
上一篇关注的是tty上层字符层面的操作和注册,这一篇主要关注线程的注册,如何与上层建筑联系起来。 一、 tty_ldisc.c提供了tty_register_ldisc()接口用于注册线路规程,例如/driver/char/n_tty.c文件则针对N_TTY线路规程实现了具体的tty_disc结构体中的成员。 tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY) 其中有 #define N_TTY 0 struct tty_ldisc_ops tty_ldisc_N_TTY = { .magic = TTY_LDISC_MAGIC, .name = n_tt
[单片机]
(ARM11 S3C6410)关于裸机串口与定时器
调试MCU经常需要用串口。 裸机前后台系统,基本就是基于定时器中断。 init.s 启动代码 Mode_USR EQU 0x10 Mode_FIQ EQU 0x11 Mode_IRQ EQU 0x12 Mode_SVC EQU 0x13 Mode_ABT EQU 0x17 Mode_UND EQU 0x1B Mode_SYS EQU 0x1F UND_Stack_Size EQU 0x00000400 SVC_Stack_Size EQU 0x00001000 ABT_Stack_Size EQU 0x00000400 FIQ_Sta
[单片机]
基于ok6410的韦东山驱动视频简要分析--ts驱动
一、写ts驱动步骤(新手稍微看下即可,内容有点搞) 1、复制头文件; 2、写入口函数跟出口函数 3、分配一个input_dev结构体, 在头文件下插入:static struct input_dev *ts_dev; 在init中分配:ts_dev = input_allocate_device(); 4、注册:在init中注册:input_register_device(ts_dev); 5、设置: 1、能产生哪类事件: set_bit(EV_KEY, ts_dev- evbit);按键类事件 set_bit(EV_ABS, ts_dev- evbit);触摸屏事件 2、能产生这类事件
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved