找回密码
 立即注册
首页 业界区 安全 点亮LED小灯

点亮LED小灯

任佳湍 昨天 22:06
硬件电路分析

LED,即发光二极管,俗称LED小灯,它的种类很多,参数也不尽相同
KST-51开发板用的是普通的贴片发光二极管。这种二极管通常的正向导通电压是1.82.2V,工作电流一般在120mA。其中,当电流在15mA变化时,随着通过的LED的电流越来越大,人们的肉眼会明显感觉到这个灯越来越亮,而当电流在520mA变化时,看到的发光二极管的亮度变化就不太明显了。当电流超过20mA时,LED就会有烧坏的危险了,电流越大,烧坏的速度也就越快。所以在使用过程中应该特别注意它在电流参数上的设计要求。
1.png

上图是开发板上的USB接口电路,通过USB线,计算机给开发板供电和下载程序以及实现计算机和开发板之间的通信。
从上图可以看出,USB座共有6个接口,其中2脚和3脚是数据通信引脚,1脚和4脚是电源引脚,1脚是VCC正电源,4脚是GND地线,5脚和6脚是外壳,直接接到GND上。
1脚VCC通过F1(自恢复保险丝)接到右侧,在正常工作的情况下,保险丝可以直接看成导线,因此左右两边都是USB电源+5V。
自恢复保险丝的作用是:当后级电路哪个地方发生短路的时候,保险丝会自动切断电路,保护开发板及计算机的USB接口,当电路正常后,保险丝会恢复畅通,正常工作。
右侧有两条支路,第一条是在+5V和GND接了一个470uF的电容,电容是隔离直流的,所以这条支路是没有电流的。[[硬件基础知识#^Regulated-Capacitors|这个电容是稳压电容]]
第二条支路摘出来:
2.png

发光二极管是二极管的一种,和普通二极管一样,这个二极管也有阴极和阳极,习惯上也称之为负极和正极。
3.jpeg

R34的取值范围是150欧姆~3k欧姆,这个电阻值大小的变化,直接可以限制整条通路的电流的大小,因此这个电阻通常被称为“限流电阻”。
图2-3中,R34用的是1k欧姆的电阻,发光二极管LED1在这里的作用是作为电源指示灯,使用USB线将开发板和计算机连起来,这个灯就会亮。
4.png

如图2-5,在板子后级开关控制的地方,也添加了一个LED10发光二极管,作用就是当打开开关时,这个二极管才会亮。
此处开关虽然只有一个,但是却是2路的,2路开关并联能更好地确保给后级提供更大的电流。
电容C19和C10都是隔离断开直流的。[[硬件基础知识#Regulated-Capacitors|其中C19是稳压电容]],[[硬件基础知识#Decoupling-of-high-frequency-capacitors|C10是去耦高频电容]]
5.png

如图2-6,P0.0是单片机的引脚
当P0.0引脚为低电平时,即是GND,此时有压降差,故LED亮灯
当P0.0引脚为高电平时,即是VCC,此时没有压降差,故LED不亮灯,处于熄灭状态。
程序代码编写

特殊功能寄存器和位定义

一般用C语言来对单片机进行编程,而有的单片机有那么几条很特殊的独有的编程语句,51单片机就有,以下为其中的2条

  • sfr P0 = 0x80;
  • sbit LED = P0 ^ 0;
  1. sfr P0 = 0x80;
复制代码
其中,sfr 是关键字,是51单片机所特有的,它的作用是定义一个单片机特殊功能寄存器。
51单片机内部有很多个小模块,每个小模块居住在拥有唯一房间号的房间内,同时每个模块都有8个控制开关。P0技术一个功能模块,就住在了0x80这个房间里,人们就是通过设置P0内部这个模块的8个开关,来让单片机的P0这8个I/O口输出高电平或者低电平的。
而51单片机内部有很多寄存器,如果想使用必须提前进行 sfr 声明。不过 Keil 软件已经把所有的这些声明都预先写好并保存到一个专门的文件中去了,如果要用只需在文件开头添加一行#include即可
  1. sbit LED = P0 ^ 0;
复制代码
sbit就是对SFR里边的8个开关中的一个进行定义。
经过该语句之后,程序里面的LED就是P0.0口。
可以理解为c语言中的typedef
每个型号的单片机都配有生产厂商所编写的数据手册。
6.png

P4口STC89C52对标准C51的扩展
P0、P1、P2、P3口,每个P口本身又有8个控制端口,故该单片机一共有32个I/O口
其中P0口所在的地址是0x80,一共有从7到0这8个I/O口控制位,后边Reset Value(复位值),是看寄存器必看的一个参数,8个控制位复位值全部都是1,也就是说,每当单片机上电复位的时候,所有的引脚的值默认为1,即高电平,在设计电路的时候也要充分考虑这个问题。
新建工程

环境搭建->Keil 新建工程
代码
  1. #include<reg52.h>//包含特殊功能寄存器定义的头文件
  2. sbit LED = P0 ^ 0;//位地址声明,sbit必须小写,P必须大写
  3. void main()//main函数,程序入口,有且仅有一个
  4. {//{}成对存在,此处表示函数的起始和结束
  5.         LED = 0;//分号表示一条语句结束
  6. }
复制代码
在单片机中,通常在程序内加入一个死循环,让程序停留在所希望的状态下,不要跑飞掉。
  1. #include<reeg52.h>
  2. sbit LED = P0 ^ 0;
  3. int main()
  4. {
  5.         LED = 0;
  6.         while(1);//程序在这里停止
  7. }
复制代码
编译

环境搭建->Keil 编译
下载程序

环境搭建->程序下载

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册