第16届蓝桥杯单片机模拟试题Ⅲ

试题

代码 

sys.h

#ifndef __SYS_H__
#define __SYS_H__#include <STC15F2K60S2.H>
//sys.c
extern unsigned char UI;					//界面标志(0湿度界面、1参数界面、2时间界面)
extern unsigned char time;				//时间间隔(1s~10S)
extern bit ssflag;								//启动/停止标志(0启动、1停止)
void init74hc138(unsigned char n);//译码器选通
void init();											//系统初始化
void relay(bit flag);							//继电器吸合控制
void led(unsigned char n);				//LED控制
void led_if();										//led指示灯
//iic.c
extern unsigned char shidu;						//湿度值
extern unsigned char shidu_canshu;		//湿度参数(30%~90%)
extern bit flag_relay;								//继电器状态
unsigned char adc(unsigned char addr);//模数转换选通
float get_Vrb2();											//获取RB2电压值
void get_shidu();											//RB2电压值转换为湿度数据
//seg_key.c
extern unsigned char Seg_Buff[8];//数码管缓存
void Key_Loop();								 //按键扫描
void Seg_Loop();								 //数码管刷新
void seg_ui();									 //界面选择
#endif

main.c

#include "sys.h"
bit flag_seg=0;
bit flag_key=0;
bit flag_shidu=0;
bit flag_relay_con=0;
void Timer0_Init(void)		//100微秒@12.000MHz
{AUXR |= 0x80;			//定时器时钟1T模式TMOD &= 0xF0;			//设置定时器模式TL0 = 0x50;				//设置定时初始值TH0 = 0xFB;				//设置定时初始值TF0 = 0;				//清除TF0标志TR0 = 1;				//定时器0开始计时ET0 = 1;				//使能定时器0中断EA = 1;
}
void main(){init();Timer0_Init();get_shidu();while(1){if(flag_seg){flag_seg=0;Seg_Loop();}if(flag_key){flag_key=0;Key_Loop();seg_ui();}if(flag_shidu){flag_shidu=0;get_shidu();seg_ui();}if(flag_relay_con){flag_relay_con=0;flag_relay=0;relay(0);}led_if();}
}
void Timer0_Isr(void) interrupt 1
{static unsigned char count1=0;static unsigned char count2=0;static unsigned int count3=0;static unsigned int count4=0;count1++;count2++;count3++;if(count1==2){count1=0;flag_seg=1;}if(count2==50){count2=0;flag_key=1;}if(count3==1000){count3=0;flag_shidu=1;}if(flag_relay){count4++;if(count4==((unsigned int)time*10000)){count4=0;flag_relay_con=1;}}
}

sys.c

#include "sys.h"
unsigned char UI=0;
unsigned char time=3;
bit ssflag=1;
void init74hc138(unsigned char n){P2=(P2&0x1f)|(n<<5);P2&=0x1f;
}
void init(){P0=0x00;init74hc138(5);P0=0xff;init74hc138(4);
}
void relay(bit flag){if(flag) P0=0x10;else P0=0x00;init74hc138(5);
}
void led(unsigned char n){P0=~(0x01<<(n-1));init74hc138(4);
}
void led_if(){switch(UI){case 0:led(1);break;case 1:led(2);break;case 2:led(3);break;}if(!ssflag) led(8);
}

seg_key.c

