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方法(一) 端口子系统的更多相关文章

  1. 《SpringMVC从入门到放肆》十一、SpringMVC注解式开发处理器方法返回值

    上两篇我们对处理器方法的参数进行了分别讲解,今天来学习处理器方法的返回值. 一.返回ModelAndView 若处理器方法处理完后,需要跳转到其它资源,且又要在跳转资源之间传递数据,此时处理器方法返回 ...

  2. 使用mybatis开发dao方法

    使用mybatis开发dao的时候, 主要涉及到SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession 这三个类 现在将这三个类的使用方法简单的说下 ...

  3. 使用Visual Studio Code开发Arduino

    首发于MSPrecious成长荟 https://zhuanlan.zhihu.com/p/30868224 使用Visual Studio Code开发Arduino 1.下载安装 VS Code ...

  4. 使用VisualStudio 开发Arduino

    Arduino IDE界面简洁,整体功能还算完善,相比其他编译器明显的不足就是不能进行硬件调试,再就是没有代码提示功能,文件关系不清晰.头文件打开不方便. VisualStudio作为时下最为流行的W ...

  5. 解决用vscode开发arduino时Serial未定义

    在工作目录编辑c_cpp_properties.json文件 添加defines字段 { "configurations": [ { "name": " ...

  6. Arduino当avr开发板

    原理并不复杂,因为arduino本来就是avr+一堆的库,找个能编译出hex的工具下载到板子就行. 但实际做起来还是碰到很多问题. 先是尝试eclipse+avr plugin 编译时出现make: ...

  7. 解析-ESP01模块开发Arduino物联网wifi开关模块

    本文将解析<完美图解物联网Iot实操 ESP8266>中 第五章 P177页 动手做的代码2(使用SPIFFS文件系统的代码) 首先我们先动手使用Arduino IDE编译并且上传代码,上 ...

  8. [转]Android通过NDK调用JNI,使用opencv做本地c++代码开发配置方法

    原文地址:http://blog.csdn.net/watkinsong/article/details/9849973 有一种方式不需要自己配置所有的Sun JDK, Android SDK以及ND ...

  9. T4 模板 : 一种提升ASP.NET MVC开发速度方法

    最近由于需要在框架中提供一些自定义模板的功能,找到了一篇博客,可惜似乎是翻译工具直接翻的,读不通顺,就试着自己翻译下,我不会完全翻译原文的句子,可能会对原文进行小范围的我认为更合适的句子并添加些注释, ...

随机推荐

  1. VMWare、KVM、Virtualbox克隆或复制Linux虚拟机后eth0找不到的解决方案

    快速处理办法: cat /etc/sysconfig/network-scripts/ifcfg-eth0 sed -i '/UUID/d' /etc/sysconfig/network-script ...

  2. SyntaxError: Unexpected token < in JSON at position 0 错误

    当你使用AJAX时有设定dataType : 'json' 所以在接回传值的时候会以json格式来解析但回传的资料非json格式就会出现这个错误讯息

  3. 探索Windows命令行系列(5):几个实用的命令例解

    1.关机命令(shutdown) 2.管理 Windows 服务(sc) 3.管理任务进程(tasklist.taskkill) 4.显示 TCP/IP 配置值(ipconfig) 5.网络诊断工具( ...

  4. cisco模拟器之------交换机、路由器、vlan的综合实例

    主要实现功能:a)位于路由器同一侧的不同网段的主机之间实现通信. b)  位于不同路由器的主机之间实现通信. 网络拓扑图: 命令配置: switch0的配置: Switch(config)#vlan ...

  5. android studio 怎么将项目打包成apk文件

    1.Build -> Generate Signed APK...,打开如下窗口 2.假设这里没有打过apk包,点击Create new,窗口如下 这里只要输入几个必要项 Key store p ...

  6. Java 获取字符串Hash值

    Java 生成字符串的Hash值: /** * A hashing method that changes a string (like a URL) into a hash suitable for ...

  7. Java添加JDBC

    添加JDBC 1.SQL Server SQL Server2005 下载 sqljdbc_4.0 https://www.microsoft.com/en-us/download/details.a ...

  8. Android高仿qq及微信底部菜单的几种实现方式

    最近项目没那么忙,想着开发app的话,有很多都是重复,既然是重复的,那就没有必要每次都去写,所以就想着写一个app通用的基本框架,这里说的框架不是什么MVC,MVP,MVVM这种,而是app开发的通用 ...

  9. pyparsing:定制自己的解析器

    在工作中,经常需要解析不同类型的文件,常用的可能就是正则表达式了,简单点的,可能会使用awk.这里要推荐一种比较小众的方式,使用pyparsing来解析文件. pyparsing可以做些什么呢?主要可 ...

  10. 基于Spring MVC 实现拦截器

    Spring MVC 拦截器 一,具体内容: 在所有的开发之中拦截器属于一个重要的组件,可以说几乎所有的项目都会提供的概念应用,不管是Spring MVC,还是Struts 2.x都是提供有拦截器的, ...