S3C2440裸机按键控制小灯

2023-05-16

1、环境

1、操作系统:win7 64位
2、集成开发环境:keil4.7
3、开发板:FL2440
4、下载器:Jlink V9

2、按键以及LED灯原理图

根据FL2440开发板原理图可知,有四个led灯分别由GPB5、GPB6、GPB8、GPB10控制,当控制小灯的管脚输出高电平时,小灯熄灭;当控制小灯的管脚输出低电平时,小灯点亮。四个按键分别通过GPF0、GPF2、GPF3、GPF4查看其按下与否,若按键按下,则其对应的管脚寄存器读取的电平是低电平,未按下则读取的电平为高电平。

在这里插入图片描述

在这里插入图片描述

3、端口概述

3.1 S3C2440端口

S3C2440有130个I/O端口,分为A~J组:GPA、GPB、…、GPJ。可以通过设置设置寄存器来确定某个引脚用于输入、输出还是其他特殊功能。
对于输入,可以通过读取某个寄存器来确定引脚的电平是高还是低;对于输出,可以通过写入某个寄存器来让这个引脚输出高电平或低电平;对于其他特殊功能,则有另外的寄存器来控制它。
对于这几组GPIO,它们的寄存器是相似的:GPxCON用于选择引脚功能,GPxDAT用于读/写引脚数据;另外GPxUP用于确定是否使用内部上拉电阻。x为A、B、…、J。

3.2 GPxCON寄存器

用于配置选择引脚的功能。PORT A与PORT B ~ PORT J在功能选择方便有所不同,GPACON中每一位对应一根引脚(共23根引脚)。当某位被设置为0时,相应引脚为输出引脚,此时可以在GPADAT中相应位写入0或1让此引脚输出低电平或高电平;当某位被设为1时,相应引脚为地址线或用于地址控制,此时GPADAT无用。一般情况下,GPACON被设为全1,以便访问外部存储器件。
PORT B ~ PORT J在寄存器操作方便完全相同。GPxCON中每两位控制一根引脚:00表示输入、01表示输出、10表示特殊功能、11保留不用。

3.3 GPxDAT寄存器

GPxDAT用于读/写引脚:当引脚被设置为输入时,读此寄存器可知相应引脚的电平状态是高还是低;当引脚被设为输出时,写此寄存器相应位可令此引脚输出高电平或低电平。

3.4 GPxUP寄存器

GPxUP某位为1时,相应引脚无内部上拉电阻;为0时,相应引脚使用内部上拉电阻。上拉电阻、下拉电阻的作用在于,当GPIO引脚处于第三态时,它的电平状态是由上拉电阻、下拉电阻确定。

4、代码概述

Led.h主要是定义一些LED相关的宏,提高程序的通用性和易读性。

#define LED0_OUT  (1<<(10))
#define LED1_OUT  (1<<(12))
#define LED2_OUT  (1<<(16))
#define LED3_OUT  (1<<(20))

#define LED0_MSK  (3<<(10))
#define LED1_MSK  (3<<(12))
#define LED2_MSK  (3<<(16))
#define LED3_MSK  (3<<(20))


#define  LED0_ON GPBDAT &= ~(1<<5)
#define  LED1_ON GPBDAT &= ~(1<<6)
#define  LED2_ON GPBDAT &= ~(1<<8)
#define  LED3_ON GPBDAT &= ~(1<<10)


#define  LED0_OFF GPBDAT |= 1<<5 
#define  LED1_OFF GPBDAT |= 1<<6 
#define  LED2_OFF GPBDAT |= 1<<8 
#define  LED3_OFF GPBDAT |= 1<<10 

kkkLed.c设置相关的LED的IO引脚为输出,并将相关LED0关闭。

void led_GPIO_Init(void)
{
	//LED0到LED3对应的引脚设置成输出
	GPBCON &= ~(LED0_MSK | LED1_MSK | LED2_MSK | LED3_MSK);
	
	GPBCON |=  (LED0_OUT | LED1_OUT | LED2_OUT | LED3_OUT);

	LED0_OFF;
	LED1_OFF;
	LED2_OFF;
	LED3_OFF;
	
	return ;
}

