蓝桥杯单片机刷题——按键设置当前采集距离为距离参数

设计要求

驱动超声波传感器,启动距离测量功能,并将其结果显示到数码管上。

按键“S5”定义为参数按键,按下S5按键,设备自动将当前采集的距离数据作为距离参数;

若测量的距离数据超过距离参数,指示灯L1点亮,否则L1熄灭。

距离数据保留小数点后两位有效数字,数码管显示格式如下:

距离为0.40m(数码管高位显示标识符U)

备注

单片机IRC振荡器频率设置为12MHz。

按键模式:BTN;扩展方式:IO模式。

距离参数初始值为0。

代码

sys.h

#ifndef __SYS_H__
#define __SYS_H__#include <STC15F2K60S2.H>
//sys.c
extern float distance_keep;
extern float distance;
void init74hc138(unsigned char n);
void init();
void led1();
//seg_key.c
extern unsigned char Seg_Buff[8];
void Key_Loop();
void Seg_Loop();
void ui();#endif

main.c

#include "sys.h"
#include "intrins.h"
#define NUM 10
sbit TX=P1^0;
sbit RX=P1^1;
bit flag1=0,flag2=0,flag3=0;
void delay(){//超声波延时unsigned char i=0;for(i;i<NUM;i++){_nop_();}
}
void Timer1_Init(void)		//100微秒@12.000MHz
{AUXR |= 0x40;			//定时器时钟1T模式TMOD &= 0x0F;			//设置定时器模式TL1 = 0x50;				//设置定时初始值TH1 = 0xFB;				//设置定时初始值TF1 = 0;				//清除TF1标志TR1 = 1;				//定时器1开始计时ET1 = 1;				//使能定时器1中断EA=1;
}
void send_wave(){//发送超声波脉冲unsigned char i=8;while(i--){TX=1;delay();TX=0;}
}
void re_wave(){//接收超声波并计算距离send_wave();TH0=0;TL0=0;TR0=1;while((RX==1)&&(TF0==0));TR0=0;if(!TF0){distance=(float)(TH0<<8|TL0)*0.017;//cm}else{TF0=0;distance=0.0;}
}
void main(){init();Timer1_Init();TMOD |= 0x01;while(1){if(flag1){flag1=0;Seg_Loop();}if(flag2){flag2=0;Key_Loop();}if(flag3){flag3=0;re_wave();led1();ui();}}
}
void Timer1_Isr(void) interrupt 3
{static unsigned char count1=0;static unsigned char count2=0;static unsigned int count3=0;count1++;count2++;count3++;if(count1==2){count1=0;flag1=1;}if(count2==50){count2=1;flag2=1;}if(count3==1000){count3=0;flag3=1;}
}

sys.c

#include "sys.h"
float distance=0;
float distance_keep=0;
void init74hc138(unsigned char n){P2=(P2&0x1f)|(n<<5);P2&=0x1f;
}
void init(){P0=0x00;init74hc138(5);P0=0xff;init74hc138(4);
}
void led1(){static bit flag=0;if(distance>distance_keep&&!flag){flag=1;P0=0xfe;init74hc138(4);}else if(distance<=distance_keep&&flag){flag=0;P0=0xff;init74hc138(4);}
}

seg_key.c

#include "sys.h"
code unsigned char Seg_Table[]={0xc0,//00xf9,//10xa4,//20xb0,//30x99,//40x92,//50x82,//60xf8,//70x80,//80x90,//90xc1,//U 100xff //熄灭 11
};
unsigned char Seg_Buff[8]={11,11,11,11,11,11,11,11};
unsigned char keyval,keyold,keyup,keydown;
void Key_Loop(){if(P32==0)keyval=5;keydown=keyval&(keyold^keyval);keyup=~keyval&(keyold^keyval);if(keyval==5&&!keyold!=5){distance_keep=distance;}keyold=keyval;keyval=0;
}
void seg(unsigned char addr,num){P0=0xff;init74hc138(7);P0=0x01<<addr;init74hc138(6);P0=Seg_Table[num];if(addr==5) P0&=0x7f;init74hc138(7);
}
void Seg_Loop(){static unsigned char i=0;seg(i,Seg_Buff[i]);i++;if(i==8)i=0;
}
void ui(){Seg_Buff[0]=10;Seg_Buff[1]=11;Seg_Buff[2]=11;Seg_Buff[3]=11;Seg_Buff[4]=11;if(distance>=100)Seg_Buff[5]=(unsigned char)distance/100;elseSeg_Buff[5]=0;if(distance>=10)Seg_Buff[6]=(unsigned char)distance/10%10;elseSeg_Buff[6]=0;if(distance>0)Seg_Buff[7]=(unsigned char)(distance+0.5)%10;elseSeg_Buff[7]=0;
}

