STC89C52单片机学习——第4节:[2-1]点亮一个LED灯

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做!

前言

   本次笔记是用来记录我的学习过程,同时把我需要的困难和思考记下来,有助于我的学习,同时也作为一种习惯,可以督促我学习,是一个激励自己的过程,让我们开始51单片机的学习之路。
   欢迎大家给我提意见,能给我的嵌入式之旅提供方向和路线,现在作为小白,我就先学习51单片机了,就跟着B站上的江协科技开始学习了.
   在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容,因为我之前有一个开发板,我大概率会用我的板子模仿着来做.让我们一起加油!
   另外为了增强我的学习效果:每次笔记把我不知道或者问题在后面提出来,再下一篇开头作为解答!

开发板说明

   本人采用的是慧净的开发板,因为这个板子是我N年前就买的板子,索性就拿来用了。不再另外购买视频中的普中开发板了。
   原理图如下
在这里插入图片描述
视频中的都用这个开发板来实现,如果有资源就利用起来。

下图是实物图
在这里插入图片描述

引用

51单片机入门教程-2020版 程序全程纯手打 从零开始入门
还参考了下图中的书籍:
手把手教你学51单片机(C语言版)
在这里插入图片描述

问题解答和科普

在这里插入图片描述
LED(lightlight-emitting diode) diode),即发光二极管,俗称 LED 小灯,它的种类很多,参数也不尽相同,我们板子上用的是普通的贴片发光二极管。这种二极管通常的正向导通电压是 1.8V到 2.2V 之间,工作电流一般在 1mA1mA~20mA 之间。其中,当电流在 1mA1mA~5mA 之间变化时,随着通过 LED 的电流越来越大,我们的肉眼会明显感觉到这个小灯越来越亮,而当电流从5mA5mA~20mA 之间变化时,我们看到的发光二极管的亮度变化就不是太明显了。当电流超过
20mA 时, LED 就会有烧坏的危险了,电流越大,烧坏的也就越快。
==usb接口电路==
个接口,其中 2脚和 3脚是数据通信引脚, 引脚,1脚和 4脚是电源引, 1脚是 VCC 正电源, ,4脚是 GND 即地 线。 5脚和 6脚是外壳,我们直接接到了 GND。
(自恢复保险丝)接到右侧,在
正常工作的情况下,保险丝可以直接看成导线正常工作的情况下,保险丝可以直接看成导线,因此左右两边都是 USB 电源 +5V ,自恢复保险丝的作用是,当你后级电路哪个地方有发生短路的时候,保险丝会自动切断电路,保护开
发板以及电脑的 USB 口,当电路正常后,保险丝会恢复畅通,正常工作。
右侧有 2条支路,第一条是在 +5V 和 GND 接了一个 470uF 的电容,电容是隔离直流的,所以这条支路是没有电流的。
在这里插入图片描述
小灯发光。刚才提到了我们接入的 VCC 电压是 5V ,发光二极管自身压降大概是 2V ,那么在右边 R34 这个电阻上承受的电压就是 3V 。那么现在我们要求电流范围是 1~ 20mA 的话,就可以根据欧姆定律 R=U/I ,把这个电阻的上限和下限值求出来。U=3V,当电流是 1mA 的时候,电阻值是 3K ;当电流是 20mA 的时候,电阻值是 150欧,也就是 R34 的取值范围是 150~3K 欧姆。这个电阻值大小的变化,直接可以限制整条通路的电流的大小,因此这个电阻我们通常称之为“限流电阻”。
在这里插入图片描述
大家注意,这里的开关虽然只有一个,但是是2 路的, 2 路开关并联能更好的确保给后级提供更大的电流。电容 C19 和 C10 ,都是隔离断开直流的,
在这里插入图片描述
由于电源从正极到负极有电压差,并且电路是导通的,所以就会有电流通过, LED小灯因为有了电流通过,所以就会直接发光。我们把右侧的 原 GND 处接到单片机 P0.0 引脚上,那么如果我们单片机输出一个低电平,也就是跟 GND 一样的 0V 电压,就可以让 LED小灯发光了。
3、关于GPIO的8中工作模式暂时还没有搞懂,我想着之后学习32的时候再回来补充。

一、新建单片机工程

在Keil中选择新建工程,选择STC89C52,
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
点击小锤子,选择上生成HEX文件,

二、LED的介绍

在这里插入图片描述在这里插入图片描述
如图驱动模块如下,单片机是如何控制的呢?
   单片机的CPU控制寄存器,完成IO口的控制,也可以通过IO口读取外部的信息。
在这里插入图片描述
在这里插入图片描述

三、LED程序设计

3.1程序组成基本介绍

首先我们在main加上头函数#include <REGX52.H>
然后加入

#include <REGX52.H>
void main()
{
	while(1)
	{
	
	
	}

}

#include <REGX52.H>里面有定义好的内容。
在这里插入图片描述
编译一下,没有错误。
在这里插入图片描述
我们通过看上面的开发板的原理图,LED连接在单片机的P1端口,而且一般都是低电平来驱动,因为单片机IO口的模式决定的,开漏输出:低电平有较强的驱动能力.所以要想点亮开发板的LED只需要让对应的端口置低电平.

