历史上的今天
返回首页

历史上的今天

今天是:2024年10月14日(星期一)

正在发生

2018年10月14日 | Exynos4412按键检测(轮询方式)

2018-10-14 来源:eefocus

用的是轮询方式,后面会有中断方式的实现,闲话少说,进入正题,程序由前一个实验Tiny4412之C语言实现流水灯更改而来:

一、控制原理说明

先看一下原理图:

按键原理图

按键原理图

首先把按键对应的GPIO设置为输入模式,修改GPX3CON寄存器(板子不同,可能对应的GPIO管脚不同),通过上图可知当没有按下按键时,对应的GPIO状态为高电平,当有按键被按下时,对应的GPIO变为低,我们在程序一直检测这几个GPIO状态即可;

二、程序说明

其中Start.s文件同上一个实验完全相同;链接脚本key.lds的内容和led.lds完全相同,只把名字改了改;Makefile的内容也大部分一样,也只是改了改里边文件的名字,key.c的文件需要重新编写,代码如下:

====================================================================

// 程序说明

//一上电,4个LED全亮,当某个按键被按下,则对应的LED熄灭(可同时按下多个键)

//对应关系:KEY1-LED1,KEY2-LED2,KEY3-LED3,KEY4-LED4

//按键对应的GPIO

#define GPX3CON (*(volatile unsigned int *)0x11000C60)

#define GPX3DAT (*(volatile unsigned int *)0x11000C64)

 

//LED对应的GPIO

#define GPM4CON (*(volatile unsigned int *)0x110002E0)

#define GPM4DAT (*(volatile unsigned int *)0x110002E4)

 

void delay(volatile int time)

{

    for(; time > 0; time-- );

}

 

int main(void)

{

    unsigned long tmp = 0;

    unsigned char keyValue = 0;

    

    //GPX3_2-GPX3_5 设置为输入功能,用于检测按键引脚的状态

    tmp = GPX3CON;

    tmp &= ~(0xffff << 8);

    GPX3CON = tmp;

     

    // GPM4_0-GPM4_3 设置为输出功能,用于控制LED的亮灭

    tmp = GPM4CON;

    tmp &= ~0xffff;

    tmp |= 0x1111;

    GPM4CON = tmp;

 

    while(1)

    {

        //读按键引脚状态

        keyValue = GPX3DAT;

        keyValue = (keyValue & (0xf << 2)) >> 2;

         

        if(keyValue != 0xf) //说明有按键被按下,再详细判断是哪个按键被按下

        {

            delay(1000);    //防抖

             

            keyValue = GPX3DAT;

            keyValue = (keyValue & (0xf << 2)) >> 2;

             

            GPM4DAT = ~keyValue; //设置LED亮、灭

        }

        else

        {

            GPM4DAT = 0x00;

        }

    }

    return 0;

}

====================================================================

其中注释也比较详细,控制原理上边也说得很清楚了,这里就不多说了,有问题可以留言。

三、程序编译及烧写

1.编译

通过FTP或者其他工具将Start.s、Makefile、key.lds 、key.c四个文件上传到服务器上去,输入make命令进行编译将得到key.bin文件。

2.烧写

将SD卡插入电脑,并让VmWare里的Ubuntu识别出来,然后执行如下命令:

1

sudo ./sd_fusing.sh /dev/sdb ../3_key_scan/key.bin

如下图所示:

将程序烧到SD卡

将程序烧到SD卡

四、上电实验

程序运行图一

程序运行图一

程序运行图二

程序运行图二

上图所示,图一是没有按键被按下,四个LED全都被点亮,图二是有两个键被我同时按下


推荐阅读

史海拾趣

ESTEK公司的发展小趣事

ESTEK公司深知产品质量对于企业发展的重要性。因此,公司从源头上把控原材料的质量,并在生产过程中严格执行质量管理体系标准。通过一系列严格的质量管控措施,ESTEK公司的产品质量得到了有效保障。在市场上,ESTEK公司的产品以高质量、高可靠性著称,赢得了广大客户的信赖和好评。

FREESCALE (NXP)公司的发展小趣事

在电子行业竞争日益激烈的背景下,ESTEK公司也面临着诸多挑战和危机。然而,公司始终保持着清醒的头脑和坚定的信心。在面对市场波动、原材料价格上涨等挑战时,ESTEK公司迅速调整战略、优化生产流程、降低成本等措施,成功度过了危机。在危机中,ESTEK公司展现出了强大的韧性和生命力,为公司未来的发展奠定了坚实基础。

DENWIRE公司的发展小趣事

ESTEK公司自创立之初,就专注于电子产品的技术创新。在早期的市场竞争中,公司研发团队通过不懈努力,成功研发出一款具有革命性意义的电子元件。这款元件不仅性能卓越,而且成本远低于同类产品,使得ESTEK公司迅速在市场上脱颖而出。随着这款元件的广泛应用,ESTEK公司的知名度逐渐提升,为公司的后续发展奠定了坚实基础。