#include "sys.h"
sbit COL1=P4^4;
sbit COL2=P4^2;
sbit ROW3=P3^2;
sbit ROW4=P3^3;
code unsigned char Seg_Table[]={0xc0,//00xf9,//10xa4,//20xb0,//30x99,//40x92,//50x82,//60xf8,//70x80,//80x90,//90xc6,//C 100x86,//E 11 0x89,//H 120xff	//熄灭 13
};
unsigned char Seg_Buff[8]={13,13,13,13,13,13,13,13};
unsigned char keyval,keyold,keyup,keydown;
unsigned char key_scan(){COL1=0;COL2=1;if(ROW4==0) return 4;if(ROW3==0) return 5;COL1=1;COL2=0;if(ROW4==0) return 8;if(ROW3==0) return 9;return 0;
}
void Key_Loop(){keyval=key_scan();keydown=keyval&(keyold^keyval);keyup=~keyval&(keyold^keyval);//s4为界面切换按键if(keyval==4&&keyold!=4){UI++;if(UI==3) UI=0;}//s5为启动停止按键if(keyval==5&&keyold!=5){ssflag=!ssflag;}//s8为减按键if(keyval==8&&keyold!=8){if(UI==1){if(shidu_canshu>30)shidu_canshu-=5;elseshidu_canshu=90;}else if(UI==2){if(time>1)time--;elsetime=10;}}//s9为加按键if(keyval==9&&keyold!=9){if(UI==1){if(shidu_canshu<90)shidu_canshu+=5;elseshidu_canshu=30;}else if(UI==2){if(time<10)time++;elsetime=1;}}keyold=keyval;keyval=0;
}
void seg(unsigned char addr,num){P0=0xff;init74hc138(7);P0=0x01<<addr;init74hc138(6);P0=Seg_Table[num];init74hc138(7);
}
void Seg_Loop(){static unsigned char i=0;seg(i,Seg_Buff[i]);i++;if(i==8) i=0;
}
//湿度界面
void ui0(){Seg_Buff[7]=shidu%10;Seg_Buff[6]=shidu/10;Seg_Buff[5]=13;Seg_Buff[4]=13;Seg_Buff[3]=13;Seg_Buff[2]=13;Seg_Buff[1]=13;Seg_Buff[0]=10;//C
}
//参数界面
void ui1(){Seg_Buff[7]=shidu_canshu%10;Seg_Buff[6]=shidu_canshu/10;Seg_Buff[5]=13;Seg_Buff[4]=13;Seg_Buff[3]=13;Seg_Buff[2]=13;Seg_Buff[1]=13;Seg_Buff[0]=11;//E
}
//参数界面
void ui2(){Seg_Buff[7]=time%10;if(time<10)Seg_Buff[6]=13;elseSeg_Buff[6]=1;Seg_Buff[5]=13;Seg_Buff[4]=13;Seg_Buff[3]=13;Seg_Buff[2]=13;Seg_Buff[1]=13;Seg_Buff[0]=12;//H
}
void seg_ui(){switch(UI){case 0:ui0();break;case 1:ui1();break;case 2:ui2();break;}
}

ii.c

#include "sys.h"
#include "intrins.h"
#define DELAY_TIME	10
sbit scl=P2^0;
sbit sda=P2^1;
unsigned char shidu;
unsigned char shidu_canshu=50;
bit flag_relay=0;
static void I2C_Delay(unsigned char n)
{do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();		}while(n--);      	
}
void I2CStart(void)
{sda = 1;scl = 1;I2C_Delay(DELAY_TIME);sda = 0;I2C_Delay(DELAY_TIME);scl = 0;    
}
void I2CStop(void)
{sda = 0;scl = 1;I2C_Delay(DELAY_TIME);sda = 1;I2C_Delay(DELAY_TIME);
}
void I2CSendByte(unsigned char byt)
{unsigned char i;for(i=0; i<8; i++){scl = 0;I2C_Delay(DELAY_TIME);if(byt & 0x80){sda = 1;}else{sda = 0;}I2C_Delay(DELAY_TIME);scl = 1;byt <<= 1;I2C_Delay(DELAY_TIME);}scl = 0;  
}
unsigned char I2CReceiveByte(void)
{unsigned char da;unsigned char i;for(i=0;i<8;i++){   scl = 1;I2C_Delay(DELAY_TIME);da <<= 1;if(sda) da |= 0x01;scl = 0;I2C_Delay(DELAY_TIME);}return da;    
}
unsigned char I2CWaitAck(void)
{unsigned char ackbit;scl = 1;I2C_Delay(DELAY_TIME);ackbit = sda; scl = 0;I2C_Delay(DELAY_TIME);return ackbit;
}
void I2CSendAck(unsigned char ackbit)
{scl = 0;sda = ackbit; I2C_Delay(DELAY_TIME);scl = 1;I2C_Delay(DELAY_TIME);scl = 0; sda = 1;I2C_Delay(DELAY_TIME);
}
unsigned char adc(unsigned char addr){unsigned char temp;I2CStart();EA = 0;I2CSendByte(0x90);I2CWaitAck();I2CSendByte(addr);I2CWaitAck();I2CStart();I2CSendByte(0x91);I2CWaitAck();temp=I2CReceiveByte();I2CSendAck(1);I2CStop();EA = 1;return temp;
}
float get_Vrb2(){return (float)adc(3)/255.0*5.0;
}
void get_shidu(){ float temp;temp=get_Vrb2();if(temp<1.0){shidu=10;}else if(temp<=4){shidu=(unsigned char)(80.0/3.0*(temp-1)+10+0.5);}else{shidu=90;}if(ssflag){flag_relay=0;relay(0);}else{if(shidu<shidu_canshu&&!flag_relay){flag_relay=1;relay(1);}}
}