测评结果

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

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

相关文章

KV Cache大模型推理加速功能

KV Cache KV Cache是大模型标配的推理加速功能&#xff0c;也是推理过程中&#xff0c;显存资源巨大开销的元凶之一。在模型推理时&#xff0c;KV Cache在显存占用量可达30%以上。 目前大部分针对KV Cache的优化工作&#xff0c;主要集中在工程上。比如著名的VLLM&#xff0c…

Windows 图形显示驱动开发-WDDM 2.0功能_上下文监视

功能概述 上下文监视机制是GPU与CPU协同计算的核心同步技术&#xff0c;通过受监视围栏&#xff08;Monitored Fence&#xff09;实现跨硬件单元的高效协调。其核心目标是解决以下场景的同步需求&#xff1a; GPU引擎间同步&#xff1a;例如在多渲染管线中&#xff0c;后处理…

基于YOLOv8的机场跑道异物检测识别系统:提升航空安全的新一代解决方案(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 1. 机场跑道异物检测领域概述 机场跑道异物(Foreign Object Debris, FOD)是指存在于机场跑道、滑行道等关…

网络协议学习

最近在适配ESP32的网络驱动&#xff0c;借此机会先学习一下网络通信协议。 以太网帧、IP包及TCP与UDP的报文格式一文读懂网络报问中的检验和&#xff08;checksum&#xff09;—— 原理举例代码 提问腾讯元宝提示词&#xff1a; TCP窗口是干什么的拥塞窗口是什么的

fit 转 gpx

新增 fit 转 gpx 功能 https://fittools.cc/home/fit2gpx

C++ I/O 性能优化指南

在高性能计算和大规模数据处理中&#xff0c;I/O 性能优化是提升系统整体效率的关键环节。C 作为一种高性能编程语言&#xff0c;提供了丰富的工具和机制来优化 I/O 操作。本文将详细介绍在 Linux 环境下&#xff0c;如何通过代码层面的优化、系统调用的选择以及多线程技术等手…

Python中内置的数据结构类型详析(内置数据容器)

目录 1. 元组&#xff08;Tuple&#xff09;​​2. 列表&#xff08;List&#xff09;​3. 字典&#xff08;Dict&#xff09;4. 集合&#xff08;Set&#xff09;​​5. 字符串&#xff08;Str&#xff09;6. 队列&#xff08;Queue&#xff09;与栈&#xff08;Stack&#xf…

Socket多路复用网络编程应用总结

Socket多路复用网络编程应用总结 概述 • 传统I/O模型的局限性&#xff1a;传统阻塞式I/O模型每次仅在一个文件描述符&#xff08;File Descriptor, FD&#xff09;上执行I/O操作&#xff0c;导致程序需等待单个操作完成&#xff0c;无法高效处理多连接场景&#xff08;如高并…

安卓开发提示Android Gradle plugin错误

The project is using an incompatible version (AGP 8.9.1) of the Android Gradle plugin. Latest supported version is AGP 8.8.0-alpha05 See Android Studio & AGP compatibility options. 改模块级 build.gradle&#xff08;如果有独立配置&#xff09;&#xff1a;…

【C++初阶】--- vector容器功能模拟实现

1.什么是vector&#xff1f; 在 C 里&#xff0c;std::vector 是标准模板库&#xff08;STL&#xff09;提供的一个非常实用的容器类&#xff0c;它可以看作是动态数组 2.成员变量 iterator _start;&#xff1a;指向 vector 中第一个元素的指针。 iterator _finish;&#x…

分布式锁在秒杀场景中的Python实现与CAP权衡

目录 一、分布式锁的前世今生 二、秒杀系统的 “硬核” 挑战 三、Python 实现分布式锁的 “实战演练” Redis 实现:快准狠 ZooKeeper 实现:稳如老狗 数据库实现:老实本分 四、CAP 理论的 “三角恋” 五、性能优化的 “锦囊妙计” 锁粒度控制:粗细有道 超时机制:别…

企业级开发SpringBoost玩转Elasticsearch

案例 Spring Boot 提供了 spring-data-elasticsearch 模块&#xff0c;可以方便地集成 Elasticsearch。 下面我们将详细讲解如何在 Spring Boot 中使用 Elasticsearch 8&#xff0c;并提供示例代码。 1. 添加依赖: 首先&#xff0c;需要在 pom.xml 文件中添加 spring-data-e…

磐石云智能语音客服系统——技术革新引领服务新体验

在人工智能技术飞速发展的今天&#xff0c;企业对于智能化客户服务的需求日益增长。磐石云智能语音客服系统凭借其前沿技术架构与深度场景适配能力&#xff0c;正在重新定义人机交互的边界。本文将深入解析该系统如何通过技术创新实现服务效率与体验的双重突破。 一、意图识别…

OpenGL学习笔记(assimp封装、深度测试、模板测试)

目录 模型加载Assimp网格模型及导入 深度测试深度值精度深度缓冲的可视化深度冲突 模板测试物体轮廓 GitHub主页&#xff1a;https://github.com/sdpyy1 OpenGL学习仓库:https://github.com/sdpyy1/CppLearn/tree/main/OpenGLtree/main/OpenGL):https://github.com/sdpyy1/CppL…

通过AWS EKS 生成并部署容器化应用

今天给大家分享一个实战例子&#xff0c;如何在EKS上创建容器化应用并通过ALB来发布。先介绍一下几个基本概念&#xff1a; IAM, OpenID Connect (OIDC) 2014 年&#xff0c;AWS Identity and Access Management 增加了使用 OpenID Connect (OIDC) 的联合身份支持。此功能允许…

入侵检测snort功能概述

1. 数据包嗅探与日志记录 网络流量监控&#xff1a;实时捕获和分析网络数据包&#xff08;支持以太网、无线等&#xff09;。 日志记录&#xff1a;将数据包以二进制格式&#xff08;pcap&#xff09;或文本格式存储&#xff0c;供后续分析。 2. 协议分析与解码 深度协议解析…

【Easylive】定时任务-每日数据统计和临时文件清理

【Easylive】项目常见问题解答&#xff08;自用&持续更新中…&#xff09; 汇总版 这个定时任务系统主要包含两个核心功能&#xff1a;每日数据统计和临时文件清理。下面我将详细解析这两个定时任务的实现逻辑和技术要点&#xff1a; Component Slf4j public class SysTas…

蓝桥杯 15g

班级活动 问题描述 小明的老师准备组织一次班级活动。班上一共有 nn 名 (nn 为偶数) 同学&#xff0c;老师想把所有的同学进行分组&#xff0c;每两名同学一组。为了公平&#xff0c;老师给每名同学随机分配了一个 nn 以内的正整数作为 idid&#xff0c;第 ii 名同学的 idid 为…

如何使用AI辅助开发R语言

R语言是一种用于统计计算和图形生成的编程语言和软件环境&#xff0c;很多学术研究和数据分析的科学家和统计学家更青睐于它。但对与没有编程基础的初学者而言&#xff0c;R语言也是有一定使用难度的。不过现在有了通义灵码辅助编写R语言代码&#xff0c;我们完全可以用自然语言…

CISCO组建RIP V2路由网络

1.实验准备&#xff1a; 2.具体配置&#xff1a; 2.1根据分配好的IP地址配置静态IP&#xff1a; 2.1.1PC配置&#xff1a; PC0&#xff1a; PC1&#xff1a; PC2&#xff1a; 2.1.2路由器配置&#xff1a; R0&#xff1a; Router>en Router#conf t Enter configuration…