AVR开发 Arduino方法(一) 端口子系统
Arduino UNO R3使用的主处理器ATMega328P上有3个8位的输入/输出端口,它们分别是PB,PC和PD。Arduino IDE提供的Blink示例可以帮助我们了解端口的数字输出功能:
;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH);
delay();
digitalWrite(led, LOW);
delay();
}
这个示例使Arduino 13(PB5)引脚上的LED闪烁。与数字输出相关的Arduino库函数有:
pinMode(pin, mode):配置指定引脚为输入或输出
pin:指定引脚
mode:OUTPUT(输出),INPUT(输入)或INPUT_PULLUP(带上拉电阻的输入)
digitalWrite(pin, value):从指定引脚输出电平
pin:指定引脚
value:LOW(低电平,0V),HIGH(高电平,5V)
ATMega328P的每个端口都由3个相关寄存器控制,方向寄存器DDRx(x = B, C, D)用于指定端口引脚方向,若向其中某位写入1,则该位控制的引脚被设置为输出,写入0则为输入。输出寄存器PORTx(x = B, C, D)在该端口引脚被设置为输出时,写入1则输出高电平,写入0则输出低电平;在该端口引脚被设置为输入时,写入1则对其启用上拉电阻,即在该端口引脚被悬空时默认输入高电平。输入寄存器PINx(x = B, C, D)在端口引脚被设置为输入时存储该端口引脚的输入,若端口引脚输入高电平,则寄存器相应位被置为1,输入低电平则置为0。
通过直接访问寄存器改写以上程序:
void setup() {
DDRB |= ( << PB5);
}
void loop() {
PORTB ^= ( << PB5);
delay();
}
向电路中添加一个按键,让它的两端分别连接在Arduino 2(PD2)引脚和GND(地)引脚上(如下所示)。

这样使得按键在没有按下时2(PD2)引脚处于悬空状态,因此需要将2(PD2)引脚设置为带上拉电阻的输入模式:
;
;
;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}
}
除了pinMode()函数外,与数字输入相关的Arduino库函数有:
digitalRead(pin):从指定引脚上读取电平
pin:指定引脚
函数返回LOW(低电平,0V)或HIGH(高电平,5V)
通过直接访问寄存器改写以上程序:
void setup() {
DDRB |= ( << PB5);
DDRD &= ~( << PD2);
PORTD |= ( << PD2);
}
void loop() {
<< PD2)) {
PORTB |= ( << PB5);
} else {
PORTB &= ~( << PB5);
}
}
AVR开发 Arduino方法(一) 端口子系统的更多相关文章
- 《SpringMVC从入门到放肆》十一、SpringMVC注解式开发处理器方法返回值
上两篇我们对处理器方法的参数进行了分别讲解,今天来学习处理器方法的返回值. 一.返回ModelAndView 若处理器方法处理完后,需要跳转到其它资源,且又要在跳转资源之间传递数据,此时处理器方法返回 ...
- 使用mybatis开发dao方法
使用mybatis开发dao的时候, 主要涉及到SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession 这三个类 现在将这三个类的使用方法简单的说下 ...
- 使用Visual Studio Code开发Arduino
首发于MSPrecious成长荟 https://zhuanlan.zhihu.com/p/30868224 使用Visual Studio Code开发Arduino 1.下载安装 VS Code ...
- 使用VisualStudio 开发Arduino
Arduino IDE界面简洁,整体功能还算完善,相比其他编译器明显的不足就是不能进行硬件调试,再就是没有代码提示功能,文件关系不清晰.头文件打开不方便. VisualStudio作为时下最为流行的W ...
- 解决用vscode开发arduino时Serial未定义
在工作目录编辑c_cpp_properties.json文件 添加defines字段 { "configurations": [ { "name": " ...
- Arduino当avr开发板
原理并不复杂,因为arduino本来就是avr+一堆的库,找个能编译出hex的工具下载到板子就行. 但实际做起来还是碰到很多问题. 先是尝试eclipse+avr plugin 编译时出现make: ...
- 解析-ESP01模块开发Arduino物联网wifi开关模块
本文将解析<完美图解物联网Iot实操 ESP8266>中 第五章 P177页 动手做的代码2(使用SPIFFS文件系统的代码) 首先我们先动手使用Arduino IDE编译并且上传代码,上 ...
- [转]Android通过NDK调用JNI,使用opencv做本地c++代码开发配置方法
原文地址:http://blog.csdn.net/watkinsong/article/details/9849973 有一种方式不需要自己配置所有的Sun JDK, Android SDK以及ND ...
- T4 模板 : 一种提升ASP.NET MVC开发速度方法
最近由于需要在框架中提供一些自定义模板的功能,找到了一篇博客,可惜似乎是翻译工具直接翻的,读不通顺,就试着自己翻译下,我不会完全翻译原文的句子,可能会对原文进行小范围的我认为更合适的句子并添加些注释, ...
随机推荐
- [css 实践篇] CSS box-orient
定义和用法 box-orient 属性规定框的子元素应该被水平或垂直排列. 提示:水平框中的子元素从左向右进行显示,而垂直框的子元素从上向下进行显示.不过,box-direction 和 box-or ...
- Lucence
Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引 ...
- v9.5.2上传缩略图/附件提示“undefined”
把phpcms\modules\attachment\attachments.php中将 if(empty($this->userid)){改成 ...
- 选课 树形DP+多叉树转二叉树+dfs求解答案
问题 A: 选课 时间限制: 1 Sec 内存限制: 128 MB 题目描述 大 学里实行学分.每门课程都有一定的学分,学生只要选修了这门课并考核通过就能获得相应的学分.学生最后的学分是他选修的各门 ...
- Kafka官方文档翻译——简介
简介 Kafka擅长于做什么? 它被用于两大类应用: 在应用间构建实时的数据流通道 构建传输或处理数据流的实时流式应用 几个概念: Kafka以集群模式运行在1或多台服务器上 Kafka以topics ...
- uwp版的音乐播放器练手
UWP项目之音乐播放器 这个项目本来是我女朋友的一个小作业,她做不出来,结果只能是我来代劳.经过几天的时间虽然赶出来了,但是自己不是很满意,还有很多不满意的地方,因此决定在最近的一段时间内,重新完成. ...
- centos yum 没有可用软件包 nginx。
新装的centos7中没有nginx的镜像源 因为nginx位于第三方的yum源里面,而不在centos官方yum源里面 解决方案: 安装epel: 去epel官网: http://fedorapro ...
- Android 4.0以后正确的获取外部sd卡存储目录
刚解决这个棘手的问题 找了很久,随笔记下. 网上搜索 android 获取外部sd卡存储目录 普遍都是: 1) Environment.getExternalStorageDirectory() 这个 ...
- 【LeetCode】205. Isomorphic Strings
题目: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the c ...
- (转)Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
原文地址:http://blog.csdn.net/kenthong/article/details/5758884 Part I 没啥好说的,直接开始Part II吧. Part II 谈到了对象的 ...