测评结果

尚待解决的问题

 最后一项测评一直不正确,在板子上显示正常。感谢各位大佬们批评指导

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

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

相关文章

Node.js中URL模块详解

Node.js 中 URL 模块全部 API 详解 1. URL 类 const { URL } require(url);// 1. 创建 URL 对象 const url new URL(https://www.example.com:8080/path?queryvalue#hash);// 2. URL 属性 console.log(协议:, url.protocol); // https: console.log(主机名:, url.hos…

Java接口性能优化面试问题集锦:高频考点与深度解析

1. 如何定位接口性能瓶颈&#xff1f;常用哪些工具&#xff1f; 考察点&#xff1a;性能分析工具的使用与问题定位能力。 核心答案&#xff1a; 工具&#xff1a;Arthas&#xff08;在线诊断&#xff09;、JProfiler&#xff08;内存与CPU分析&#xff09;、VisualVM、Prometh…

WheatA小麦芽:农业气象大数据下载器

今天为大家介绍的软件是WheatA小麦芽&#xff1a;专业纯净的农业气象大数据系统。下面&#xff0c;我们将从软件的主要功能、支持的系统、软件官网等方面对其进行简单的介绍。 主要内容来源于软件官网&#xff1a;WheatA小麦芽的官方网站是http://www.wheata.cn/ &#xff0c;…

Python10天突击--Day 2: 实现观察者模式

以下是 Python 实现观察者模式的完整方案&#xff0c;包含同步/异步支持、类型注解、线程安全等特性&#xff1a; 1. 经典观察者模式实现 from abc import ABC, abstractmethod from typing import List, Anyclass Observer(ABC):"""观察者抽象基类""…

CST1019.基于Spring Boot+Vue智能洗车管理系统

计算机/JAVA毕业设计 【CST1019.基于Spring BootVue智能洗车管理系统】 【项目介绍】 智能洗车管理系统&#xff0c;基于 Spring Boot Vue 实现&#xff0c;功能丰富、界面精美 【业务模块】 系统共有三类用户&#xff0c;分别是&#xff1a;管理员用户、普通用户、工人用户&…

Windows上使用Qt搭建ARM开发环境

在 Windows 上使用 Qt 和 g++-arm-linux-gnueabihf 进行 ARM Linux 交叉编译(例如针对树莓派或嵌入式设备),需要配置 交叉编译工具链 和 Qt for ARM Linux。以下是详细步骤: 1. 安装工具链 方法 1:使用 MSYS2(推荐) MSYS2 提供 mingw-w64 的 ARM Linux 交叉编译工具链…

Python爬虫教程011:scrapy爬取当当网数据开启多条管道下载及下载多页数据

文章目录 3.6.4 开启多条管道下载3.6.5 下载多页数据3.6.6 完整项目下载3.6.4 开启多条管道下载 在pipelines.py中新建管道类(用来下载图书封面图片): # 多条管道开启 # 要在settings.py中开启管道 class DangdangDownloadPipeline:def process_item(self, item, spider):…

Mysql -- 基础

SQL SQL通用语法&#xff1a; SQL分类&#xff1a; DDL: 数据库操作 查询&#xff1a; SHOW DATABASES&#xff1b; 创建&#xff1a; CREATE DATABASE[IF NOT EXISTS] 数据库名 [DEFAULT CHARSET字符集] [COLLATE 排序规则]&#xff1b; 删除&#xff1a; DROP DATABA…

实操(环境变量)Linux

环境变量概念 我们用语言写的文件编好后变成了程序&#xff0c;./ 运行的时候他就会变成一个进程被操作系统调度并运行&#xff0c;运行完毕进程相关资源被释放&#xff0c;因为它是一个bash的子进程&#xff0c;所以它退出之后进入僵尸状态&#xff0c;bash回收他的退出结果&…

torch.cat和torch.stack的区别

