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

  1. 按键程序

1.1 主函数

cpp 复制代码
#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 头文件

cpp 复制代码
#ifndef _KEY_H_
#define _KEY_H_

extern void init_key(void);
extern int key_pressed(void);

#endif 

1.3 源文件

cpp 复制代码
#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;	
}
  1. 中断

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 外部中断的初始化函数

cpp 复制代码
void init_eint(void)   
{
	P3 |= ((1 << 2) | (1 << 3) );
	IE |= ((1 << 7) | (1 << 2) | (1 << 0));
	TCON |= ((1 << 0) | (1 << 2));

}

2.5 外部中断的的作用函数

cpp 复制代码
void eint0_handeler(void) interrupt 0
{
	delay(0x1fff);
	cnt++;
}

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

3.定时器

相关推荐
冷雨夜中漫步4 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
HABuo5 小时前
【linux文件系统】磁盘结构&文件系统详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
盐焗西兰花6 小时前
鸿蒙学习实战之路-Reader Kit修改翻页方式字体大小及行间距最佳实践
学习·华为·harmonyos
QiZhang | UESTC6 小时前
学习日记day76
学习
久邦科技6 小时前
20个免费电子书下载网站,实现电子书自由(2025持续更新)
学习
m0_736919106 小时前
C++代码风格检查工具
开发语言·c++·算法
2501_944934736 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
Gain_chance6 小时前
34-学习笔记尚硅谷数仓搭建-DWS层最近一日汇总表建表语句汇总
数据仓库·hive·笔记·学习·datagrip
黎雁·泠崖7 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
不能跑的代码不是好代码7 小时前
STM32窗口看门狗(WWDG)知识点及标准库使用指南
stm32·单片机·嵌入式硬件