3.2LED点亮设计

#include <REGX52.H>
void main()
{
	while(1)
	{
	 P1_0=0;
	
	}

}

先从程序语法上来分析一下。
1、main 是主函数的函数名字,每一个 C程序都必须有且仅有一个 main 函数。
2、void 是函数的返回值类型,本程序没有返回值,用 void 表示。
3、{} 在这里是函数开始和结束的标志,不可省略。
4、每条 C语言语句以 ;结束的。
逻辑上来看,程序这样写就可以了,但是在实际单片机应用中,存在一个问题。比如我们的程序空间可以容纳 100 行代码,但是我们实际上的程序只用了 50 行代码,当运行完了50 行,再继续运行时,第 51 行的程序不是我们想运行的程序,而是不确定的未知内容,一旦执行下去程序就会出错从而可能导致单片机自动复位,所以我们通常在程序中加入一个死
循环,让程序停留在我们希望的这个状态下,不要乱运行。

在这里插入图片描述
编译没有错误,勾选上生成HEX(十六进制)文件;编译完成后,在我们的Keil 下方的 Output 窗口会出现相应的提示,大家注意看图 这个窗口告诉我们编译完成后的情况, data=9.0 ,指的是我们的程序使用了单片机内部的 256字节 RAM 资源中的 9 个字节, code=19 的意思是使用了 8K 代码 Flash 资源中的 19 个字节。当提示“ 0 Error(s), 0 warning(s) s)”表示我们的程序没有错误和警告,就会出现 creating hex filefrom LED ””…,意思是从当前工程生成了一个 HEX 文件,我们要下载到单片机上的就是这个
HEX 文件。文件。如果出现有错误和警告提示的话,就是 Error 和 warning 不是 0 ,那么我们就要对程序进行检查,找出问题,解决好了再进行编译产生 HEX 才可以。
在这里插入图片描述
程序下载打开STC-ISP软件
在这里插入图片描述
下载软件列出了5 个步骤:第一步,选择单片机型号,我们现在用的单片机型号是STC89C52RC ,这个一定不能选错了;第二步,点击“打开程序文件”,找到我们刚才建立工程的那个 lesson2 文件夹,找到 LED.hex 这个文件,点击打开;第三步,选择刚才查到的 COM口,波特率使用默认的就行;第四步,这里的所有选项都使用默认设置 ,不要随便更改,有的选项改错了以后可能会产生麻烦。第五步,因为 STC 单片机要冷启动下载,就是先点下载,然后再给单片机上电,所以我们先关闭板子上的电源开关,然后点击“ Download/ 下载”按钮.
点击下载之后,冷启动,就是按下关机再开开,程序就下载成功了.
在这里插入图片描述
在这里插入图片描述
可以看到P1-0口对应的LED被点亮了,完成本次课程实验。

问题

1、常见的规范和定义:
单片机有那么几条很特殊的独有的编程语句:
第一条语句是:sfr P0 = 0x80 0x80;
sfr这个关键字,是 51 单片机特有的,他的作用是定义一个单片机特殊功能寄存器 (specialfunction register) 。51 单片机内部有很多个小模块,每个模块居住在拥有唯一房间号的房间内,同时每个模块都有 8个控制开关。 P0 就是一个功能模块,就住 在了 0x80 这个房间里,我们
就是通过设置 P0 内部这个模块的 8个开关,来让单片机的 P0 这 8个 IO 口输出高电平或者低电平的。而 51 单片机内部有很多寄存器,如果我们想使用的话必须提前进行 sfr 声明。不过 Keil 软件已经把所有这些声明都预先写好并保存到一个专门的文件中去了,我们要用的话 这些声明都预先写好并保存到一个专门的文件中去了,我们要用的话只要文件开头添加一行 #include<reg52. 即可。
第二条语句是:sbit LED = P0^0;
这个 sbit ,就是对刚才所说的 SFR 里边的 8个开关其中的一个进行定义。经过上边第二条语句后,以后只要在程序里写 LED ,就代表了 P0.0 口(“ (“^”这个符号在数字键 6上边),注意这个 P必须大写,也就是说我们给 P0.0 又取了一个更形象的名字叫做 LED 。
在这里插入图片描述

IO 口特殊功能寄存器 其中P0 口所在的地址是 0x80 ,一共有从 7 到 0 这 8 个 IO 口控制位,后边有个 Reset Value(复位值),这个很重要,是 我们看寄存器必看的一个参数 8 个控制位复位值全部都是 1 。==这就是告诉我们,每当单片机上电复位的时候,所有的引脚的值默认是都是 1 ,即高电平我们在设计电路的时候也要充分的考虑这个问题。==

那么上边那2 条语句,我们写 sfr 的时候,必须要根据手册里的这个地址去 写,写sbit 的时候,就可以直接将一个字节其中某一位取出来,我们编程的时候,写好的存器地址的头件,我们只需要引用头文件就可以使用了。

2、74HC138的功能和用法?

总结

  本次课程主要讲了,程序的基本框架,和内容,要学会看原理图和实际对应起来,程序下载到单片机中,按照程序的设计进行去操作相应的寄存器,进而完成相应的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值