补充:1.变量前加code,从RAM区变成ROM区
2.三极管的原理就是PN结
3.裸机程序是单线程的,display时不能delay

一、独立按键
1.高电平没按,低电平按了
按键原理:轮询方式(poll)-->以消耗大量CPU资源为代价
        代码:

int key_pressed(void)
{int ret = 0;if((P1 & (1 << 4)) == 0){ret = 1;}else if((P1 & (1 << 5)) == 0){ret = 2;}else if((P1 & (1 << 6)) == 0){ret = 3;}else if((P1 & (1 << 7)) == 0){ret = 4;}return ret;
}

二、中断处理(由kernel处理)
1.中断的概念:
        当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。
2.中断源:能够打断当前工作任务的事件(外部中断)
        eg:引脚的电平中断
3.中断的步骤:
1)中断源发出中断请求
2)CPU检查是否响应中断及该中断源是否被屏蔽
3)检查中断优先级(高级别 > 低级别)
        在51单片机中,中断嵌套最多2个
        优先级相同的中断请求时,谁的号小谁先来
4)保护现场
5)执行中断服务函数
6)恢复现场
        4、5、6类似于C语言中调用函数
4.51单片机中5个中断源:外部中断0、定时器中断0、外部中断1、定时器中断1、串口中断

5.1)EA:中断总开关
2)IE中断允许寄存器(可位寻址)

3)IE0:外部中断0请求源
IT0:低电平触发  IT0 = 0;下降沿触发 ITO = 1;

三、定时器(timer0、timer1)
1.TR0
        TR0:定时器T0的运行控制位。该位由软件置位和清0。当GATE(TMOD.3)=0,TR0=1时就允许T0开始计数,TR0=0时禁止T0计数。当GATE(TMOD.3)=1,TR1=0且INT0输入
高电平时,才允许T0计数   

2.

3.16位定时器    代码:

void init_timer0(void)
{TMOD &= ~(0x0f << 0);TMOD |= (1 <<0);TH0 = g_n >> 8;TL0 = g_n;TCON |= (1 << 4);IE |= (1 << 7) | (1 << 1);
}

4.晶振(12MHZ、11.0592MHZ)
1s = 1000Ms  1Ms = 1000us
        计算HZ的方法:

5.PWM
        高电平占的部分叫做占空比、从上升沿到下一个上升沿,叫一个周期
        占空比 = 高电平 /  周期

四、蜂鸣器(分为有源和无源)
1.源指的不是电源而是震荡源
2.原理图:

3.代码:main.c

#include <reg52.h>
#include "timer.h"
#include "key.h"#define HZ200 63231
#define HZ400 64383
#define HZ600 64768
#define HZ800 64959int main(void)
{init_timer0();while(1){int key = key_pressed();if(1 == key){g_n = HZ200;}else if(2 == key){g_n = HZ400;}else if(3 == key){g_n = HZ600;}else if(4 == key){g_n = HZ200;}		}
}

timer.c

