蓝桥杯 独立按键

LED基本控制

在蓝桥杯实训平台上LED并非直接接到I/O口

两种开发模式:
I/O扩展
存储器映射
在这里插入图片描述
引脚1和2接通,存储器映射模式
引脚2和3接通,I/O的开发模式

在这里插入图片描述

关键内容

138译码器

在这里插入图片描述
如下:138译码器的输出情况
在这里插入图片描述

573锁存器

在这里插入图片描述
如图,573锁存器的引脚分为三类
LE:控制引脚,LE=1打通;LE=0锁存(无论D端怎么变,Q端都不受影响 )

LED指示灯电路原理

为使LED亮起,则要使DQ两段打通,则要使LE=1
为使LE=1,则要使Y4C=0,则要使Y4=0,则要使138译码器输出100
在这里插入图片描述

通过移位操作,使LED依次点亮,依次熄灭

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
WR已经是0,如图为或非门(先或之后再取反输出)

引脚定义

在这里插入图片描述

蜂鸣器和继电器的基本控制

在这里插入图片描述

在这里插入图片描述
如图,N BUZZ和N RELAY 为0时,蜂鸣器和继电器分别开始工作

达林顿管,其中含有非门。
在这里插入图片描述
内部结构
在这里插入图片描述
在这里插入图片描述
非门

关键内容

初始化系统
在这里插入图片描述
在这里插入图片描述
之所以让P0=0x10 可以实现让P04输出低电平是因为
0x10=0001 0000 从右往左数就是第五个位置为1,而经过达林顿管就取反。

锁存器选择函数

选择Y4,Y5…

选择哪个锁存器,写入什么内容同时进行

在这里插入图片描述

在这里插入图片描述

通过特殊操作选择锁存器

在这里插入图片描述

共阳数码管的静态显示

在这里插入图片描述
com口是公共端
abcdef 是数码管每一段的段码
在这里插入图片描述
Y6控制公共端(位选)
Y7控制段码

在这里插入图片描述
共阳数码管所有阳极接在一起,要想让它发光,就要让该数码管的阴极接到低电平

com口必须要接高电平

关键内容

段码表(存放在code中)
在这里插入图片描述

位选段选

通过移位来改变数码管显示的位置

在这里插入图片描述

通过双重循环实现数码管显显示的位置和内容都变化

在这里插入图片描述

选中所有com口实现所有数码管都点亮

在这里插入图片描述

每做一个必须要延时一下,否则看不到结果

在这里插入图片描述

将Delay中多写了一个While,终于变慢了

发现闪的特别快,将Delay(60000)改成Delay(120000)没用,后来将Delay中多写了一个While,终于变慢了(原来只有一个while)

共阳数码管的动态显示

在这里插入图片描述

  1. 实现数码管各位显示不同内容
  2. 将数据的个位和十位分别显示到数码管上,进而拓展到三位整数、四位乃至浮点数的数码管显示

在这里插入图片描述
静态显示只能做到所有点亮的数码管都显示同一内容

关键内容

延时一小段,利用余辉效应使得肉眼看上去同时显示

在这里插入图片描述

在主函数中操作使月增加,超额时恢复1

在这里插入图片描述

Delay里也要执行扫描数码管函数Display_Dynamic

如果Delay(用于显示变化的月份)里什么都不做(空语句),动态显示便无法扫描无法显示
所以在Delay里也要执行扫描数码管函数Display_Dynamic
在这里插入图片描述

独立按键

stat_k 状态锁定:=0 时S7和S6均未按下
可以用于判断到底是S7按下还是S6按下
S7按下,stactic=1;
S6按下,stactic=0;

在这里插入图片描述可以看到在S6按下时if else if 里并没有判断S7是否按下的选项,通过这样的方式实现按下S6时S7被锁定

在这里插入图片描述
Question: 看这个样子,明明是S7按下后,L1亮一下就熄灭,为什么实际是S7按下后L1一直亮,再按一下L1熄灭

Answer: if(stat_k0)是选择结构,选择完了之后跳出if(s70),而非继续执行else if(stat_k==1 )

idea

学完一节仔细分析这节最重要的内容,一个新的小技巧或者功能,模块化,这样一节一节连起来,就像珍珠串起了项链,而且以后再碰到类似的还可以把模块或者制作模块的思维拿出来用。
在这里插入图片描述

关键内容:

1. 使用static_k 实现按下S7后,S6不响应操作。

本质上是利用static记录键码,根据static的数值来判断各个按键的状态(有没有按下)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

按键点灯的两种形式

  1. 按住按键灯一直亮,松手熄灭
    在这里插入图片描述

  2. 按一下按键灯亮,再按一下熄灭
    在这里插入图片描述

2.利用while实现按住按钮一直亮灯,松开熄灭

在这里插入图片描述

3.位声明

在这里插入图片描述

bug修复

矩阵键盘

在这里插入图片描述
1.
在这里插入图片描述
上方为独立按键,一端接地,一端接I/O
下方为矩阵键盘,两端都接I/O

(接通之后两端读到的电平相同)

2.扫描时每次只能扫描一行
在这里插入图片描述

关键内容

1. IAP单片机电路图有差异

在这里插入图片描述
P37——>P44
P36——>P42

2. 位定义

在这里插入图片描述

3. 扫描+返回键码+显示键码

在这里插入图片描述

中断

在这里插入图片描述

在这里插入图片描述
一般来说,51单片机有5个中断,分两个优先级
在这里插入图片描述
中断系统结构
在这里插入图片描述

中断号:一个中断号代表一个中断源
记住每一个中断源对应的中断号
在这里插入图片描述
中断服务函数编写规范
在这里插入图片描述

关键内容

1. 中断初始化函数

在这里插入图片描述

IT0 控制外部中断的触发方式(1下降沿触发)(按下S5触发外部中断)
EX0=1 (外部中断的中断使能打开)
EA=1 总中断打开

2.直接在中断服务函数中延时

在这里插入图片描述

3.定义一个外部中断标志

在这里插入图片描述

stat_int = 1;
当外部中断产生时,stat_int=1
做完之后记得清零

4.在外部执行延时

在这里插入图片描述
在这里插入图片描述

每次执行完一次working便查询一次LEDINT有没有中断产生,所以中断执行时L1刚好熄灭

这种写法使用于先完整完成一个任务再去执行中断

注意在中断服务函数中少做事情

在这里插入图片描述

Bug修复

发现按下S5L8不亮,即不产生中断,后来发现其实是忘了初始化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值