Key.h定义来一些按键相关宏

#define S2_OUT  (1<<(0))
#define S3_OUT  (1<<(4))
#define S4_OUT  (1<<(6))
#define S5_OUT  (1<<(8))

#define S2_MSK  (3<<(0))
#define S3_MSK  (3<<(4))
#define S4_MSK  (3<<(6))
#define S5_MSK  (3<<(8))

Key.c设置相关按键的引脚为输入

void key_GPIO_Init(void)
{
	//S2到S5对应的引脚设置成输入
	GPBCON &= ~(S2_MSK | S3_MSK | S4_MSK | S5_MSK);
	GPBCON |=  (S2_OUT | S3_OUT | S4_OUT | S5_OUT);
	
	return ;
}

main.c初始化led以及按键的IO引脚,并实时检测按键是否按下,若没按下按键,则关闭相应LED灯;若按键按下,则点亮相应的LED灯。

int __main()
{
	unsigned int dwDate = 0;
	
	led_GPIO_Init();
	key_GPIO_Init();
	while (1)
	{
		dwDate = GPFDAT;
		
		if ( dwDate&(1<<0))//S2没有按下
		{
			LED0_OFF;
		}
		else 
		{
			LED0_ON;
		}
		if ( dwDate&(1<<2))//S3没有按下
		{
			LED1_OFF;
		}
		else 
		{
			LED1_ON;
		}	
		
		if ( dwDate&(1<<3))//S3没有按下
		{
			LED2_OFF;
		}
		else 
		{
			LED2_ON;
		}
		if ( dwDate&(1<<4))//S4没有按下
		{
			LED3_OFF;
		}
		else 
		{
			LED3_ON;
		}			
	}
}

5、代码下载

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

S3C2440裸机按键控制小灯 的相关文章

  • 3.24遇到恶心bug*1

    remain span class token operator 61 span np span class token punctuation span zeros span class token punctuation span sp
  • 电脑连WIFI网速慢,手机却很快

    问题 xff1a 在同一个位置 xff0c 电脑连上wifi速度特别慢 xff0c 手机连wifi速度却很快 把电脑搬到路由器附近发现电脑的速度也很快了 xff0c 说明之前是因为电脑接收信号有问题 怎么解决呢 xff1f 我的一种解决方法
  • mac日历显示国家节假日及补班日期

    mac日历显示国家节假日及补班日期 先上效果图订阅链接订阅方法 先上效果图 系统日历页面简洁 而且目前支持节假日 农历显示 只是少了放假与补班的标识 为了区分节假日与补班的颜色 整了两个ics文件 所以得订阅两个链接 如果你不想区分颜色就把
  • 【QT】error: LNK1104: 无法打开文件“release\xxxxx.exe”报错解决方案

    一 问题重述 出现这种报错一般是程序运行之后存在空指针问题 xff0c 然后直接崩溃掉 xff0c 下一次调试的时候就出现这种报错 如下图所示 xff1a 二 原因分析 出现这种情况是因为上次运行之后 xff0c 程序的exe文件异常退出了
  • linux下编译clang, libc++, libc++abi,以及第二遍自举编译

    最新的mint16 xff0c 附带gcc4 8 1 第一步 xff1a 用gcc编译clang 1 下载llvm 43 clang最新版本 具体见http clang llvm org get started html 2 mkdir b
  • 安卓获取手机唯一设备号

    感谢该作者提供的方法 http blog csdn net langzi7758521 article details 52575724 之前项目都是获取imei码 xff0c 遇到的麻烦就是要权限或者某些机器 xff0c 返回垃圾数据 现
  • ubuntu系统下载地址

    ubuntu官方下载地址 http releases ubuntu com ubuntu国内常用地址 xff1a http mirrors ustc edu cn ubuntu releases Windows官方下载地址 https ww
  • 学习笔记必备软件:OneNote+ Mindmaster完美搭配使用

    做笔记有两个关键点 xff1a 一是笔记内容详略得当 二是知识的框架清晰完整 为什么这样说 xff1f 举个例子 xff0c 如图是我的笔记界面 xff0c 用的是免费的OneNote xff0c OneNote是微软出的笔记软件 xff0
  • 高中生的高效学习法之“纵横术”

    考试的时候 xff0c 你或许遇经常遇到这种情况 xff1a 面对考试题 xff0c 你冥思苦想这个题是哪一章的知识点 xff0c 到底想要考什么 xff1f 或许你知道这个题考的是什么 xff0c 但是由于你对这部分知识掌握不牢而导致还是
  • 学习必备软件:OneNote+Mindmaster完美结合(精彩内容持续更新中…….)

    一 为什么做笔记 xff1f 做笔记应该注意哪些方面 xff1f 1 为什么做笔记 xff1f 做笔记的意义体现在以下几个方面 xff1a xff08 1 xff09 抵抗忘记 根据艾宾浩斯遗忘曲线 xff0c 前一天记住的信息 xff0c
  • 关于数学建模(或科研论文)的画图学习建议

    对于数学建模画图来说 xff0c PPT xff0c visio matlab就够用了 xff0c 其他根据特点备选 首先搞清楚 xff0c 我们需要画的图主要分为两种 xff1a 一是 示意图 xff0c 主要是用于表达思路 xff0c
  • Linux 网桥配置br-lan、eth0、eth1、ra0、rai0

    Linux网关模式下将有线LAN和无线LAN共享网段实现局域网内互联 思路其实很简单 xff1a 就是将虚拟出一个bridge口 xff0c 将对应的有线LAN和无线LAN都绑定在这个虚拟bridge口上 xff0c 并给这个bridge口

