51单片机 学习之旅[1] 点亮第一个LED

来源:互联网 发布:淘宝个人卖家工商登记 编辑:程序博客网 时间:2024/05/17 08:55

教程资源

上面是网上 传的 ”十天艹单片机“的资源,我没去下,我是用买学习板子的时候送的光盘里面的视频和书来的,不过我猜应该是一样的

第一课。

目标: 点亮第一个 LED

过程:

1.教程里看了一轮的板子 有什么器件,什么功能(有部分没看懂是干嘛的,视频里也说是后续再说..基本我就留意了 用到的芯片 和 LED部分)

2.介绍了下单片机 51单片机,的各个厂商 的幸好,因为板子是用 STC 89C52 的,所以基本都是这个。

3.看板子的电路原理图,妈的蛋。。。完全没有电路知识的人,看到这里简直是要跪,这是什么鬼????? 到这个时候 老婆在后面问我为何跪在显示器前。。

从这里 想起以前高中学过的电路。。(这特么一点关系都没有好不好。。根本没什么用),幸好看了下还是大概能看出那里连那里,有些标注 什么 P0,P1,D1的。

基本对着 电路原理图,和板子 上一一对应都能大概找出 那些是怎么连的(但是那些什么中间为毛线要连个电阻,什么上拉电阻 又是什么鬼?,后面自己百度了)

理解在这个板子上的所有功能都通过这些器件连起来,什么时候通电 什么时候 通个 ”高电平“ ”低电平“来控制(看成 信号->看成二级制数据的1和0),然后通过 变成 写入指令 到 芯片中来执行。

来是说 上面那些电子元件 电路什么的都不是很清晰,后面慢慢补吧,先把功能跑起来。

4. 从上面的原理图 看到 LED模块的电路连接是链接到 芯片 的 IO口 (有4组 P0 P1 P2 P3,每个组有8数据口),现在LED 就是链接到P0 上

然而 就是通过 变成 来控制 P0 上的 信号输出来达到搞亮LED。

5. 如何控制?

用C语言 写出一个点亮程序,这里用到的编程工具 是Keil .

由于之前没学过C,头文件是什么鬼。。,哦原来是相当于一个 声明文档

在 51 单片机中 有定义好的 头文件

#include

里面定义 一堆 51单片机的定义 比如 上面说到P0 IO口,都在里面定义好 具体的地址,通过操作这个P0的变量即可?

由于 这个P0定义的是一组 8位的,对应了这个 LED组8个灯,如果要控制一个灯亮要怎么搞?

这里有个语法

sbit LED1 = P0^0;

代表 P0组 第一个位(最低位)的值,指向了LED1这个变量

sbit 类型是 51单片机 的特殊类型

如果要点亮,只需要给这个 LED1 给一个低电平的信号就可以。

LED1 = 0;

为什么要低电平?(看上面的电路图,说的太玄,没看懂,只是 说那个发光二极管 的什么鬼的)

然后注意的是 默认的 51单片机所有初始化电平信号 都是高电平的。

#include <REGX52.H>sbit LED1=P0^0;void main(){LED1 = 0;}

烧到 板子上,点着 噢耶 亮了,

下面是 去弄个 流水灯点亮一排led

用到流水灯 就要 做到 亮一盏 等一下,再去下一个动作这种等待。

真是吊炸天,,,教程里面居然 用cpu 每执行一个指令会花一个段时间来当做 等待。。。用个循环 来当做等待

void delay10ms()  {
    unsigned int a,b;    for(a=100;a>0;a--)      for(b=225;b>0;b--);   }
在上面编译的时候出现了 问题,在51平台上 用到的变量,方法 都要在之前做好声明


比如上面 delay10ms 如果要在main()里面调用就必须 把这段代码 写在 main方法之前,或者 在 main方法之前 声明定义好这个方法

<span style="white-space: pre;">#define void </span>delay10ms();

还有一个是 方法内用到的变量都要在 放在方法内的第一行,或者最前前面声明 不能 随处用随处声明(这个甚是蛋疼)


0 0
原创粉丝点击