【ARM】s3c2440之gpio按键控制

本文介绍了一种使用S3C2440芯片的GPIO接口实现按键控制LED的方法。通过设置特定的寄存器,使得按下不同的按键可以点亮对应的LED灯。该方法适用于初学者了解GPIO的基本工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能

   通过GPIO,实现按键1点亮LED1,按键2点亮LED2……

说明

   1)因为2440的按键只涉及行,所以在扫描按键时比2410简单了很多

   2)在进行移位操作之前,必须进行数据寄存器的初始化,否则会出错(硬件特性)

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/*****************************************************************************
*****函数名:main()
*****功  能:通过GPIO,实现按键1点亮LED1,按键2点亮LED2
*****说  明:
*****************************************************************************/
#include "2440addr.h"
#define clrbit(var, bit) ((var) &= ~(1 << (bit)))   //把某一位清0
int main (void)
{
         rGPGCON &= (~((3<<22)|(3<<14)|(3<<12)|(3<<10)|(3<<6)|(3<<0))); //设置按键为输入
     rGPGUP   = 0x0;  //GPG上拉使能
     rGPBCON &= (~((3<<16)|(3<<14)|(3<<12)|(3<<10)|(3<<0)));  //LED1~4输出位清零
     rGPBCON |= ((1<<16)|(1<<14)|(1<<12)|(1<<10)|(0<<0)); //设置LED1~4为输出
     rGPBUP   =0x3ff;  //11 1111 1111,GPB上拉禁止
     rGPBDAT=0x3ff; //在进行移位操作之前必须进行数据寄存器的初始化
     while(1)
     {
            if(0==(rGPGDAT & (1<<0))) //GPG0
            {
                clrbit(rGPBDAT, 5); //LED1
            }
            else if(0==(rGPGDAT & (1<<3)))    //GPG3
            {
                clrbit(rGPBDAT, 6); //LED2
            }
            else if(0==(rGPGDAT & (1<<5)))    //GPG5
            {
              clrbit(rGPBDAT, 7);   //LED3
            }
            else if(0==(rGPGDAT & (1<<6)))    //GPG6
            {
              clrbit(rGPBDAT, 8);   //LED4
            }
     }
}



本文转自infohacker 51CTO博客,原文链接:http://blog.51cto.com/liucw/1197218


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值