嵌入式学习——51单片机——(按键、中断)day17

2024-05-11 11:44

本文主要是介绍嵌入式学习——51单片机——(按键、中断)day17,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 按键程序

1.1 主函数

#include <reg51.h>
#include "digit.h"
#include "key.h"void delay(int n)
{while (n--);
}int main(void)
{int cnt = 0;init_digit();init_key();while (1){	if (2 == key_pressed()){cnt++;delay(0x5fff);}show_number(cnt);}return 0;
}

1.2 头文件

#ifndef _KEY_H_
#define _KEY_H_extern void init_key(void);
extern int key_pressed(void);#endif 

1.3 源文件

#include <reg51.h>
#include "digit.h"
#include "key.h"void init_key(void)
{P1 |= ((1 << 4) | (1 << 5) | (1 << 6) | (1 << 7));P3 |= (1 << 5);
}int key_pressed(void)
{int ret = 0;if (0 == (P1 & (1 << 4))){ret = 1;}else if (0 == (P1 & (1 << 5))){ret = 2;}else if (0 == (P1 & (1 << 6))){ret = 3;}else if (0 == (P1 & (1 << 7))){ret = 4;}else if (0 == (P3 & (1 << 5))){ret = 5;}return ret;	
}

2. 中断

2.1 中断的定义

        当CPU正在处理某件事情的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完后,再回到原来中断的地方继续原来的工作。

2.2 中断源的定义

        可以引发中断是事件、条件或者硬件模块

        常见的中断源

                1. 外部中断源

                2. 定时器、计数器中断源

                3. 串口中断源

                4. ADC中断源

                5. 比较器中断源

                6. 看门狗定时器中断源

2.3 中断执行流程

        1. 中断源发出中断请求

        2. CPU查询中断是否被运行、以及中断是否被屏蔽

        3. CPU考察中断优先级

        4. CPU保护现场

        5. 执行中断服务函数

        6. 恢复现场

2.4 外部中断的初始化函数

void init_eint(void)   
{P3 |= ((1 << 2) | (1 << 3) );IE |= ((1 << 7) | (1 << 2) | (1 << 0));TCON |= ((1 << 0) | (1 << 2));}

2.5 外部中断的的作用函数

void eint0_handeler(void) interrupt 0
{delay(0x1fff);cnt++;
}void eint1_handeler(void) interrupt 2
{delay(0xfff);cnt--;
}

3.定时器

这篇关于嵌入式学习——51单片机——(按键、中断)day17的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/979440

相关文章

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1