#include "timer.h"
#include <reg52.h>unsigned int g_n;void init_timer0(void)
{TMOD &= ~(0x0f << 0);TMOD |= (1 <<0);TH0 = g_n >> 8;TL0 = g_n;TCON |= (1 << 4);IE |= (1 << 7) | (1 << 1);
}void timer0_handler(void) interrupt 1
{TH0 = g_n >> 8;TL0 = g_n;P2 ^= (1 << 1);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85105.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85105.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/85105.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端页面html开发案例入门实践、超链接标签、图片标签、常用站点

前端页面html开发案例入门实践 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>html案例</title> </head> <body><h1>web前端开发</h1><h2>HTML</h2><…

策略模式和模板方法模式的区别【面试题】

策略模式和模板方法模式的区别【面试题】 摘要&#xff1a; 策略模式和模板方法模式均属于行为设计模式&#xff0c;但核心差异显著。策略模式通过组合实现&#xff0c;支持运行时动态切换完整算法&#xff08;如支付方式切换&#xff09;&#xff0c;变化维度大&#xff1b;模…

从零打造前沿Web聊天室:消息系统

消息存储系统 聊天室设计&#xff0c;消息存储系统非常关键&#xff0c;因为一开始设计时使用MongoDB&#xff0c;所以后续使用schemma方式存储。 后端架构&#xff1a;express MongoDB 消息插入策略 在 MongoDB 中设计聊天消息存储时&#xff0c;插入策略的选择会影响性能…

[7-01-03].第03节:环境搭建 - 集群架构

RabbitMQ学习大纲 一、使用集群的原因 1.基于以下原因&#xff0c;需要搭建一个 RabbitMQ 集群来解决实际问题 单机版的&#xff0c;无法满足目前真实应用的要求。如果 RabbitMQ 服务器遇到内存崩溃、机器掉电或者主板故障等情况&#xff0c;会导致rabbitMQ无法提供服务单台 R…

【vivado】时序分析之Latch pins with no clock

问题&#xff1a; vivado打开时序报告&#xff0c;如下图 表示存在锁存器Latch 解决方法&#xff1a; 查看代码中是否存在状态机的状态没有写全&#xff0c;或者default中直接写了null。

如何将 MX Linux 的垂直任务栏面板移到底部

MX Linux 因其速度和较低的资源消耗&#xff0c;比同类其他 Linux 系统更快地获得了人气。它默认带有 Xfce 桌面环境&#xff0c;但任务栏在左侧且是垂直的&#xff0c;这对一部分人来说真的非常不舒服且令人烦恼。如果你也有同感&#xff0c;并且也想将 MX Linux 的任务栏自定…

python debug 监控双下划线的变量显示没有此变量

名称改写&#xff08;Name Mangling&#xff09; 在Python中&#xff0c;如果你在类中定义一个属性或方法时以双下划线开头&#xff08;例如__attribute&#xff09;&#xff0c;Python会自动对其进行名称改写。名称改写实际上是在属性或方法名前加上类名&#xff0c;以避免子…

list使用及模拟

01. list介绍 list是支持常数时间内任意位置插入删除的序列容器,具备双向迭代能力。其底层为双向链表结构,各元素存于独立节点,通过指针指向前后元素。与forward_list的主要区别:后者是单链表,仅支持单向迭代,结构更简单高效。相比array、vector、deque等序列容器,list在…

NLP基础与词嵌入:让AI理解文字(superior哥深度学习系列第13期)

13_NLP基础与词嵌入&#xff1a;让AI理解文字 superior哥深度学习系列第十三篇 从像素到文字&#xff0c;从视觉到语言——让AI跨越认知的桥梁 &#x1f3af; 前言&#xff1a;当AI学会"读懂"文字 各位小伙伴们&#xff0c;欢迎来到superior哥深度学习系列的第十三篇…

【时时三省】(C语言基础)关于变量的声明和定义

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 可能有些人弄不清楚定义与声明有什么区别&#xff0c;它们是否是一回事。有人认为声明就是定义&#xff0c;有人认为只有赋了值的才是定义。在C语言的学习中&#xff0c;关于定义与声明这两个…

Java 时间处理指南:从“踩坑”到“填坑”实战

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 场景问题&#xff1a;订单处理系统的时间计算 假设你正在开发一个电商订单系统&#xff0c;需要解决以下问题&#xff1a; 用户下单后&#xff0c;需在…

基于Java的Excel列数据提取工具实现

摘要&#xff1a;本文介绍了一个使用Java语言开发的Excel列数据提取工具&#xff0c;该工具借助Apache POI库实现对Excel文件的读取与特定列数据提取功能。通过用户输入文件路径与列名&#xff0c;程序可从指定Excel文件中提取相应列的数据并展示&#xff0c;同时详细阐述了关键…

关于人工智能未来的趋势

学而不思则罔 翻译&#xff1a;使用深度学习、强化学习却不用专家系统&#xff0c;就会产生幻觉。 思而不学则殆 翻译&#xff1a;只有专家系统逻辑推理&#xff0c;但是不用大模型更新知识&#xff0c;就无法发展下去了。 因此&#xff0c;未来智能的范式应该是&#xff1a; …

Java八股文——MySQL「性能调优篇」

MySQL的EXPLAIN有什么作用&#xff1f; 面试官您好&#xff0c;EXPLAIN命令是我在进行SQL性能优化时&#xff0c;使用最频繁、也最重要的一个工具。 它的核心作用可以一句话概括&#xff1a;模拟MySQL的查询优化器来执行一条SQL语句&#xff0c;并向我们展示出它最终决定采用…

win打印机共享处理

win打印机共享处理 软件链接 无法启动Print Spooler服务错误193:0xc1的解决方案主要涉及修复服务依赖关系、清理打印缓存及修复系统文件‌。该错误通常由系统文件损坏、注册表配置异常或依赖服务未启动导致&#xff0c;可通过以下步骤系统化解决。‌‌ 解决方法&#xff1a;替换…

C++ map代码练习 1、2、priority_queue基础概念、对象创建、数据插入、获取堆顶、出队操作、大小操作,自定义结构、代码练习 1 2

map代码练习1&#xff0c;对应力扣 两个数据的交集&#xff0c;代码见下 class Solution { public:vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {map<int, int> cnt;vector<int> ans;for(int i0; i<nums1.size(…

三天冲刺《编译原理》——笔记(一)

点关注不迷路哟。你的点赞、收藏&#xff0c;一键三连&#xff0c;是我持续更新的动力哟&#xff01;&#xff01;&#xff01; 持续关注我~~~主页&#xff0c;查看更多内容哟&#xff08;希望你能在这里有所收获&#x1f92d;&#xff09;。点关注&#xff0c;不迷路&#xf…

代理模式Proxy Pattern

模式定义 给某一个对象提供一个代理&#xff0c;并由代理对象控制对原对象的引用 对象结构型模式 模式结构 Subject&#xff1a;抽象主题角色Proxy&#xff1a;代理主题角色RealSubject&#xff1a;真实主题角色 代理类实现代码 public class Proxy implements Subject {p…

基于YOLOv11与单目测距的实战教程:从目标检测到距离估算

引言 在计算机视觉领域&#xff0c;目标检测与距离估算的结合是自动驾驶、机器人导航等场景的关键技术。本文将以YOLOv8模型为核心&#xff0c;结合单目相机的几何模型&#xff0c;实现对视频中目标的实时检测与距离估算。代码参考自单目测距原理博客&#xff0c;并通过实践验…

代码生成器使用原理以及使用方法

代码生成器使用原理以及使用方法 版本号&#xff1a;1.0 二Ο二五年二月 目录 文档介绍 1.1编写目的 1.2文档范围 1.3读者对象 系统设计 2.1设计目标 2.2设计思路 2.3代码实现原理 使用方法 3.1如何使用 3.2如何修改&#xff1f; 对原程序的bug修改及简…