arm裸机(1)、点灯|按键

芯片是S3C2440

首先看原理图,led_1234分别对应引脚GPB 5678

设置引脚为输出

向寄存器相应位写入

#define GPBCON (*(volatile unsigned long *)0x56000010)           //p5 6 7 8
void led_init(void)
{GPBCON &= ~(0x3 << 10);GPBCON |=  (0x1 << 10);GPBCON &= ~(0x3 << 12);GPBCON |=  (0x1 << 12);GPBCON &= ~(0x3 << 14);GPBCON |=  (0x1 << 14);GPBCON &= ~(0x3 << 16);GPBCON |=  (0x1 << 16);}

查看手册描述

大意为我们在相应引脚赋1就是高电平,0就是低电平。学过51单片机的同学应该很熟悉。只不过这里用了寄存器。

void led_off(int led_num)
{led_num += 5;GPBDAT |= (0x1 << led_num);
}led_on(int led_num)
{led_num += 5;GPBDAT &= ~(0x1 << led_num);
}

按键也是同理

#define GPBCON (*(volatile unsigned long *)0x56000010UL)           //p5 6 7 8
#define GPBDAT (*(volatile unsigned long *)0x56000014UL)#define GPGCON (*(volatile unsigned long *)0x56000060UL)
#define GPGDAT (*(volatile unsigned long *)0x56000064UL)void c_deal_swi(int num)
{switch (num){case 5/* constant-expression */:/* code */break;default:break;}
}//微秒级的延时
void delay_us(unsigned int delay_us)
{volatile unsigned int num;volatile unsigned int t;for (num = 0; num < delay_us; num++){t = 11;while (t != 0){t--;}}
}void led_init(void)
{GPBCON &= ~(0x3 << 10);GPBCON |=  (0x1 << 10);GPBCON &= ~(0x3 << 12);GPBCON |=  (0x1 << 12);GPBCON &= ~(0x3 << 14);GPBCON |=  (0x1 << 14);GPBCON &= ~(0x3 << 16);GPBCON |=  (0x1 << 16);GPBDAT |= (0x1 << 5);   //初始设置灯灭GPBDAT |= (0x1 << 6);GPBDAT |= (0x1 << 7);GPBDAT |= (0x1 << 8);
}void led_off(int led_num)
{led_num += 5;GPBDAT |= (0x1 << led_num);
}led_on(int led_num)
{led_num += 5;GPBDAT &= ~(0x1 << led_num);
}void led_start(void)
{int i = 0;for(i = 0; i < 4; ++i){led_on(i);delay_us(1000);}for(i = 0; i < 4; ++i){led_off(i);delay_us(1000);}}void key_init(void) //k0\k1    g5  g3
{GPGCON &= ~(0x3 << 5);GPGCON &= ~(0x1 << 5);GPGCON &= ~(0x3 << 3);GPGCON &= ~(0x1 << 3);
}int key_find(int key_num)
{if(key_num == 1){if((GPGDAT & ~(0x1 << 5)) == GPGDAT){return 1;}return 0;        }else if(key_num == 2){if((GPGDAT & ~(0x1 << 3)) == GPGDAT){return 1;}return 0;        }}int main(void)
{int flag;if(key_find(1)){flag = 1;            }else if(key_find(2)){flag = 0;    }if(flag == 1){	led_on(1);	}else if(flag == 0){led_off(1);	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/589615.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode-19. 删除链表的倒数第 N 个结点【链表 双指针】

LeetCode-19. 删除链表的倒数第 N 个结点【链表 双指针】 题目描述&#xff1a;解题思路一&#xff1a;双指针解题思路二&#xff1a;优化解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。…

MTU/TCPMSS/VLAN/ACCESS/TRUNK/HYBRID

MTU RFC标准定义以太网的默认MTU值为1500 最小64字节是为了保证最极端的冲突能被检测到&#xff0c;64字节是能被检测到的最小值&#xff1b;最大不超过1518字节是为了防止过长的帧传输时间过长而占用共享链路太长时间导致其他业务阻塞。所以规定以太网帧大小为64~1518字节&am…

构建第一个JS应用(FA模型)

创建JS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。选择Application应用开发&#xff08;本文以应用开发为例&#xff0c;Atomic Service对…

Sy6 编辑器vi的应用(+shell脚本3例子)

实验环境&#xff1a; 宿主机为win11&#xff0c;网络&#xff1a;10.255.50.5 6389 WSL2 ubuntu 目标机的OS&#xff1a;Ubuntu 内核、版本如下&#xff1a; linuxpeggy0223:/$ uname -r 5.15.146.1-microsoft-standard-WSL2 linuxpeggy0223:/$ cat /proc/version Linux vers…

基于SSM的网络视频播放器

目录 背景 技术简介 系统简介 界面预览 背景 互联网的迅猛发展彻底转变了全球各类组织的管理策略。自20世纪90年代起&#xff0c;中国政府和企业便开始探索利用网络系统进行信息管理。然而&#xff0c;早期的网络覆盖不广泛、用户接受度不高、相关法律法规不完善以及技术开…

交流电压的峰峰值,有效值,均方根值,平均值,最大值,最小值和幅值

小鱼电路设计基础课程请点击--从零开始硬件电路设计元器件篇https://edu.csdn.net/course/detail/39260 常见的交流电压参数包括峰峰值&#xff0c;有效值&#xff0c;均方根值&#xff0c;平均值&#xff0c;最大值&#xff0c;最小值和幅值 今天以正负对称的正弦波电压和方…

C语言杂谈

努力扩大自己&#xff0c;以靠近&#xff0c;以触及自身以外的世界 文章目录 什么是定义&#xff1f;什么是声明&#xff1f;什么是赋值&#xff1f;什么是初始化&#xff1f;什么是生命周期&#xff1f;什么是作用域&#xff1f;全局变量&#xff1f;局部变量&#xff1f;size…

【C++进阶】AVL树(来自二叉搜索树的复仇)

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;c大冒险 总有光环在陨落&#xff0c;总有新星在闪烁 引言&#xff1a; 之前我们学…

从0配置React

在本地安装和配置React项目&#xff0c;您可以使用create-react-app这个官方推荐的脚手架工具。以下是安装React的步骤&#xff0c;包括安装Node.js、使用create-react-app创建React应用&#xff0c;以及启动开发服务器。 下载安装node.js运行以下命令&#xff0c;验证Node.js…

字符分类函数

字符分类函数 C语言中有⼀系列的函数是专门做字符分类的&#xff0c;也就是⼀个字符是属于什么类型的字符的。这些函数的使用都需要包含⼀个头文件是 ctype.h 这些函数的使用方法非常类似&#xff0c;我们就讲解⼀个函数的事情&#xff0c;其他的非常类似&#xff1a; int i…

用Vue仿了一个类似抖音的App

大家好&#xff0c;我是 Java陈序员。 今天&#xff0c;给大家介绍一个基于 Vue3 实现的高仿抖音开源项目。 关注微信公众号&#xff1a;【Java陈序员】&#xff0c;获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。 项目介绍 douyin —— 一个基于 Vue、Vite 实…

【软件工程】详细设计(二)

这里是详细设计文档的第二部分。前一部分点这里 4. 学生端模块详细设计 学生端模块主要由几个组件构成&#xff1a;学生登录界面&#xff0c;成绩查询界面等界面。因为学生端的功能相对来说比较单一&#xff0c;因此这里只给出两个最重要的功能。 图4.1 学生端模块流程图 4.…