【mini2440】S3C2440的基本IO

本文详细介绍了如何使用GPIO接口控制LED灯、蜂鸣器的工作,并实现按键的消抖逻辑。通过C语言代码展示了如何配置端口、数据寄存器及实现基本定时操作,适合初学者理解嵌入式系统基础应用。

1. 原理图与实物图对照图

原理图
https://download.youkuaiyun.com/download/Kshine2017/73732833

2.详细介绍

2.1 Led电路

led电路
在这里插入图片描述

普通控制代码:

//GPBCON 0x56000010  R/W  配置端口B的引脚
#define GPBCON (*(unsigned int *)0x56000010)
//GPBDAT 0x56000014  R/W  端口B的数据寄存器
#define GPBDAT (*(unsigned int *)0x56000014)

void delay(unsigned int time)
{
    int i,j;
    for(i=0;i<time;i++)
        for(j=0;j<5000;j++);
}

int main(void)
{
    GPBCON = 0x15400;   //配置B5,B6,B7,B8 为IO输出
    GPBDAT = 0x1e0;     //初始化让四个灯灭 (高电平 - 灭)
    while(1)
    {
        delay(100);
        GPBDAT = 0x00; //亮
        delay(100);
        GPBDAT = 0x1e0;//灭
    }
}


2.2 蜂鸣器电路

蜂鸣器

//GPBCON  0x56000010  R/W  配置端口 B 的引脚 
#define GPBCON  (*(unsigned int *)0x56000010)
//GPBDAT  0x56000014  R/W  端口 B 的数据寄存器
#define GPBDAT  (*(unsigned int *)0x56000014)

void delay(unsigned int time)
{
      int i,j;
      for(i=0;i<time;i++)
         for(j=0;j<5000;j++);
}

int main(void)
{
    GPBCON = 0x1; //设置GPB0为output
    GPBDAT = 0x0; //设置GPB0为低电平,蜂鸣器不响
    while(1)
    {
      delay(100);
      GPBDAT = 0x01;  //设置GPB0为高电平,蜂鸣器响
      delay(100);
      GPBDAT = 0x00;  //设置GPB0为低电平,蜂鸣器不响
    }
}

2.3 按键

在这里插入图片描述

//GPGDAT 0x56000064 R/W 端口G 的数据寄存器
#define   GPGDAT (*(int *)0x56000064)
//GPBCON 0x56000010 R/W 配置端口B 的引脚
#define   GPBCON (*(int *)0x56000010)
//GPBDAT 0x56000014 R/W 端口B 的数据寄存器
#define   GPBDAT (*(int *)0x56000014)

void delay(int time)
{
   int i,j;
   for(i=0; i<time; i++)
      for(j=0; j<1000; j++);
}
int main(void)
{
    GPBCON = 0x01;//set GPB0->output 
	GPBDAT = 0x00;//set beep off
	//GPGCON 默认值
	//GPGDAT
	//  xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
	//& 0000 0000 0000 0000 0000 0000 0000 0001
	//============================================
	//  0000 0000 0000 0000 0000 0000 0000 000x
    while(1)
	{
	   if((GPGDAT & 0x01)==0)
	   {
	//  xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx		  异或 0^0 =0 1^1=0 0^1=1 1^0=1
	//^ 0000 0000 0000 0000 0000 0000 0000 0001
	//============================================
	//  xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx	      
		  GPBDAT ^= 0x01;//蜂鸣器状态切换
	   }
	}

}

加上消抖逻辑:

    while(1)
	{
	   if((GPGDAT & 0x01)==0)
	   {
	    delay(200);
	    if((GPGDAT & 0x01)==0)
	    {
		 while((GPGDAT & 0x01)==0);//等待手松开
	//  xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx		  异或 0^0 =0 1^1=0 0^1=1 1^0=1
	//^ 0000 0000 0000 0000 0000 0000 0000 0001
	//============================================
	//  xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx	      
		  GPBDAT ^= 0x01;//蜂鸣器状态切换
		}
	   }
	}

相关代码的工程文件

https://download.youkuaiyun.com/download/Kshine2017/74059558

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值