随机推荐

  • 用java -jar 命令执行架包时出现了Invalid or corrupt jarfile xxxx.jar

    将一个 java文件打包 jar后 xff0c 需要在META INF目录下的MANIFEST ME中添加Main Class选项 使用命令java jar xxxx jar后出现了Invalid or corrupt jarfile xx
  • 如何用Stata完成(shui)一篇经济学论文(三):基本命令

    目录 变量的生成 gen与egen区别 xff09 变量的删除变量的更改 在开始正式学习前 xff0c 有一个小建议 xff0c 希望大家养成在do file里写代码的习惯 xff0c 主要是方便保存已经写过的代码 xff0c 因为Stat
  • 阿里云服务器ECS入门题库

    Apsara Clouder云计算专项技能认证 xff1a 云服务器ECS入门题库 题库一多选题题库二多选题题库三多选题 保证及格 xff0c 不保证100分 xff01 xff01 xff01 保证及格 xff0c 不保证100分 xff
  • mysql 设置大小写不敏感

    一 原理与参数 mysql大小写敏感配置与两个参数相关 lower case file system 和 lower case table names 查看当前mysql的大小写敏感配置 show global variables like
  • mysql字符集查看与设置

    一 查看 MySQL 字符集 以下命令 Windows amp Linux通用 1 服务器和数据库 mysql gt show variables like 39 char 39 43 43 43 Variable name Value 4
  • WindTerm使用(暂停更新)

    作为一个经常和代码以及服务器打交道的人 xff0c 连接远程服务器所使用的工具肯定是越方便越好 目前 xff0c 我使用的是xshell5和MobaXterm两个 Xshell最新的是7 xff0c 破解版的我懒得去找 xff0c 那xsh
  • 彻底解决[未识别的网络][公共网络]的问题

    未识别的网络 导致网络变成 未知网络 或 公共网络 会造成一系列问题 比如防火墙的一些端口会挡在公共之外 等等 不细说 那么要如何把 未知网络 公用网络 怎么改变为 家庭 和 工作网络 网络的回答比如 百度问题上的回答都是无脑的回答 不可能
  • centos7安装Docker详细步骤(无坑版教程)

    一 安装前必读 在安装 Docker 之前 xff0c 先说一下配置 xff0c 我这里是Centos7 Linux 内核 xff1a 官方建议 3 10 以上 xff0c 3 8以上貌似也可 注意 xff1a 本文的命令使用的是 root
  • windows通过xrdp实现远程ubuntu

    首先声明 xff1a 我使用的是root用户 xff0c 所以无视权限问题 第一步 安装vncserver wget http www c nergy be downloads tigervncserver 1 6 80 4 amd64 z
  • 【Vue2+Vue3】开发指令使用总结,未完待续

    目录 一 watch监听及深度监听 二 directive自定义指令详解 43 实例 三 1 vue父子组件 xff1a 数据双向绑定 一 数据双向绑定 sync xff08 支持多个双向绑定值 xff09 三 2 父子组件间方法的调用 1
  • 南京大学数字电路与计算机组成实验的Verilator仿真(二)

    实验二 1 2 4译码器 top v module span class token function decode24 span span class token punctuation span x span class token p
  • firefox 的cookie 存放在哪里?

    在地址栏输入about surpport 打开配置页 找到about profiles 点击打开 看到有两个目录项 看准正在使用的那一个 34 正在使用此配置文件 34 找到cookie sqlite 的位置 正在使用的那个配置是删不掉的
  • C++ 构造函数和New运算符

    算法和数据结构就是编程的一个重要部分 xff0c 你若失掉了算法和数据结构 xff0c 你就把一切都失掉了 系统会自动在栈中为每个变量开辟内存空间 xff0c 以保证数值被合理地存放 由于栈是系统自动分配的 xff0c 因此速度较快 xff
  • matlab函数interp2及其c++代码

    最近将一个matlab程序转为c 途中遇到interp2这个家伙 我是左查右查 发现网上没有人总结这个玩意 于是我来初探一下 还是别有洞天的 嘿嘿 1 关于interp2 nbsp nbsp Vq interp2 X Y V Xq Yq l
  • CentOS 7中利用Snapper快照进行系统备份与恢复

    为什么要使用Snapper快照 xff1f 我们可以想像以下场景 xff1a 1 场景一 xff1a 系统发生意外宕机 xff0c 工程师无法快速定位问题 xff0c 业务受到中断 xff0c 客户十分不满意 2 场景二 xff1a 项目会
  • 计蒜之道 作弊揭发者(测试赛)

    鉴于我市拥堵的交通状况 xff0c 市政交管部门经过听证决定在道路两侧安置自动停车收费系统 当车辆驶入车位 xff0c 系统会通过配有的摄像头拍摄车辆画面 xff0c 通过识别车牌上的数字 字母序列识别车牌 xff0c 通过连接车管所车辆信
  • 7-10 兔子繁衍问题

    7 10 兔子繁衍问题 xff08 15 分 xff09 一对兔子 xff0c 从出生后第3个月起每个月都生一对兔子 小兔子长到第3个月后每个月又生一对兔子 假如兔子都不死 xff0c 请问第1个月出生的一对兔子 xff0c 至少需要繁衍到
  • Ubuntu运行tkinter程序的部署

    软件部署 xff08 Ubuntu系统 xff09 1 安装python环境 前提需要有网 ubuntu会自带python xff0c 不用单独安装 xff0c 但python的pip工具和tkinter包需要安装 xff08 1 xff0
  • Linux-用shell脚本写一个进度条

    shell执行脚本 xff1a 创建一个 sh文件 xff0c 编辑文件即可执行脚本 Shell脚本中用 表示注释 xff0c 相当于c语言的 注释 但如果 位于第一行开头 xff0c 并且是则例外 xff0c 它表示该脚本使用后面指定的解
  • S3C2440裸机按键控制小灯

    1 环境 1 操作系统 xff1a win7 64位 2 集成开发环境 xff1a keil4 7 3 开发板 xff1a FL2440 4 下载器 xff1a Jlink V9 2 按键以及LED灯原理图 根据FL2440开发板原理图可知