I/O端口原理
I/O英文全称是 Input/Output,即输入/输出。单片机端口是标准双向口,就是说,单片机的端口既可以作为输出信号端(如控制灯亮灭、继电器吸合释放、喇叭发声等),也可以作为输入信号端(如按键信号输入、红外形输入、开关信号输入等)
单片机知识点补充
Arduino UNO R3: 引脚图 实物图
高低电平:一般来说+5V为电平1,接地为0.
LED:LED的长引脚是正极,LED内部电极体积小的正极。
面包板:从原理图可以看到,面包板上下区是横向5位相通,一般用于接电源和接地,中间区域是纵向5位相通,通常用于放置电路元件和电路连接线。(面包板的核心组件是内部的金属弹性卡槽)
特别注意当我们使用单片机进行连接电路时,首先要设计好电路,如LED灯的电流大小要通过加电阻进行控制。(由VCC接到GND接法LED灯称之为拉电流;由VCC接到VCC接法称之为灌电流)
灌电流连接方式称为:共阳连接(led的阳极连接在一起) 拉电流连接方法称为:共阴连接(led的阴极连接在一起) 开关两种状态(开/闭)与电位器(可调电阻)将他们的状态是如何传送给arduino的呢?利用的是digitalRead()和analogRead()两种函数,也就是读取数字量和读取模拟量。
实战1——闪烁LED指示灯
法一:利用CPU独立工作
int LED = 13;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
法二:CPU与定时器一起工作(即不使用延时函数的led闪烁程序)
const int ledPin = 13;
int ledState = LOW;
long previousMillis = 0;
long interval = 1000;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop()
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState);
}
}
实战2——LED简易流水灯
程序思路如下: 首先熄灭所有LED,然后点亮第一个,等待200ms熄灭第一个,然后点亮第二个,等待200ms,熄灭第二个然后…
const int ledCount = 6;
int ledPins[] = {
0,1,2, 3, 4, 5, };
void setup() {
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
pinMode(ledPins[thisLed], OUTPUT);
}
}
void loop() {
for (int num = 0; num < 6; num++) {
digitalWrite(ledPins[num], HIGH);
}
for (int num = 0; num < 6; num++) {
digitalWrite(ledPins[num], LOW);
delay(200);
digitalWrite(ledPins[num], HIGH);
}
}
|