HTSEMI( Jin Yu Semiconductor )公司的发展小趣事

为了进一步提升技术实力,金宇半导体积极与国内外知名高校和科研机构建立合作关系。2010年,公司与某顶尖大学联合成立了“先进半导体技术研究中心”,共同开展前沿技术的研发。通过产学研的紧密合作,金宇半导体在先进制程工艺、芯片封装测试等领域取得了重大突破,成功推出了多款具有自主知识产权的高端芯片产品,进一步巩固了其在行业内的领先地位。

Cableform Inc公司的发展小趣事

随着全球化趋势的加速推进,Cableform Inc公司开始实施全球化战略。公司在全球范围内设立了多个分支机构和研发中心,加强了与国际同行的合作与交流。同时,公司还积极参与国际展览和技术研讨会等活动,展示了其最新的技术成果和产品应用。这些举措不仅提升了公司在国际市场的知名度和影响力,也为公司的长期发展奠定了坚实的基础。

这五个故事虽然是虚构的,但它们反映了Cableform Inc公司可能经历的一些重要发展阶段和关键事件。当然,实际的发展过程可能更加复杂和多变,但无论如何,这些故事都展现了公司在电子行业中的坚韧不拔和不断进取的精神。

Datatronic公司的发展小趣事

Datatronic公司深知人才是企业发展的核心。因此,公司一直注重人才的培养和引进。公司建立了完善的人才培训体系,为员工提供广阔的发展空间和机会。同时,公司还积极引进国内外优秀人才,为公司的技术创新和市场拓展提供了有力支持。这些举措使得Datatronic公司在人才方面形成了竞争优势。

问答坊 | AI 解惑

下一代48伏分布式电源架构的电源设计

      为了在保留紧凑砖型模式的同时缩减电源尺寸,电源制造商必须降低砖型模块的高度,并(或)尽量将外部的供电元件移至砖型模块内部。但同时采取上述两种做法却给电源设计者带来了诸多挑战,其中包括:如何处理高功率密度所需的散 ...…

查看全部问答>

电阻热噪声的计算

在高于绝对0°(-273℃或Ok)的任何温度下,物质中的电子都在持续地热运动。由于其运动方向是随机的,任何短时电流都不相关,因此没有可检测到的电流。但是连续的随机运动序列可以导致Johnson噪声或热噪声。电阻热噪声的幅度和其阻值有下列关系;  ...…

查看全部问答>

eboot中DM9000连接不上的问题

RT,平台是2440+wince5.0,现在想在eboot中通过以太网下载映像,在网上找了DM9000中的代码,把iobase修改了下,读取ID正确,然后经过下面配置后:         /* set the internal PHY power-on, GPIOs normal */     & ...…

查看全部问答>

keil平台编译的问题,谢谢

在keil uvision3平台下便宜rtx51tny下面的例子程序时总是出现下面的问题,不知道是什么原因,请师兄们帮忙谢谢。 --- Error: can\'t execute \'D:\\Keil\\C51\\BIN\\C51.EXE\'…

查看全部问答>

猎头公司硬件类职位

招 聘 职 位 一、        管理职位 技术部主任 1.        硕士以上学历,计算机、集成电路设计或嵌入式系统相关专业; 2.        5年以上技术管理和项目管理经验; 3.  & ...…

查看全部问答>

【求助】430的SPI接口与74HC595通信的问题

我用430169的SPI总线与74HC595相连,总共有4片595,它们之间级连. 数据静态显示.从异步串口接收的数据通过SPI口发送给595显示出来. 这中间的过程我不太清楚,尤其是怎么样把四位数据发送给595并显示这部分? 请路过的各位有识之士给小弟解答下!拜托啦 ...…

查看全部问答>

tms320c6747的emifa nandflash驱动

请问有tms320c6747(evmomapl137)的emifa nandflash驱动吗?紧急啊,关系到我的转正工资问题,要我这周搞定。还有三天了。把emifa的手册看了遍,没看出什么名堂,不知道怎么写。 手册里关于nandflash的寄存器只有那几个,没找到可以读写数据的寄存 ...…

查看全部问答>

proteus仿真 timestep too small

在使用proteus仿真时,出现timestep too small 的提示,感觉电路挺简单的,麻烦问下,这种问题该怎么解决,调设置的话,具体怎么调呢?…

查看全部问答>

zigbee路由分析

  在路由分析过程中涉及到路由表,路由发现表,邻居节点表,RREQ,RREP、RERR。   路由表:包含此条路由下一跳节点地址,路由状态,目的地址。   路由搜索表:在路由表建立过程中存在,应该是用来建立路由 ...…

查看全部问答>

基于坐标移位变换的dds(NCO)cordic

用基于cordic算法写的dds的verilog程序,带modelsim的仿真程序,写这个主要是在做dds时想用cpld来做,但是我的cpld资源太少,只有570个LE,而我又想用12位以上的da,大家懂的,如果刷波表是做不来的,所以就写了这个基于cordic算法的dds,也可以说 ...…

查看全部问答>