蓝桥杯单片机CT107D初始化程序

蓝桥杯单片机CT107D初始化程序(关闭蜂鸣器、LED、数码管)

void sys_init()	//初始化关闭外设函数
{
	P2 &= 0X1F;//清零P2高三位即P27P26P25 = 0
	
	P2 = P2 & 0X1F | 0XA0;//先清零P2高三位之后再给P27P26P25赋值101,蜂鸣器锁存器
	P0 = 0X00;//关闭蜂鸣器
	P2 &= 0X1F;//关闭蜂鸣器锁存器,释放P0口
	
	P2 = P2 & 0X1F | 0X80;//先清零P2高三位之后再给P27P26P25赋值100,LED锁存器
	P0 = 0XFF;//关闭LED
	P2 &= 0X1F;//关闭LED锁存器,释放P0口
	
	P2 = P2 & 0X1F | 0XE0;//先清零P2高三位之后再P27P26P25赋值111,数码管段锁存器
	P0 = 0XFF;//关闭数码管
	P2 &= 0X1F;//关闭数码管锁存器,释放P0口
}

以下以关闭蜂鸣器为例,分析初始化函数:

在这里插入图片描述
①图示是74HC138译码器,即由P27P26P25的输入,来决定Y的输出。
当P27P26P25 赋值为101时,输出有效位Y5 = 0;对应程序P2 = P2 & 0X1F | 0XA0;

在这里插入图片描述

②38译码器选中有效位后,再经过以下或非门,输出YxC。
当P27P26P25 = 101时,Y5 = 0为有效输出位,当WR为0时(默认为0),Y5C = (Y5 | WR)’=1。

在这里插入图片描述

③之后是锁存器,经过前面的电路,Y5C为1,即对应LE为1,锁存器开启,此时操作P0口,便可对ULN2003(蜂鸣器继电器等)操作:P0 = 0X00;(蜂鸣器继电器高电平开启,低电平关闭)
④并且P0口的值被储存存在锁存器里,此时关掉锁存器(Y5C清0)之后,即使改变P0口的值,也无法改变锁存器储存过的值了,达到解放P0口的目的:P2 & = 0X1F;

在这里插入图片描述
⑤打开或关闭LED,数码管位选、段选过程同上,参考电路图分析

总结:

P2 = P2 & 0X1F | 0XA0;		//给P27P26P25赋值101,打开蜂鸣器锁存器
P0 = 0X00;					//关闭蜂鸣器
P2 &= 0X1F;				//关闭蜂鸣器锁存器,释放P0口

我更喜欢这样写:

void sys_init()
{
	P2 &= 0X1F;
	
	P0 = 0X00;
	P2 = P2 & 0X1F | 0XA0;
	P2 &= 0X1F;
	
	P0 = 0XFF;
	P2 = P2 & 0X1F | 0X80;
	P2 &= 0X1F;
	
	P0 = 0XFF;
	P2 = P2 & 0X1F | 0XE0;
	P2 &= 0X1F;
}
  • 9
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值