点亮第一个LED
一、51单片机GPIO
是通用的输入输出口的简称,可以通过软件来控制其输入输出。
1电源引脚-VCC-VDD-GND等等
2晶振引脚-XTAL 0-40
3复位引脚 RST
4下载引脚 支持串口下载那么-RXD-TXD也可以
5GPIO引脚 P0、1、2、3
GIPO结构框图与工作原理
输入缓冲器 三态门有高、 低、 高阻、三个状态
在这里转换成了郭天祥的单片机教程
发光二级管的原理图
标号相同的地方表示物理连接了
发光二极管的阳极接了排阻P2(1K),阴极接了单片机的P0口
电阻值的计算:发光二级管点亮的电流值3mA左右3~10mA之间比较正常。
阴极给低电平(单片机只能高电平低电平0V),阳极给一个正5V,点亮的压降值是1.7V左右。
那么电阻就5V-1.7V那么就是3.3V,那要求通过的电流为3mA,欧姆定律3.3V除以3mA约等于1K。
想亮一点选300Ω的,那么经过的电流为10mA左右,一般也不会坏。
电源电路
电源指示灯D10上面的电阻也是1K,这个是限流电阻,左右两端接电容。
计算机USB电源使用的是开关电源,所以不是很稳定,一个去耦电容(提供稳定的电源)也叫滤波电容 。
锁存器
主要起到一个拓展的功能
增值表
L表示低 H表示高 X表示任意
OE是输出使能,常见还有CS上面有一杠,也只有低电平的时候芯片才能正常工作。
OE是H时,Q是Z那就是高阻态,和他相连的电器高电平那么他就高电平,低电平那么他也跟着编程低电平,就是不工作,所以OE不能在高电平状态。所以接在了地。
2~9D接在了DB1~DB8那就是单片机的P1口,去控制发光二极管的亮灭。
10就是地,20就是VCC电源,
11是LE,就是锁存器的锁存端。LE高的时候,输出端Q是跟随者输入端D变化。
LE是低的时候,D端无论是什么值,Q端都保存Q0,就是上一次的值,LE还没变为低的时候,Q是什么值那他还是什么值。
驱动发光二级管的时候始终把LE设为高电平即可。
这个芯片就相当于没有,线是直接穿过去,那为什么要用呢?因为拓展的东西太多。
还和AD0804相连AD就是把模拟信号转化为数字信号,如果没有这个锁存器则无法稳定的控制输出端口,模拟信号控制LED则会跟随模拟信号渐高渐低。
第一步程序
先写定义
#include<reg52.h>
然后进行位定义 sbit D1=P1^0;
P1就是D1二极管连到单片机的P1口的第一位,P1^0,就是把单片机第一个管脚起名叫D1
写括号的时候一次写两个
51单片机所有的IO口上电后默认高电平,所以把他改成低电平。
二极管是共阳,所以需要把阴极的连接开发板的口改成低电平,才有电势差,电流才会从阳极流向阴极,才能使二极管发光。
void main()
{
D1=0;
}
编译后在下面就有信息,会指出大致区域是否有错误。
使用提供的教程
管脚有差别,旧版只有P0~P3,这个新的是有P4,那么板和管脚是有区别,需要根据自己的板来确定。
软件设计:点亮D1,就是让P2.0管脚输出低电平。闪烁则一会高一会低。
定义管脚:
头文件中P2管脚已经进行了定义,所以选择对应的口即可。
#include "reg52.h"
sbit LED1=P2^0;
void main()
{
LED1=0;
}
下载进去即可。
回到郭天祥教程
这是位操作方法点亮发光二极管,现在用总线操作方法。
新建第二个文件
魔术棒内一样打钩选上生成hex文件
#include<reg52.h>
void main()
{
P2=0xfd;
}
0x就是一个16进制的数,然后看图
从上往下看的时候,0 1 1 1 1 1 1 1 的时候第一个发光二级管亮 。
要第二个亮那就是,1 0 1 1 1 1 1 1 那么转化成十六进制。
最上面的数是最低位,实际二进制应该是1 1 1 1 1 1 0 1
四位四位看,1101是d,1111是f。把这个数直接赋给P2口。
下载进开发板
会发现第二个灯亮了。
C语言中//两个斜杠是注释,/*............*/ 是多行注释,注释的内容不进行编译。
开头的 #include就是把后面标注的头文件整体的搬过来
reg52.h则定位了单片机的寄存器的位置,并且标注出来如P1、P2等。