单片机c51中断 — 中断键控流水灯

2023-11-15

项目文件

文件

关于项目的内容知识点可以见专栏单片机原理及应用 的第五章,中断

 


在第4章的实例2中,按键检测是采用查询法进行的,其流程图如图所示
在这里插入图片描述
问题是这样的:由于查询法 -按键查询、标志位修改及彩灯循环几个环节是串联关系,当CPU运行于彩灯时,将因不能及时检测按键状态,而使按键操作效果不灵敏。

 

解决这一问题的方法:利用外部中断检测按键的状态, 一旦有按键动作发生,系统可立即更新标志位。

这样就保证系统及时按新标志位值控制彩灯运行。
为此需要对电路进行改造,加装一个4输入与门电路(输入端与p0并联),这样就能将按键闭合电平装化为INT0中断信号。

在这里插入图片描述

就是A0~A3相当于P0.0 ~ P0.3 对应按键的端口
如果按键按下,那么端口电压变低=0,传给并联的A
四个按键的电压通过与门,*0=0 传给INT0
非端口

 


现在开始写代码:

  • 延迟函数和led亮灯数
#include "reg51.h"
char led[]={0xfe,0xfd,0xfb,0xf7};//LED花样数据
bit dir=0,run=0;     			//全局变量 dir方向标志 run亮灯标志
void delay(unsigned int time);	 
//延时函数
void delay(unsigned int time){ 
	unsigned int j = 0;
	for(;time>0;time--)
		for(j=0;j<125;j++);
}
  • 先写主函数:
void main(){ 
	char i;
	IT0=1;EX0=1;EA=1;//边沿触发、INT0允许、总中断允许

脉冲触发,中断允许
按下按键

在这里插入图片描述按下按键就进入中断了

  • 下面写主函数剩余部分:
void main(){ 
	char i;
	IT0=1;EX0=1;EA=1;//边沿触发、INT0允许、总中断允许
	while(1){ 
		if (run) 			  
			if(dir)			  //若run=dir=1,自上而下流动
				for(i=0;i<=3;i++){
					P2=led[i];
					delay(200);
				}
		    else			  //若run=1,dir=0,自下而上流动
				for(i=3;i>=0;i--){
					P2=led[i];
					delay(200);
				}
	    else P2=0xff;            //若run=0,灯全灭
}}
  • 写中断函数(判断标志位)
key() interrupt 0{				//键控中断函数 0表示是INT0中断
	switch (P0 & 0x0f){			//修改标志位状态 保留低四位 判断哪个按键按下
		case 0x0e:run=1;break;
		case 0x0d:run=0,dir=0;break;
		case 0x0b:dir=1;break;
		case 0x07:dir=0;break;
}} 

switch (P0 & 0x0f) 这个可以保留低四位p0电压,然后,对比,就知道哪个按键按下
比如: 0x0e 就想当与0000 1110
P0.0是0,变化了,说明按键K1按下,K1按下是流水灯 run=1

 


结果:

在这里插入图片描述

运行视频:

单片机c51中断 — 中断键控流水灯

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单片机c51中断 — 中断键控流水灯 的相关文章

  • 【stm32】wifi ESP8266的透传 实验二(HAL库开发)

    一 总算完成了透传 感觉没几行代码 就是在昨天的基础上 对ESP8266的AT指令进行了封装 什么选择工作模式 STA 还是 AP 查询附近WIFI热点 连接WIFi 见解服务器的IP和端口 开启透传 我的代码的缺点 1 有点简单粗暴 逻辑
  • 教你使用gitee+PicGo+typora搭建免费的Markdown图床

    文章目录 创建gitee仓库 设置私人令牌 下载PicGo typora设置 测试时出错可能原因 注意 gitee添加了防盗链 屏蔽外链访问 注意 gitee添加了防盗链 屏蔽外链访问 注意 gitee添加了防盗链 屏蔽外链访问 现使用阿里
  • [西湖论剑2021中国杭州网络安全技能大赛]Yusa的秘密 writeup

    西湖论剑2021 Yusa的秘密 Sakura组织即将进攻地球 此时你意外得到了该组织内某个成员的电脑文件 你能从中发现本次阴谋所用的关键道具吗 注 题目中包含了五个彩蛋 且彩蛋对解题本身没有任何影响 快去发现吧 附件 Who am I z
  • 【数据结构】图文详解11道力扣链表OJ题

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 一 移除链表元素 二 反转链表 三 链表的中间节点 四 链表中倒
  • 【H5】 实现调用相机拍照功能

    H5 实现调用相机拍照功能 效果图如下 实现代码如下
  • Qt中线程的使用1

    初学Qt线程 此实例只是对Qt单一线程的使用 另外结合信号槽实现ui界面与子线程之间数据的传输 可以解决线程在运行的过程中 关闭对话框程序崩溃的问题 此实例要实现的效果图如下 界面控件的类 对象表如下 界面启动后 起初停止线程按钮是置灰的

随机推荐

  • Web的基本漏洞--代码执行漏洞RCE

    目录 一 代码执行漏洞的介绍 1 代码执行漏洞的原理 2 常用含有的代码执行漏洞的函数 3 代码执行漏洞的危害 4 代码执行漏洞的防范措施 一 代码执行漏洞的介绍 1 代码执行漏洞的原理 web应用程序是指程序员在代码中使用了一些执行函数例
  • Nilpotent

    In mathematics an element displaystyle x x of a ring displaystyle R R is called nilpotent if there exists some positive
  • 使用java进行补零操作

    很多情况下都会用到补零操作 譬如说工号01 0003什么的 以下代码用for循环和while循环实现简单的补零操作 在数字之前补零 可以补一个零 也可以补多个零 public class AddZero public static void
  • BaseMultiItemQuickAdapter实现多布局拖拽排序

    前言 BaseMultiItemQuickAdapter默认是支持但单布局拖拽功能的 如BaseItemDraggableAdapter 但是无法满足多布局拖拽需求 需要加以改造 1 梳理继承关系及构造 通过下图 可以发现BaseMulti
  • ArcObjects中的GraphicsLayer---------元素的容器

    图形元素 Graphic Element 是存储于GraphicsLayer中的 本文主要涉及的接口和类主要有以下几种 IGraphicsContainer IGraphicsLayer ICompositeGraphicsLayer Gr
  • SSM框架的科普有毒蘑菇网站系统源码+数据库+完整安装视频

    项目名称 SSM框架的科普有毒蘑菇网站系统源码 视频效果 SSM框架的科普有毒蘑菇网站系统源码 系统说明 用户测试账号 test 123456 管理员测试账号 admin 123456 数据库每个表都有详细注释 代码也有详细注释 详细说明
  • HTML基本语法格式(元素、标签)

    HTML的语法格式 阅读提醒 由于博客显示问体所以元素的 lt gt 开始和 gt 被省略了 HTML的主体格式 第一部分 和是网页文件的最外层标签 HTML中所有的内容都要在这里面 第二部分 和标签之间文本是头信息 放在元素的最上面使用
  • 关于Unity中Mecanim动画的动画状态代码控制与代码生成动画控制器

    对于多量的 复杂的 有规律的控制器使用代码生成 动画状态代码控制 1 每个动画状态 比如进入状态 离开状态 等都有可能需要代码来参与和处理 比如 进入这个动画单元后做哪些事情 来开这个动画单元后做哪些事情 为了解决这个问题 unity允许每
  • [ C++ ] — 内联函数

    1 什么是内联函数 其定义位于类声明中的函数都将自动成为内联函数 也可以使用inline限定符 在类声明之外定义成员函数 使之成为内联函数 2 内联函数的作用 引入内联函数的目的是为了解决程序中函数调用的效率问题 程序在编译器编译的时候 编
  • vue使用CSS插件scss时代码报红

    vue使用CSS插件scss时代码报红 问题描述 解决方案 1 打开设置 2 进入setting json文件修改 3 修改setting json文件 解决结果 问题描述 刚开始下载别人的代码 安装依赖运行起来后 样式引用没有问题 发现样
  • 华为OD机试 Python 最佳对手

    题目 在一个游戏中 队伍之间的对战要基于双方的实力来匹配 为了保证游戏体验 我们希望两支队伍的实力差别不超过一个上限值 现在 你将获得若干队伍的实力值 你的任务是进行队伍匹配 要求实力差最小且不超过上限 然后计算这些成功匹配的队伍间的实力差
  • 转:脱字符"^"的由来

    从事IT业二十多年 今年才知道 这个符号叫脱字符 由于最近在学Python的re正则表达式处理 就查了下这个名称的由来 转发如下 脱字符 就是说 在文章中 某个字 打漏了 打脱了 打落了 要在这个中间 把打落了 的字 插入进去 就是使用的这
  • css3设置背景图片的大小

    background size 设置背景图片的大小 以长度值或百分比显示 还可以通过cover和contain来对图片进行伸缩 语法 1 background size auto 默认值 不改变背景图片的高度和宽度 2 background
  • Eigen——问题:无法打开源文件Eigen/Dense,已解决

    刚刚开始准备按照官网的文档实验代码就出现了这个错误 surprise Solution 1 下载Eigen 并解压 1 CSDN http download csdn net download airaybaiju 10237226 2 官
  • 为什么电源中经常用肖特基二极管

    如下图为两个开关电源电路图 下面的二极管都是肖特基二极管 那么为什么电源中都是用肖特基二极管呢 主要有两个原因 1 肖特基二极管导通压降低 一般电源电流比较大 导通压降低意味着损失的功耗低 2 肖特基二极管响应时间快 一般开关电源是通过内部
  • 编程用for和while语句编写10以内相加的c语言程序,C语言循环结构程序设计

    内容详解 while语句 do while语句 for语句 循环嵌套 break和continue语句 实例展示 热身小练 打印6行6列的 矩阵 两个 之间用空格隔开 include int main for int i 1 i lt 6
  • Python-PyCrypto 下载

    python库 用于信息安全的 叫PyCrypto Linux https www dlitz net software pycrypto Windows http www voidspace org uk python modules s
  • VS2005(VC++)远程调试方法

    仅我目前了解很多人还在使用成本很高的本地调试方法 即在需要调试的机器上安装VS环境 这样的好处就是直接 但是成本很高 要在目标机器安装一个VS的Copy 国内可能不是问题 还有源代码安全问题 同步问题等等 开始 已知 A B两个服务器 如果
  • 代码规范及CodeReview要点

    为什么80 的码农都做不了架构师 gt gt gt 一 代码规范的要点 代码规范主要分为风格规范与设计规范两大类 1 代码风格规范 主要是文字上的规定 看似表面文章 实际上非常重要 具体有如下几个方面 1 缩进 2 行宽 3 断行 空白行
  • 单片机c51中断 — 中断键控流水灯

    项目文件 文件 关于项目的内容知识点可以见专栏单片机原理及应用 的第五章 中断 在第4章的实例2中 按键检测是采用查询法进行的 其流程图如图所示 问题是这样的 由于查询法 按键查询 标志位修改及彩灯循环几个环节是串联关系 当CPU运行于彩灯