S3C2440学习之GPIO按键控制LED灯
2018-02-21 10:24
477 查看
/*
名称:S3C2440学习之GPIO按键控制LED灯
说明:这是实验2440GPIO的输入功能。基本的流程和51单片机开发的差不多。都是对GPIO端口寄存器的控制不同的是,51单片机可以直接对进行位控制,而2440中GPIO只能对32位的寄存器进行写入或者读出。这样的话,对于有些逻辑操作要稍微复杂点。还有个不同的是,无论是STM32还是51在进行IO按键输入的时候,都需要进行按键消抖,在这里却没又体现出来按键消抖,这是为什么呢?据我了解是这样,在进行51和STM32实验的时候,按键控制的是数码管(数字增加,降低),所以按键的机械抖动会给数码管数字的变化带来显著的影响。在这里是按键控制led灯的亮和灭,虽然仍然存在机械抖动,但是由于led只有两种状态,而且机械抖动只有几十毫秒,使得人眼分辨不出来了感觉是没影响一样。
*/
注:以上的代码是取自韦东山的嵌入式教程。
名称:S3C2440学习之GPIO按键控制LED灯
说明:这是实验2440GPIO的输入功能。基本的流程和51单片机开发的差不多。都是对GPIO端口寄存器的控制不同的是,51单片机可以直接对进行位控制,而2440中GPIO只能对32位的寄存器进行写入或者读出。这样的话,对于有些逻辑操作要稍微复杂点。还有个不同的是,无论是STM32还是51在进行IO按键输入的时候,都需要进行按键消抖,在这里却没又体现出来按键消抖,这是为什么呢?据我了解是这样,在进行51和STM32实验的时候,按键控制的是数码管(数字增加,降低),所以按键的机械抖动会给数码管数字的变化带来显著的影响。在这里是按键控制led灯的亮和灭,虽然仍然存在机械抖动,但是由于led只有两种状态,而且机械抖动只有几十毫秒,使得人眼分辨不出来了感觉是没影响一样。
*/
#define GPFCON (*(volatile unsigned long *)0x56000050) #define GPFDAT (*(volatile unsigned long *)0x56000054) #define GPGCON (*(volatile unsigned long *)0x56000060) #define GPGDAT (*(volatile unsigned long *)0x56000064) /* * LED1,LED2,LED4对应GPF4、GPF5、GPF6 */ #define GPF4_out (1<<(4*2)) #define GPF5_out (1<<(5*2)) #define GPF6_out (1<<(6*2)) #define GPF4_msk (3<<(4*2)) #define GPF5_msk (3<<(5*2)) #define GPF6_msk (3<<(6*2)) /* * S2,S3,S4对应GPF0、GPF2、GPG3 */ #define GPF0_in (0<<(0*2)) #define GPF2_in (0<<(2*2)) #define GPG3_in (0<<(3*2)) #define GPF0_msk (3<<(0*2)) #define GPF2_msk (3<<(2*2)) #define GPG3_msk (3<<(3*2)) int main() { unsigned long dwDat; // LED1,LED2,LED4对应的3根引脚设为输出 GPFCON &= ~(GPF4_msk | GPF5_msk | GPF6_msk); GPFCON |= GPF4_out | GPF5_out | GPF6_out; // S2,S3对应的2根引脚设为输入 GPFCON &= ~(GPF0_msk | GPF2_msk); GPFCON |= GPF0_in | GPF2_in; // S4对应的引脚设为输入 GPGCON &= ~GPG3_msk; GPGCON |= GPG3_in; while(1) { //若Kn为0(表示按下),则令LEDn为0(表示点亮) dwDat = GPFDAT; // 读取GPF管脚电平状态 if (dwDat & (1<<0)) // S2没有按下 GPFDAT |= (1<<4); // LED1熄灭 else GPFDAT &= ~(1<<4); // LED1点亮 if (dwDat & (1<<2)) // S3没有按下 GPFDAT |= (1<<5); // LED2熄灭 else GPFDAT &= ~(1<<5); // LED2点亮 dwDat = GPGDAT; // 读取GPG管脚电平状态 if (dwDat & (1<<3)) // S4没有按下 GPFDAT |= (1<<6); // LED3熄灭 else GPFDAT &= ~(1<<6); // LED3点亮 } return 0; }
注:以上的代码是取自韦东山的嵌入式教程。
相关文章推荐
- CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭(2)
- 用C#控制TQ2440开发板上的LED小灯(C# GPIO学习笔记)
- FPGA学习之按键控制led
- AndroidThings学习笔记--gpio控制Led和Button
- MCU学习3--按键控制LED
- 树莓派 Learning 003 — GPIO 002 输入模式 — 按键控制LED
- MCU学习4--利用一个按键控制两个LED与防抖
- STM32学习笔记——控制GPIO输出点亮LED灯(直接操作存储器)
- ARM嵌入式学习--OK6410裸板程序--1.GPIO控制LED
- arduino学习系列——按键控制LED灯
- 树莓派 Learning 003 — GPIO 003 中断模式 — 按键控制LED
- LPC2124--GPIO按键控制LED灯的闪烁
- 用C#控制TQ2440开发板上的LED小灯(C# GPIO学习笔记)
- 05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
- CC2530学习笔记の外部中断——按键控制LED
- (17/06/25)STM32学习->GPIO输出控制LED
- [转载]STM32学习笔记——控制GPIO输出点亮LED灯(直接操作存储器)
- 【ARM】s3c2440之gpio按键控制
- ucos学习实例之消息队列---按键控制LED的亮灭
- CC2530学习路线-基础实验-GPIO 控制LED灯亮灭(1)