torch.cat 和 torch.stack 是 PyTorch 中用于组合张量的两个常用函数&#xff0c;它们的核心区别在于输入张量的维度和输出张量的维度变化。以下是详细对比&#xff1a; 1. torch.cat (Concatenate) 作用&#xff1a;沿现有维度拼接多个张量&#xff0c;不创建新维度 输入要求…

深入解析@Validated注解:Spring 验证机制的核心工具

一、注解出处与核心定位 1. 注解来源 • 所属框架&#xff1a;Validated 是 Spring Framework 提供的注解&#xff08;org.springframework.validation.annotation 包下&#xff09;。 • 核心定位&#xff1a; 作为 Spring 对 JSR-380&#xff08;Bean Validation 2.0&#…

2025年认证杯数学建模竞赛A题完整分析论文(含模型、可运行代码)(共32页)

2025年认证杯数学建模竞赛A题完整分析论文 目录 摘要 一、问题分析 二、问题重述 三、模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1解析 4.1.2问题1模型建立 4.1.3问题1样例代码&#xff08;仅供参考&#xff09; 4.1.4问题1求解结果分析&#xff08…

Google A2A协议,是为了战略性占领标准?

一、导读 2025 年 4 月 9 日&#xff0c;Google 正式发布了 Agent2Agent&#xff08;A2A&#xff09;协议。 A2A 协议致力于打破智能体之间的隔阂&#xff0c;让它们能够跨越框架和供应商的限制&#xff0c;以一种标准化、开放的方式进行沟通与协作 截止到现在&#xff0c;代…

Ansible:roles角色

文章目录 Roles角色Ansible Roles目录编排Roles各目录作用创建 roleplaybook调用角色调用角色方法1&#xff1a;调用角色方法2&#xff1a;调用角色方法3&#xff1a; roles 中 tags 使用实战案例 Roles角色 角色是ansible自1.2版本引入的新特性&#xff0c;用于层次性、结构化…

MCU的USB接口作为 USB CDC串口输出

引用&#xff1a; https://microchip-mplab-harmony.github.io/usb_apps_device/apps/usb_uart_bridge_dual/readme.html STM32 USB使用记录&#xff1a;使用CDC类虚拟串口&#xff08;VCP&#xff09;进行通讯_stm32 usb使用记录:使用cdc类虚拟串口(vcp)进行通讯-CSDN博客 前…

深度解析强化学习:原理、算法与实战

深度解析强化学习:原理、算法与实战 0. 前言1. 强化学习基础1.1 基本概念1.2 马尔科夫决策过程1.3 目标函数1.4 智能体学习过程2. 计算状态值3. 计算状态-动作值4. Q 学习4.1 Q 值4.2 使用 Q 学习进行 frozen lake 游戏4.3. frozen lake 问题4.4 实现 Q 学习小结系列链接0. 前…

UE5蓝图之间的通信------接口

一、创建蓝图接口 二、双击创建的蓝图接口&#xff0c;添加函数&#xff0c;并重命名新函数。 三、在一个蓝图&#xff08;如玩家角色蓝图&#xff09;中实现接口&#xff0c;如下图&#xff1a; 步骤一&#xff1a;点击类设置 步骤二&#xff1a;在细节面板已经实现的接口中…

2025 年“认证杯”数学中国数学建模网络挑战赛 A题 小行星轨迹预测

近地小行星&#xff08; Near Earth Asteroids, NEAs &#xff09;是轨道相对接近地球的小行 星&#xff0c;它的正式定义为椭圆轨道的近日距不大于 1.3 天文单位&#xff08; AU &#xff09;的小行星。 其中轨道与地球轨道最近距离小于 0.05A 且直径大于 140 米的小行星被…

Axure中继器(Repeater): 列表多选和 列表查询

文章目录 引言I 列表多选添加选中交互事件添加未选中交互事件II 列表查询知识点操作说明引言 基于鼠标点击交互事件实现列表多选列表查询 I 列表多选 添加选中交互事件 给列标题第一列多选框元件命名为ckeck,并同时添加选中交互事件; 同步添加设置选择/选中动作,目标元件选…

windows11下pytorch(cpu)安装

先装anaconda 见最下方 Pytorch 官网&#xff1a;PyTorch 找到下图&#xff08;不要求版本一样&#xff09;&#xff08;我的电脑是集显&#xff08;有navdia的装gpu&#xff09;&#xff0c;装cpu&#xff09; 查看已有环境列表 创建环境 conda create –n 虚拟环境名字(…