历史上的今天
今天是:2025年01月22日(星期三)
2020年01月22日 | 【ARM】2410裸机系列-按键查询式控制led
2020-01-22 来源:eefocus
开发环境
硬件平台:FS2410
主机:Ubuntu 12.04 LTS
LED灯原理图

按键原理图

按键的接线资源
KSCAN0 -> GPE11 KSCAN1 -> GPG6 KSCAN2 -> GPE13 KSCAN3 -> GPG2
EINT0 -> GPF0 EINT2 -> GPF2 EINT11 -> GPG3 EINT19 -> GPG11
程序主要原理
这里实现对 K1,K2,K3,K4 这四个键的查询。
主要涉及到K1,K2, K3, K4这四个按键,要用查询的方式进行判断哪个键被按下去了,因此:
将EINT11, EINT19设置为输入,用于读取;
将KSCAN0,KSCAN1,KSACAN2,设置为输出,并分别设置为0,1,1或1,0,1或1,1,0三种情况,这样可用于区分K1、K2、K3中哪个键按下去。
例如先让KSCAN0~2 = 011,那么K1被按下时,EINT19才会变为低电平,这时K2按下时,EINT19不会变低,这样就区分了按键K1和K2,区分其它按键原理一样。
寄存器配置
有关LED的寄存器的配置:(设置GPF4-GPF7为输出)

按键方面涉及到寄存器配置(设置相关寄存器输入输出)


精简原理图

程序源代码
//led_key.c
1 #include "2410addr.h"
2
3 void delay(long long max) //延迟函数
4 {
5 for(; max > 0; max--);
6
7 }
8
9 int main(void)
10 {
11 int read_value;
12
13 rGPFCON = rGPFCON & (~(0xff) << 8) | (0x55 << 8); //设置4个LED灯为输出(GPF4-GPF7输出)
14 rGPFDAT |= (0xf << 4); //先将4个灯都熄灭掉
15
16 rGPGCON = (0 << 7) | (1 << 12) | (0 << 23); //GPG3, GPG11 输入,GPG6, GPE11, GPE13输出
17 rGPECON = (1 << 22) | (1 << 26);
18
19 while(1)
20 {
21 rGPEDAT &= (0 << 11); //将GPE11置0,同时将GPE13和GPG6置1
22 rGPEDAT |= (1 << 13);
23 rGPGDAT |= (1 << 6);
24
25 read_value = rGPGDAT & 0x808; //读取GPG11和GPG3的输入值
26
27 if((read_value & 0x800) == 0) //判断GPG11输入是否为0,以此判断K1键是否按下
28 {
29 read_value = 0x800;
30 delay(200000); //按键去抖
31
32 if((read_value &= rGPGDAT) == 0)
33 {
34 if((rGPFDAT & (1 << 4)) == 0) //判断D12是否亮着,如果亮着则熄灭,反之相反
35 rGPFDAT |= (0x1 << 4);
36 else
37 rGPFDAT &= (0xe << 4);
38 }
39 }
40 else
41 {
42 if((read_value & 0x8) == 0) //判断GPG3输入的值是否为0, 以此K4键是否按下
43 {
44 read_value = 0x8;
45 delay(200000); //按键去抖
46
47 if((read_value &= rGPGDAT) == 0)
48 {
49 if((rGPFDAT & (0x8 << 4)) == 0) //判断D9是都亮着,如果亮着则熄灭,反之相反
50 rGPFDAT |= (0x8 << 4);
51 else
52 rGPFDAT &= (0x7 << 4);
53 }
54 }
55 }
56
史海拾趣
|
GPS是美国建立的高精度全球卫星定位导航系统,在陆地、海洋、航空和航天等领域有着广泛的应用。而高动态GPS接收机则可应用于导弹、卫星、飞机导航等许多场合,但由于高动态GPS接收机涉及军工等敏感领域,故国外的相关技术或产品对我国是封锁的,有 ...… 查看全部问答> |
|
借人气给大家分享一个好资料——飞思卡尔09FTF这些资料都是EEWORLD参加了飞思卡尔今年八月底在深圳举办的FTF活动带回的,非常有价值,也非常难得! 本来把他们都分门别类的放在各个应用技术专区了,很多人都没有发现,所以在此借人气,把这些资料 ...… 查看全部问答> |
|
关于AVStream minidiver DMA 支持的物理内存块大小问题 调试driver studio V3.1中的hwcap例子,发现AVStream把每帧图像缓冲区分成若干大小为4K Byte的mapping items,每个mapping item描述一块连续物理内存,每块内存大小只有4KB。所有这些内存块的虚拟地址是可以连续串联起来的,物理地址是分散的。 根 ...… 查看全部问答> |
|
先描述一下情况:我在做一个ADC12的使用,原先扫描的数据为32(行)*24(列)*50(帧),采用的ADC12配置为12位精度,采样256个时钟,序列单次扫描,代码如下: P6SEL = 0x81; ...… 查看全部问答> |
|
【设计工具】用FPGA动态探头与数字VSA对DSP设计实时分析 随着 FPGA 在数字通信设计领域(蜂窝基站、卫星通信和雷达)的高性能信号处理电路中成为可行的选择,分析和调试工具必须包括能帮助您在最短时间内得到电路最佳性能的新技术。 虽然现在已经有多种连接仿真与射频模拟信号的信号分析工 ...… 查看全部问答> |
|
手上在做一个用atmega128通过spi控制一个CCD模块的东西,但是从SPDR中读取的反馈始终不对。程序很短,个人感觉没有什么问题。希望各路大神能帮忙看看。SS片选悬空。#include <mega128.h>#include<delay.h>#define FLAG PINB.4unsigned char ...… 查看全部问答> |




