【STC15单片机】初始化程序原理

目录

LED、数码管、蜂鸣器、继电器的控制原理

74HC573   锁存器

74HC02    四路或非门

74HC138   译码器

ULN2003   7路达林顿管

蜂鸣器控制

15单片机初始化程序



其他单片机

单片机I/O口控制一个设备或者有跳线帽

蓝桥杯单片机开发板复杂之处

  • P0端口控制LED、数码管、蜂鸣器、继电器、步进电机、点阵屏、LCD1602、LCD12864
  • AVR、8255

LED、数码管、蜂鸣器、继电器的控制原理

整体控制框图

数电还没学,凑合记笔记

以P0控制8个LED为例,介绍下面的元件


74HC573   锁存器

OE:output_enable,输出使能; 
LE:latch_enable,数据锁存使能,latch是锁存的意思; 
Dn:第n路输入数据; 
On:第n路输出数据; 

再看这个真值表,意思如下: 
第四行:当OE=1是,无论Dn、LE为何,输出端为高阻态; 

第三行:当OE=0、LE=0时,输出端保持不变; 
第二行第一行:当OE=0、LE=1时,输出端数据等于输入端数据; 


结合下面的波形图,在实际应用的时候是这样做的: 
a. OE=0; 
b. 先将数据从单片机的口线上输出到Dn; 
c. 再将LE从0->1->0 
d. 这时,你所需要输出的数据就锁存在On上了,输入的数据在变化也影响不到输

出的数据了;实际上,单片机现在在忙着干别的事情,串行通信、扫描键盘……单

片机的资源有限啊。

74HC573(蓝桥杯单片机开发板U6)控制LED

 Y4C给高电平1,就能用P0口控制8个LED

Y4C口由74HC02芯片(蓝桥杯单片机开发板U25))控制


74HC02    四路或非门

上图中给Y4和WR都是低电平0,Y4C会输出高电平1,这样P0口就会控制LED 

WRJ13跳线帽决定,接到上面俩排针,就是接地(IO标识)

接下面俩排针就是MM模式,等于接到P36/WR

实际应用是将跳线帽接到上面 

Y4由74HC138译码器控制,通过控制P25\P26\P27三个IO口来控制Y4的电平状态


74HC138   译码器

三线控八线,节省单片机I/O口占用

参考51单片机的138译码器控制8位LED程序

【51单片机】数码管显示http://t.csdn.cn/QaDwy

138译码器真值表

 H = 高电平           L = 低电平

这个左侧CBA是啥呢 ?

看下15单片机原理图就知道了

 

  • A = P25
  • B = P26
  • C = P27

我们通过给P25\P26\P27这三个I/O口赋值,实现输出8种状态

每个I/O都只有两种状态,非0即1,一共三个IO口,对应有2*2*2 = 8种状态

用0或1翻译一下上面的一部分真值表

之前想让Y4的电平状态置低,就需要给对应IO口赋值了,查阅上表可知

  • A = P25 = 0
  • B = P26 = 0
  • C = P27 = 1

138译码器右边Y0...Y7每一种状态只有一个引脚输出0,所以能实现每次只打开一个锁存器

简单来说就是控制LED时不能控制数码管,控制数码管时,不能控制LED

15单片机开发板就是这么设计的(牛的牛的),就得这么用呀


ULN2003   7路达林顿管

ULN2003是一个单片高电压、高电流的达林顿晶体管阵列集成电路。它是由7对NPN达林顿管组成的,它的高电压输出特性和阴极箝位二极管可以转换感应负载。单个达林顿对的集电极电流是500mA达林顿管并联可以承受更大的电流。此电路主要应用于继电器驱动器,字锤驱动器,灯驱动器,显示驱动器(LED气体放电),线路驱动器和逻辑缓冲器。ULN2003的每对达林顿管都有一个2.7kΩ串联电阻,可以直接和TTL或5V CMOS装置。

单片机通过74HC573芯片控制引脚,输出5V,但是电流比较小,不足以驱动蜂鸣器鸣叫,可以加达林顿管增大电流,增强单片机的驱动能力

  • 单片机开发板使用达林顿管,取代了三极管
  1. STEPA\STEPB\STEPC\STEPD可以驱动步进电机
  2. N RELAY可以驱动继电器
  3. N MOTOR可以驱动直流电机
  4. N BUZZ可以驱动蜂鸣器

