zoukankan      html  css  js  c++  java
  • 单片机简介 & 点亮LED & 流水灯 & 电路基础

    视频地址:https://www.bilibili.com/video/av10765766

    超详细!!!!!!

    单片机内部三大资源

    【资源:单片机可提供使用的东西】

    FLASH

    • 可以重复擦写
    • 断电后数据不丢失

    RAM

    • 存储中间运算过程中产生和需要的数据
    • 数据断电丢失
    • 读写速度非常快
    • 无限次擦写

    SFR 

    • 单片机内部的功能对应一个或多个SFR
    • 对SFR的读写、配置来实现单片机各种功能

    啥是51单片机?

    兼容Inter的MCS-51体系架构的一系列单片机

    选择的STC89C52的数据

    想让单片机运行程序——> 需要外围电路

    单片机最小系统——>用最少元器件搭建的可以工作的系统

    XTAL 晶振电路 提供基准步调

    VCC 电源 40脚 正极

    GND 接地 20脚 负极

    RST 复位

    电压有 5v 3.3v

    STC89C52用5v供电

     LED发光二极管

     点亮一个LED发光二极管【用程序】

    通过控制P0.0电位的高低来控制LED亮灭

    【即告诉编程软件 P0,就在0x80 的位置上】

    可以直接  #include<reg52.h>

    但,有些扩展的特殊功能寄存器在这个库里是没有的,可通过sfr 来定义其位置

    控制一位:

    即P0.0引脚

    每一个功能对应一个工程

    点亮LED:

    #include <reg52.h>
    #define uint unsigned int
    sbit led = P2^0;
    void light(uint x);
    void main()
    {
     led=0;
     light(1);
     led=1;
     light(2);
     P2=0xaa;
     light(3);
     P2=55;
        light(3);
    }
    void light(uint x)
    {
      uint i,j;
      for(i=x*1000;i>0;i--)
      for(j=110;j>0;j--);
    }
    【保存为.c文件】

     

    生成HEX文件

    显示下方则完成

    烧录程序

     流水灯:

    #include <reg52.h>
    #include <intrins.h>   //包含_crol_函数的头文件
    #define uint unsigned int
    #define uchar unsigned char
    void delayms(uint);
    uchar aa;//赋值用
    void main()
    {
       aa=0xfe;//11111110
      while(1)
      {
       P2=aa;
      delayms(500);//延时500ms
      aa=_crol_(aa,1);//将aa循环左移1位并将结果赋值给aa
      }
    }
    void delayms(uint xms)
    {
     uint i,j;
     for(i=xms;i>0;i--)
      for(j=110;j>0;j--);
    }

    单片机编写程序是根据硬件电路图编写的

    硬件基础

    大电容低频滤波

    小电容高频滤波

     

    低频滤波电容作用:

    (1)保护: 相当于直接用水管浇花和用花洒浇花

    (2)稳定:功耗不是一成不变的

    【比如点亮1个LED,然后点亮所有LED,造成电流瞬间加大,瞬间电压拉低,使有些元件无法正常工作,加上低频滤波电容后,可以稳定这一过程,以适应系统慢慢增加电压过程,避免停机】

    电容参数的选取:

    (1)耐压值:比如一个5V的系统,则此电容的耐压值必须高于5V

    【通常是电压的1.5~2倍】

    (2)电压容值:根据后端电路功耗情况+功耗突然变化的情况选取

    【比如,5V系统加上100µF的电容,功耗变化电压降至4V,部分元件无法工作,但加490µF的电容就可以保证该系统在功耗突然变化时,使得全部元件仍然正常工作】

    (3)类型:

    性能:铝<钽tan<陶瓷电容【尤其在通信邻域】

    但同样的特征,铝电解电容很便宜,体积大

    陶瓷和钽体积较小

    高频滤波电容:

    把静电消耗掉,防止进入芯片内部

    用的时候直接用104电容【10*10^4】即0.1微法的电容就可以了【5V系统里足够用】

    都是陶瓷的,也有磁片

    三极管

     

    在PNP型三极管中,基极比发射极电压0.7V即可导通

    用P1.0的高低电平【差0.7V】控制三极管导通来控制小灯亮灭

     

    单片机其实就是 控制器件【电流输出能力很差】——起四两拨千斤的作用

    驱动能力——电流输出能力

    单片机的 IO 电流输出能力有限

    普通IO口,内部上拉电阻比较大,输出电流几十微安---上百微安

    所以,不会采取下图方式:

     总线上:是一一对应连接一起的关系,而不是全部都连一起

    LED本身就有2V的压降

    IO口作为低电平时,输入的电流不能一直太大,还受到单片机整体IO口【50mA的限制,即高于50mA会造成伤害】

     解决办法:

    是双向缓冲器,也是电流缓冲器

    O-E-   使能引脚 低电平有效,使74HC245正常工作

    DIR 方向引脚   接高电平的话    A1【输入】 ——> B1【输出】 .....一一对应

            接低电平的话    B1【输入】——> A1 【输出】 .....一一对应

    如果让所有的LED点亮,DB_0 ~ DB_7全部输出低电平,形成八路共64mA的电流,但单片机整体IO口【50mA的限制,即高于50mA会造成伤害】,所以接74HC245缓冲器【70mA】,可起到电流缓冲的作用

    还加三极管的目的是保证  电流输出能力【就像水管中较窄的地方,水流速度变慢】,逻辑上A1...和B1...是导通的,只是起到电流缓冲的作用

     

     74HC138电路   -----   拓展单片机IO口【数字扩展芯片】

    又叫三八译码器 ———— 由三个输入来控制八个输出口的状态

     

    即减小电流,通过小电流来控制大电流

    点亮LED整体工作过程:【视屏教学中的程序,,我用的实验板是普中的,不一样】

    其中ADDR0 ADDR1 ADDR2 ADDR3分别通过跳线帽与 P1^0 P1^1 P1^2 P1^3引脚相连

    观察下方的ENABLE使能引脚和74HC138真值表

    所以,程序中将ADDR3 = 1 ENABLE=0 【两条线】,使74HC138有效

     

    # 有无效是指外界是否对其有影响  如当使能引脚不是100时,所有的输出引脚都是H,即1,输入引脚对其无影响,故无效

     通过ADDR0 ADDR1 ADDR2 为011,使Y6引脚输出低电平

    从而使Y6引脚输出低电平,即LEDS6输出低电平,从而使三极管导通

    从而,只要使DB_0 输出低电平【即程序中的LED = P0^0 = 0】,DB0 也即低电平,从而使LED电路DB0为低电平,从而电路导通,电流沿着LED2流入74HC245的GND

    【单片机IO口默认是高电平,所以别的DB1~7都是高电平,电流不导通,LED不亮】

  • 相关阅读:
    利用模板实现c++智能指针
    movit 相关函数(二)
    moveit相关函数解释
    ros常用函数(1)
    Qtcreator中cin函数无法在application output中进行输入的问题的解决
    c++速成,适合有c基础的朋友(3)
    【重要通知】本博客不再更新,更多教程请访问 makermaker.cc
    BBC micro:bit 学习资源汇总(最近更新2019年1月6日....)
    [20个项目学会BBC micro:bit编程] 20-无线通信
    [20个项目学会BBC micro:bit编程] 19-直流电机控制
  • 原文地址:https://www.cnblogs.com/expedition/p/10745843.html
Copyright © 2011-2022 走看看