视频地址: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不亮】