51单片机学习之1锁存器驱动led灯.docx
《51单片机学习之1锁存器驱动led灯.docx》由会员分享,可在线阅读,更多相关《51单片机学习之1锁存器驱动led灯.docx(7页珍藏版)》请在冰豆网上搜索。
![51单片机学习之1锁存器驱动led灯.docx](https://file1.bdocx.com/fileroot1/2023-2/4/efa4f7a6-59be-401b-9cf4-b882ae38e086/efa4f7a6-59be-401b-9cf4-b882ae38e0861.gif)
51单片机学习之1锁存器驱动led灯
51单片机学习之1-锁存器驱动led灯
原本想学AVR的,o(︶︿︶)o唉,交了一年的学费,现在穷的只剩下裤裆了。
还好,还有几天我的腰包又会涨了。
嘎嘎。
。
这段时间就复习复习51单片机吧,之前写的笔记都不知道放哪了。
现在重新看视频再写一次增强记忆。
第一集
单片机的介绍以及学习必备的一些基础知识等。
第二集
一、单片机型号解析。
1、例子AT89S5224PU
AT—生产商标志,表示该器件是ATMEL公司的产品。
89—ATMEL公司的产品89系列家族(内涵Flash存储器)。
S—表示可在线编程。
还有C表示是CMOS产品、LS表示低电压2.7V-4V、LV表示低电压2.7V-6V、LP表示低功耗单时钟周期指令。
52—表示存储器的容量是8K,还有53是12K、54是16K、55是20K,51是4K、2051是2K等。
24—表示芯片的最高时钟频率为24MHZ。
还有33MHZ、20MHZ、16MHZ等。
P—表示DIP封装。
还有S表示SOIC封装、Q表示PQFP封装、A表示TQFP封装、J表示PLCC封装、W表示裸芯片等。
U—表示芯片的产品等级为无铅工业产品,温度范围为-40至+85℃。
还有C表示商业产品,温度范围为0至+70℃;I表示工业产品,温度范围为-40至+85℃;A表示汽车用产品,温度范围为-40至+125℃;M表示军用产品,温度范围为-55至+150℃。
二、51单片机内部结构
8位CPU、4K的ROM、128字节RAM、4个8位并行I/O口、一个全双工串行口,2个16位定时器/计数器,5个中断源
单片机为TTL电平:
高电平+5V低电平0V如果要和计算机通讯,因为计算机高电平-12V低电平+12V所以计算机与单片机之间通讯需要加电平转换芯片MAX232。
三、二进制的运算
【与】:
两者都为1(真)才为1真例:
1&1=1
0&0=0
0&1=0
1&0=0
【或】:
两者只要其中一个为1(真)则为真例:
1|0=1
0|1=1
1|1=1
0|0=0
【非】:
1则0
0则1例:
!
1=0
!
0=1
第三集
一、C51数据类型
1、sfr:
特殊功能寄存器声明
C51已经为我们定义好的。
如reg52.h文件里面的sfrTCON
=0x88;我们可以直接操作TCON就等于操作0x88这个地址的内容。
2、sfr16:
sfr的16位数据声明
同上。
3、sbit:
特殊功能位声明
C51已经为我们定义好的。
如reg52.h文件里面的sbitTR1
=TCON^6;我们可以直接将TR1=1就等于把TCON的第6位置1
4、bit:
位变量声明
二、C51头文件
通常有:
reg51.h
reg52.hmath.h
ctype.hstdio.h
stdlib.h
absacc.h
常用有:
reg51.h
reg52.h里面定义了特殊功能寄存器和位寄存器
math.h定义常用数学运算
三、宏定义
例:
#defineucharunsignedchar
#defineuintunsignedint
#defineulintunsignedlongint
凡是程序源码中出现uchar时,在我们编译的时候编译器会把uchar替换成unsignedchar,uint替换成unsignedint,uling替换成unsignedlongint方便我们使用。
和C的含义一样。
四、C51运算符
与C语言基本相同
+
-
*
/(加减乘除)
>;
>;=
;>;
74HC573引脚说明:
OE:
低电平有效,要使用这个芯片OE必须为低电平芯片才会工作。
D0—D7:
为输入一般接在单片机的IO口
Q0—Q7:
为输出外围芯片、电机、led等
LE:
锁存控制,当LE为高电平时D引脚输入的电平状态会直接影响Q输出引脚的电平状态,相当于单片机的IO口可以直接操控Q输出引脚,即单片机IO==Q==D。
当LE为低电平时,无论D引脚的电平状态怎么变动,Q的电平状态仍维持不变。
相当于Q输出引脚与单片机的IO口隔离。
真值表
这表格分成两个部分:
INPUTS(输入)、OUTPUT(输出)。
L:
表示低电平在INPUTS表示输入低电平在OUTPUT表示输出低电平。
H:
表示高电平在INPUTS表示输入高电平在OUTPUT表示输出高电平。
X:
表示无所谓是高电平还是低电平。
Q0:
表示维持原来的状态不变。
Z:
高阻态(接的是高电平则是高电平,接的是低电平则是低电平)当输出高阻态时,说明芯片没有工作。
INPUTS(输入):
OE:
OE上面有一条横杠代表低电平有效。
LE:
锁存控制。
D:
输入端即D0—D7
OUTPUT(输出):
Q:
输出端即Q0—Q7
真值表解释:
第三行:
OE=L
LE=HD=HQ=H
表示OE为低电平时,LE为高电平即不锁存,那么D是高电平则Q也是高电平。
第四行:
OE=L
LE=HD=LQ=L
表示OE为低电平时,LE为高电平即不锁存,那么D是低电平则Q也是低电平。
第五行:
OE=LLE=LD=XQ=Q0
表示OE为低电平时,LE为低电平即锁存,那么无论D是什么状态,Q仍保持上一次的状态。
第六行:
OE=HLE=XD=XQ=Z
表示OE为高电平即停用芯片,LE无论是什么状态,D无论是什么状态,Q保持高阻态即不起作用。
二、电路图
单片机的一组P0口要控制8个Led灯,首先需要将LE引脚置1,让74HC573的Q输出端与D输入端关联起来。
这样P0口的电平状态会传递给D输入端进而改变Q的电平状态。
8个Led的正极接在1k的排阻。
相当于每个Led串入一个1k的电阻。
这里的电阻起限流作用,硅发光二极管的发光压降是0.7V;其发光的电流一般为3—10mA,而单片机(控制芯片)的I/O口有一个灌入电流一般为20mA左右(超过这个电流时,单片机内部PN节会被击穿)。
所以加一个1k电阻限流,避免流过Led的电流过大而烧毁Led。
(单片机(控制芯片)的I/O口有一个灌入电流一般为20mA左右;超过这个电流时,单片机内部PN节会被击穿。
一般的继电器驱动电流在40、50—120mA;一般常用9012的PNP(9013、NPN)三极管作为开关三极管,该三极管的驱动电流可以达到200mA左右,可以用来驱动继电器。
达林顿反向驱动器:
ULN2001A—ULN2002A(ST)驱动电流500mA;(给低电平输出高电平,给高电平输出低电平))
电阻的取值:
当Led点亮后,Led会有一个电压。
一般情况下红色直插LED应该是1.7V,剩下3.3V的电压会加在电阻上。
Led需要的电流是3.3ma(0.0033A)电压除于电流3.3V/0.0033A=1000欧=1K。
(不同的厂家生产的LED的电压和电流可能略有差别)
我们要让Led亮,那么首先要明确的是,单片机是TTL电平,高电平为+5V低电平为0V,单片机供电也是5V,所以电源正极VCC应该为+5V负极为0V。
Led的正极通过电阻接在VCC,Led的负极接在74HC573的Q输出端。
当单片机的IO口给低电平时即0V,并且74HC573LE为高电平,那么电流会从VCC→1K电阻→Led→74HC573Q→74HC573D→单片机的IO口,此时Led灯亮。
按照上面的电路图,程序代码应为:
#include;
sbitLed=P0^0;
sbitLE=P1^6;
//由于51单片机上电,IO口默认为高电平所以这句可省略。
voidmain()
{
LE=1;
//由于51单片机上电,IO口默认为高电平所以这句可省略。
Led=0;
//直接操作P0的0端口让第一个Led灯亮
//P0=0xFE;
//操作P0一组IO口,0xFE==11111110,P0的0端口置0其余置1效果和Led=0一样。
不同的是前者操作了一组端口后者只操作了一个端口
P0=0x00;//P1端口全部置0即让所有的LED灯亮。
while
(1);
//程序运行到这里的时候一直无限循环。
因为Keil编译后期产生的汇编代码中,结尾有一条LJMPmain,就是不同的执行main函数。
加上这一条就可以阻止它重复执行上面的代码。
}