简介

该教程利用单片机开发板学习 C 语言,这里的侧重点是 C 语言编程,因此我们会讲很多与编程相关的知识。

我们用这种“语言”控制单片机的行为,让它完成我们想要达到的目的。

一个最简单的例子

void main(void)
{
    while (1)
        ;
}

include 是干嘛用的

顾名思义,include 就是包含的意思。

插图

文件A的内容
文件B的内容

把两件文件结合在一起,组装成一个文件后再进行后面的处理。

C 文件的翻译过程

单片机的内部只识别 1 和 0 组合成的机器语言。

条件语句

数组

uint8_t array[4] = {1, 2, 3, 4};

for (i = 0; i < 4; i++)
{
    PORTC = array[i];
    _delay_ms(2000);
}

(1)

循环

for 循环

#include <avr/io.h>

void main(void)
{

    int i;

    for (i = 0; i < 5; i++) // 循环 5 次
    {
        PORTC = 0b00000001; // LED 亮
        _delay_ms(1000);
        PORTC = 0b00000000; // LED 灭
        _delay_ms(1000);
    }

    while (1)
    {
        // 这里面没有任何代码,什么都不干
    }
}

注意观察 LED 的闪烁,它会闪烁 5 次,然后熄灭,最后进入无尽的 while(1) 循环。按 Reset 键,单片机会被“重启”(我们这里叫做复位),程序又会 main 开始运行,因此 LED 又会闪 5 次,然后熄灭。你可以把 i < 5 改成别的数字,然后观察效果。

参考下面的网页

while 循环

怎样使用库函数

所谓的库,就是一些事先编写好的函数。这就好比我们要做一个单片机电路,需要用到电阻,LED,我们需要做的是直接从零件库里取出来用就可以了,而不必自己再去做一个电阻或是 LED,这样做的好处显而易见:节省大量的时间。你还可以把自己的程序做成库发布在网上给别人使用。

我们先来看一个例子,以便得到直观的感受:

C 语言提供了一套标准的库函数。

首先,要在程序里包含相应的头文件(即 .h 文件)

然后,查看库函数的使用方法,比如它需要什么样的参数,它运行完成后会返回一个什么样的值。

函数

把大的任务分成一个小的功能块。 怎样调用一个函数。调用之后再返回到此处。(加插图)

伪代码(不是真正的程序,但是可以把它翻译成真正的程序)

main:
    把 I/O 的方向设置成输出模式
循环:
    点亮 LED
    拖延时间,什么都不干
    关掉 LED
    拖延时间,什么都不干
    重复

变量

值会变的量。

用 LED 做实验。

算术运算

PORTC = 1 + 1;

观察 PORTC 上的 LED,因为 1 + 1 = 2,因此第二个 LED 会亮,因为数字 2 的二进制形式是 10.

PORTC = 5 - 1;

观察 PORTC 上的 LED,因为 5 - 1 = 4,因此第 3 个 LED 会亮,因为数字 4 的二进制形式是 100.

PORTC = 3 * 3;

观察 PORTC 上的 LED,因为 3 * 3 = 9,因此第 1 个和第 4 个 LED 会亮,因为数字 9 的二进制形式是 1001.

PORTC = 7 / 3;

观察 PORTC 上的 LED,因为 7 / 3 = 2.5,但在 C 语言里,整数和整数相除会舍去小数部分,因此 7 / 3 的结果是 2,因此第 2 个 LED 会亮,因为数字 2 的二进制形式是 10.

逻辑运算

位操作

移位

用实际例子来讲解。LED

按位与

按位与批的是,按对应的位之间执行与操作。 用 LED 举例子。

按位或