说实话刚听到单片机这三个字时是真的一知半解,看到板子上特别多的引脚就觉得很高级,而接下来说的就是我刚接触单片机和C时有的疑惑。

(一)输入和输出

刚开始学C我们都会学习一段代码“Hello,World!”,并学习到C的基本格式:

#include<stdio.h>
mian(){
    printf("Hello,world!");
    return 0;
}

其中“stdio”即“standard input & output”的缩写,中文译为“标准输入输出”,标准好理解,即写代码中大部分函数的依据就来自这个头文件,因此是写C的标准文件,而输入和输出的区别就是数据的移动方向,就像“printf()”和“scanf()”,前者是计算机运行后输出数据,后者是我们向计算机输入数据。

(二)带“~”的数字引脚

这个带“~”的数字引脚说实话其实就是我二次深入理解输入输出的一个契机,而这也会引入一个概念“PWM”即“Pulse-width modulation”的缩写,听上去超级高大上是吧,但其实是很好理解的。

这是一个比较常见的UNO板,可以看到两侧的数字引脚上有的带有“~”,这意味着我们在可以给此串口赋值。请看下面这段代码:

int ledPin = 3;
int button =9;

void setup()
{
    pinMode(ledPin, OUTPUT);//将引脚3的灯设为输出
    pinMode(button, INPUT);//将引脚9的按钮设为输入
}

void loop()
{
    int valueA = anologRead(button);//读取引脚9的PWM值
    analogWrite(ledPin, valueA);//给引脚3的电压赋值
}

其中的“anologWrite()”和“anologRead()”其实与“digitalWrite()”和“digitalRead()”很像。前者是将引脚串口的电压按比例形式转化成取值为【0,255】的PWM值(将模拟信号电平进行数字编码),再对此处的串口进行赋值/读取;后者是对引脚串口的电压状态进行赋值/读取。因此前者的数据是数字,而后者的数据是HIGH/LOW两种状态,即5V/0V。接下来我们将上段代码改为下端代码:

int ledPin = 3;
int button =9;

void setup()
{
    pinMode(ledPin, OUTPUT);//将引脚3的灯设为输出
    pinMode(button, INPUT);//将引脚9的按钮设为输入
}

void loop()
{
    int valueB = digitalRead(button);//读取引脚9的电压状态
    digitalWrite(ledPin, valueB);//给引脚3的电压状态赋值
}

这两段代码的意思其实是一样的,两段代码的区别就是valueA = 255(或者是0),valueB = HIGH(或者是LOW)。而带“~”的数字引脚就是用于区分,说明该数字引脚具有PWM功能。由于进行了数字编码,将【0,5】细分成【0,255】,因此我们可以更加精准地控制串口电压,这个过程可以感觉到PWM实在是强大。

其实PWM技术在很多领域广泛应用,其功能强大,给广大工程师在许多设计应用中提供了巨大的便利。
以上就是我初接触单片机有的一些浅薄看法,若有不足之处还请多多见谅……

Last modified: 2020年2月12日

Author

Comments

Write a Reply or Comment