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开发速度方法
		最近由于需要在框架中提供一些自定义模板的功能,找到了一篇博客,可惜似乎是翻译工具直接翻的,读不通顺,就试着自己翻译下,我不会完全翻译原文的句子,可能会对原文进行小范围的我认为更合适的句子并添加些注释, ... 
随机推荐
- PHPCMS V9表单向导调用及分页
			参考资料如下:v9_form_tlj为你的表单数据表,`flqh`,`title`,`sj`,`username`,`datetime` 为你表单内的字段,page="$_GET" ... 
- ue4加载界面(loadingscreen)的实现
			即使开放世界已然成为现今游戏趋势,切换关卡过程中的读条仍是很难避免的,譬如进入房屋.传送到其他世界等等. 于是就引入了loadingscreen这一需求. loadingscreen顾名思义就是加载过 ... 
- javascript四舍五入tofixed
			//toFixed() 方法可把 Number 四舍五入为指定小数位数的数字. $("#renjunlirun").val(zongLiRun.toFixed(2));//金额 
- IE11中navigator.userAgent的变化
			在原来判断浏览器是否是ie时,我们可以根据navigator.userAgent中时候有MSIE,但是IE11进行变革,userAgent中不在包含MSIE字段, 在实际项目中,入到类似的在控制台报错 ... 
- 实现自己的.NET Core配置Provider之Yaml
			YAML是一种更适合人阅读的文件格式,很多大型的项目像Ruby on Rails都选择YAML作为配置文件的格式.如果项目的配置很少,用JSON或YAML没有多大差别.看看rails项目中的配置文件, ... 
- web.xml is missing and <failOnMissingWebXml> is se
			摘要 maven模块化 在学习maven模块化构建项目的时候遇到了如下报错信息: web.xml is missing and <failOnMissingWebXml> is set t ... 
- POJ 2289 Jamie's Contact Groups / UVA 1345 Jamie's Contact Groups / ZOJ 2399 Jamie's Contact Groups / HDU 1699 Jamie's Contact Groups / SCU 1996 Jamie's Contact Groups (二分,二分图匹配)
			POJ 2289 Jamie's Contact Groups / UVA 1345 Jamie's Contact Groups / ZOJ 2399 Jamie's Contact Groups ... 
- C#常用8种排序算法实现以及原理简介
			public static class SortExtention { #region 冒泡排序 /* * 已知一组无序数据a[1].a[2].--a[n],需将其按升序排列.首先比较a[1]与a[2 ... 
- Easyui+MVC+FullCalendar插件实现日程记录功能
			好久好久好久,,,没有写博客了,,久到账号都忘记了....分享一个干货.... 废话少说,先看看效果图. 要实现这样一个功能,先创建一个用于存储日程的记录表(不要问我为什么都是大写,因为初版在orac ... 
- Java工程师的终极书单
			本份Java工程师的终极书单只在专业的Java技术博客–天天编码上发布,没有授权任何网站与个人转载. 坚持阅读好书是学习Java技术的好方式.但是,市面上与Java技术相关的书籍可谓数不胜数,如何从这 ... 