这个达林顿管有反相的作用,输入0输出1,输入1输出0

蜂鸣器控制

上面的引脚已经接VCC了,BUZZ引脚给0就导通了,给1蜂鸣器就关闭 不鸣叫

 蜂鸣器不鸣叫 ---> N BUZZ引脚输出1 ---> P06输入0,同时Y5C引脚给1

看原理图,Y5和WR共同控制Y5C

并且Y5和WR同时为低电平0,Y5C才能输出高电平1

Y5又是138译码器控制的

P25 = 1; P26 = 0; P27 = 1;这样Y5输出0

这样配置就能用P06口控制蜂鸣器状态了


了解一点原理呢,剩下的会用代码就好咯

复制之前简单流水灯的程序测试

用这三句控制LED

P25 = 0;    P26 = 0;    P27 = 1;

#include <STC15F2K60S2.H>

long a;

void main()
{
//	P2 = 0xA0;	P0 = 0x00;	P2 = 0x80;	P0 = 0xFF;//初始化,防止蜂鸣器乱叫
	P25 = 0;	P26 = 0;	P27 = 1;	//控制LED
	
	while(1)
	{
		P00 = 0; P01 = 1; P02 = 1; P03 = 1;
		for (a = 80000; a > 0; a --);
		P00 = 1; P01 = 0; P02 = 1; P03 = 1;
		for (a = 80000; a > 0; a --);
		P00 = 1; P01 = 1; P02 = 0; P03 = 1;
		for (a = 80000; a > 0; a --);
		P00 = 1; P01 = 1; P02 = 1; P03 = 0;
		for (a = 80000; a > 0; a --);
	}
}

LED 效果与之前效果一致,因为我们没有将蜂鸣器关闭,它会一直鸣叫

改成控制蜂鸣器的程序

#include <STC15F2K60S2.H>

long a;

void main()
{
//	P2 = 0xA0;	P0 = 0x00;	P2 = 0x80;	P0 = 0xFF;//初始化,防止蜂鸣器乱叫
//	P25 = 0;	P26 = 0;	P27 = 1;	//控制LED
	P25 = 1;	P26 = 0;	P27 = 1;	//控制蜂鸣器
	while(1)
	{
		P06 = 1;	//on
		for (a = 80000; a > 0; a --);
		P06 = 0;	//off
		for (a = 80000; a > 0; a --);
		for (a = 80000; a > 0; a --);
		for (a = 80000; a > 0; a --);
	}
}

由实验效果可以验证给P06 = 0是关闭蜂鸣器

P06低电平的信号经过达林顿管处理输出高电平,使蜂鸣器关闭。可以验证达ULN2003有反相的作用

l

 上电初始化---关闭蜂鸣器&关闭继电器

#include <STC15F2K60S2.H>

void main()
{
	P25 = 1;	P26 = 0;	P27 = 1;
    P06 = 0;	//off关闭蜂鸣器
	P04 = 0;	//关闭继电器
	while(1)
	{
	}
}

烧录程序可以看到继电器右侧的LED灭了,代表继电器关闭

简化关闭蜂鸣器继电器的初始化代码

一位一位的赋值操作比较繁琐,用整个端口赋值来代替

#include <STC15F2K60S2.H>

void main()
{
	P2 = 0xA0;	P0 = 0x00;
	while(1)
	{
	}
}

15单片机初始化程序

#include <STC15F2K60S2.H>

//关闭 蜂鸣器继电器LED数码管
void All_Init(void)
{
	P2 = 0xA0;	// 1010 0000
	P0 = 0x00;	//off蜂鸣器继电器
	
	P2 = 0x80;	// 1000 0000
	P0 = 0xFF;	//offLED
	
	P2 = 0xC0;	//使能锁存器U8 1100 0000
	P0 = 0xFF;	//选择所有数码管
	P2 = 0xFF;	//使能锁存器U7 1111 1111
	P0 = 0xFF;	//关闭所有数码管
}

void main()
{
	All_Init();	

	while(1)
	{		
	}
}

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北国无红豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值