当前位置: 首页 > article >正文

第十三届蓝桥杯单片机省赛程序设计试题

目录

试题

各程序块代码

init.c

main.c

other.h

other.c

key.c

seg.c

onewire.c部分

ds1302.c部分


试题

 

各程序块代码

init.c

#include "other.h"void init74hc138(unsigned char n){P2=(P2&0x1f)|(n<<5);P2&=0x1f;
}
void init(){P0=0x00;init74hc138(5);P0=0xff;init74hc138(4);
}

main.c

#include "other.h"
void Timer0_Init(void)		//1毫秒@12.000MHz
{AUXR |= 0x80;			//定时器时钟1T模式TMOD &= 0xF0;			//设置定时器模式TL0 = 0x20;				//设置定时初始值TH0 = 0xD1;				//设置定时初始值TF0 = 0;				//清除TF0标志TR0 = 1;				//定时器0开始计时ET0 = 1;				//使能定时器0中断EA=1;
}
void Timer1_Init(void)		//1毫秒@12.000MHz
{AUXR |= 0x40;			//定时器时钟1T模式TMOD &= 0x0F;			//设置定时器模式TL1 = 0x20;				//设置定时初始值TH1 = 0xD1;				//设置定时初始值TF1 = 0;				//清除TF1标志TR1 = 1;				//定时器1开始计时ET1 = 1;				//使能定时器1中断EA=1;
}
void  main(){Timer0_Init();Timer1_Init();w_ds1302();temper=getT();while((int)temper==85)temper=getT();//解决初始温度数值为85°C的问题init();while(1){if(flag_seg){flag_seg=0;seg_ui(UI);//界面选择Seg_Loop();}//数码管动态显示if(flag_key){flag_key=0;Key_Loop();}//按键动态刷新if(flag_temper){flag_temper=0;temper=getT();}//获取温度值if(flag_time){flag_time=0;r_ds1302();}//获取时钟信息mod();    //温度/时间模式选择led();    //LED效果函数}
}
//定时器0用于基础模块
void Timer0_Isr(void) interrupt 1
{static unsigned char count1=0,count2=0;static unsigned int count3=0,count4=500;count1++;count2++;count3++;count4++;if(count1==2){count1=0;flag_seg=1;}if(count2==50){count2=0;flag_key=1;}if(count3==500){count3=0;flag_temper=1;}if(count4==1000){count4=500;flag_time=1;}
}
//定时器1用于LED效果和继电器吸合控制
void Timer1_Isr(void) interrupt 3
{static unsigned int count_relay=0,count_led1=0;static unsigned char count_led3=0;if(mod_relay_1){count_relay++;if(count_relay==5000){count_relay=0;no_relay();mod_relay_1=0;}}//时间控制模式下,继电器吸合5sif(led_time){count_led1++;if(count_led1==5000){count_led1=0;P0=0xff;init74hc138(4);}}//整点LED1闪烁5sif(led_relay){if(count_led3==0){P0=0xff;init74hc138(4);}else if(count_led3==100){P0=0xfb;init74hc138(4);P0=0xff;}else if(count_led3==200){count_led3=0;}count_led3++;}else{count_led3=0;}//继电器吸合时,LED3闪烁
}

other.h

#ifndef __OTHER_H__
#define __OTHER_H__#include <STC15F2K60S2.H>
#include "intrins.h"//onewire.c中的I/O口定义
sbit DQ=P1^4;
//ds1302.c中的I/O口定义
sbit SCK=P1^7;
sbit SDA=P2^3;
sbit RST=P1^3;//相关自定义变量
extern unsigned char keyval,keyold,keyup,keydown;//按键
extern unsigned char Seg_Buff[];//数码管缓存
extern unsigned char time[];//时钟数据
extern unsigned char UI;//界面控制字
extern float temper;//温度数据
extern unsigned char temper_max;//设定的温度参数
extern bit time_h_m_s;//时-分/分-秒标志位
extern bit mod_relay_1;//时间控制模式下的继电器吸合标志位
extern bit mod_relay_0;//温度控制模式下的继电器吸合标志位
extern bit led_time;//整点标志位
extern bit led_relay;//继电器吸合时,LED闪烁标志位
extern bit flag_mod;//控制模式转换标志位
extern bit flag_seg;//数码管扫描标志
extern bit flag_key;//按键扫描标志
extern bit flag_time;//时钟值获取标志
extern bit flag_temper;//温度值获取标志//init.c
void init74hc138(unsigned char n);
void init();//other.c
void relay();
void no_relay();
void mod();
void led();//onewire.c
float getT();//key.c
void Key_Loop();//ds1302.c
void w_ds1302();
void r_ds1302();//seg.c
void seg(unsigned char addr,num);
void Seg_Loop();
void seg_ui(unsigned char ui);#endif

other.c

#include "other.h"
unsigned char keyval,keyold,keyup,keydown;
unsigned char temper_max=23;
unsigned char UI=1;
float temper=0;
bit flag_mod=0;
bit time_h_m_s=0; 
bit mod_relay_1=0;
bit mod_relay_0=0;
bit led_time=0;
bit led_relay=0;
bit flag_seg=0;
bit flag_key=0;
bit flag_time=0;
bit flag_temper=0;void relay(){P0=0x10;init74hc138(5);P0=0xff;
}//继电器吸合
void no_relay(){P0=0x00;init74hc138(5);P0=0xff;
}//继电器松开//控制模式转换
void mod(){//时间控制模式if(flag_mod){no_relay();mod_relay_0=0;P0=0xff;init74hc138(4);if(time[0]==0&&time[1]==0){relay();//继电器吸合mod_relay_1=1;//由于需要持续5s//故继电器关闭写在主函数里}}//温度控制模式else{P0=0xfd;init74hc138(4);P0=0xff;if((int)(temper*10)>(temper_max*10)){relay();//继电器吸合mod_relay_0=1;}else{no_relay();//关闭继电器mod_relay_0=0;}}
}//LED效果
void led(){if(time[0]==0&&time[1]==0){P0=0xfe;init74hc138(4);P0=0xff;led_time=1;}if(mod_relay_0||mod_relay_1){if(!led_relay){P0=0xfb;init74hc138(4);P0=0xff;led_relay=1;}}else{P0=0xff;init74hc138(4);led_relay=0;}
}

key.c

#include "other.h"unsigned char Key_Scan(){unsigned char temp=0;P35=0;P34=1;if(P32==0){temp=13;return temp;}if(P33==0){temp=12;return temp;}P34=0;P35=1;if(P32==0){temp=17;return temp;}if(P33==0){temp=16;return temp;}return 0;
}
void Key_Loop(){keyval=Key_Scan();keydown=keyval&(keyold^keyval);keyup=~keyval&(keyold^keyval);if(keyval==12&&keyold!=12){UI++;if(UI==4)UI=1;}if(keyval==13&&keyold!=13){flag_mod=!flag_mod;}if(keyval==16&&keyold!=16&&UI==3){if(temper_max<99)temper_max++;}if(keyval==17&&keyold!=17&&UI==3){if(temper_max>10)temper_max--;}if(keyval==17&&UI==2){time_h_m_s=1;}else{time_h_m_s=0;}keyold=keyval;
}

seg.c

#include "other.h"code unsigned char Seg_Table[] = 
{
0xc0, //0
0xf9, //1
0xa4, //2
0xb0, //3
0x99, //4
0x92, //5
0x82, //6
0xf8, //7
0x80, //8
0x90, //9
0xbf, //-  10
0xc1, //U  11
0xff //熄灭 12
};
unsigned char Seg_Buff[]={11,12,12,12,12,12,12,12};void seg(unsigned char addr,num){P0=0xff;init74hc138(7);P0=0x01<<addr;init74hc138(6);P0=Seg_Table[num];if(UI==1&&addr==6){P0&=0x7f;}init74hc138(7);
}void Seg_Loop(){static unsigned char i=0;seg(i,Seg_Buff[i]);i++;if(i==8)i=0;
}void seg_u1(){Seg_Buff[7]=(int)((temper+0.05)*10)%10;Seg_Buff[6]=(int)((temper+0.05)*10)/10%10;if((int)temper>=10)Seg_Buff[5]=(int)((temper+0.05)*10)/100%10;elseSeg_Buff[5]=12;Seg_Buff[4]=12;Seg_Buff[3]=12;Seg_Buff[2]=12;Seg_Buff[1]=1;
}void seg_u2(){if(time_h_m_s){//分_秒Seg_Buff[7]=time[0]%10;Seg_Buff[6]=time[0]/10;Seg_Buff[4]=time[1]%10;Seg_Buff[3]=time[1]/10;}else{//时_分Seg_Buff[7]=time[1]%10;Seg_Buff[6]=time[1]/10;Seg_Buff[4]=time[2]%10;Seg_Buff[3]=time[2]/10;}Seg_Buff[5]=10;Seg_Buff[2]=12;Seg_Buff[1]=2;
}void seg_u3(){Seg_Buff[7]=temper_max%10;Seg_Buff[6]=temper_max/10;Seg_Buff[5]=12;Seg_Buff[4]=12;Seg_Buff[3]=12;Seg_Buff[2]=12;Seg_Buff[1]=3;
}//界面选择
void seg_ui(unsigned char ui){switch(ui){case 1:seg_u1();break;case 2:seg_u2();break;case 3:seg_u3();break;}
}

onewire.c部分

#include "other.h"float getT(){unsigned int tH,tL;float temp;EA=0;init_ds18b20();Write_DS18B20(0xcc);Write_DS18B20(0x44);init_ds18b20();Write_DS18B20(0xcc);Write_DS18B20(0xbe);tL=Read_DS18B20();tH=Read_DS18B20();temp=(float)(tH<<8|tL)*0.0625;EA=1;return temp;
}

ds1302.c部分

#include "other.h"
unsigned char time[]={0,25,23};void Write_Ds1302_Byte( unsigned char address,unsigned char dat )     
{//......................Write_Ds1302(dat/10*16|dat%10);		//十进制数——>BCD码RST=0; 
}
unsigned char Read_Ds1302_Byte ( unsigned char address )
{unsigned char i,temp=0x00;unsigned char dat1,dat2;//......................dat1=temp/16*10;dat2=temp%16;temp=dat1+dat2;    //BCD码——>十进制数return (temp);		
}void w_ds1302(){unsigned char i,addr=0x80;Write_Ds1302_Byte(0x8e,0x00);for(i=0;i<3;i++){Write_Ds1302_Byte(addr,time[i]);addr+=2;}Write_Ds1302_Byte(0x8e,0x80);
}
void r_ds1302(){unsigned char i,addr=0x81;for(i=0;i<3;i++){time[i]=Read_Ds1302_Byte(addr);addr+=2;}
}

相关文章:

第十三届蓝桥杯单片机省赛程序设计试题

目录 试题 各程序块代码 init.c main.c other.h other.c key.c seg.c onewire.c部分 ds1302.c部分 试题 各程序块代码 init.c #include "other.h"void init74hc138(unsigned char n){P2(P2&0x1f)|(n<<5);P2&0x1f; } void init(){P00x00;in…...

QOpenGLWidget动态加载功能实现教程(Qt+OpenGL)

QOpenGLWidget动态加载功能实现教程 我需要在Qt里面使用QOpenGLWidget显示OpenGL窗口&#xff0c;并且需要实现加载模型后重新渲染更新窗口的功能&#xff0c;但是一直无法更新被卡住了&#xff0c;现在把问题解决了总结一下整个实现过程。 创建一个自己的OpenGLWidget类 QOp…...

机器学习正则化技术:Ridge、Lasso与ElasticNet全解析

机器学习中的正则化技术 在机器学习中&#xff0c;正则化技术&#xff08;如 Ridge 和 Lasso&#xff09;主要用于解决过拟合问题&#xff0c;通过限制模型复杂度提高泛化能力。以下是详细说明及实例代码&#xff1a; 一、正则化解决的问题 过拟合&#xff1a;模型在训练集表…...

数字转换(c++)

【题目描述】 如果一个数 xx 的约数和 yy &#xff08;不包括他本身&#xff09;比他本身小&#xff0c;那么 xx 可以变成 yy &#xff0c;yy 也可以变成 xx 。例如 44 可以变为 33 &#xff0c;11 可以变为 77 。限定所有数字变换在不超过 nn 的正整数范围内进行&#xff0c;…...

ESP32驱动BMP280和MQ4传感器

文章目录 前言 一、硬件准备 所需组件 连接方式&#xff1a; 二、软件实现 1.所需库 2.代码实现 效果演示 三、上传Qt端 前言 在物联网和环境监测应用中&#xff0c;传感器是获取环境数据的关键组件。本文将详细介绍如何使用ESP32微控制器同时驱动BMP280大气压力传感器…...

洛谷题单1-B2002 Hello,World!-python-流程图重构

题目描述 编写一个能够输出 Hello,World! 的程序。 提示&#xff1a; 使用英文标点符号&#xff1b;Hello,World! 逗号后面没有空格。H 和 W 为大写字母。 输入格式 无 输出格式 无 输入输出样例 #1 输入 #1 无输出 #1 Hello,World!方式-print() 代码 class Solut…...

MQTT协议笔记

消息格式 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息协议&#xff0c;专为低带宽、高延迟或不可靠的网络设计&#xff0c;广泛应用于物联网&#xff08;IoT&#xff09;设备之间的通信。MQTT消息体的结构遵循MQTT协议规范&#xff0…...

CentOS系统下安装tesseract-ocr5.x版本

CentOS系统下安装tesseract-ocr5.x版本 安装依赖包&#xff1a; yum update -y yum install autoconf automake libtool libjpeg-devel libpng-devel libtiff-devel zlib-devel yum install automake libtool bzip2 -y手动编译安装GCC&#xff08;因系统默认安装的GCC版本比较…...

“征服HTML引号恶魔:“完全解析手册”!!!(quot;表示双引号)

&#x1f6a8;&#x1f4e2; "征服HTML引号恶魔&#xff1a;“完全解析手册” &#x1f4e2;&#x1f6a8; &#x1f3af; 博客引言&#xff1a;当引号变成"恶魔" &#x1f631; 是否遇到过这种情况&#xff1a; 写HTML时满心欢喜输入<div title"他…...

如何使用VS中的Android Game Development Extension (AGDE) 来查看安卓 Logcat 日志

一、首先按照以下 指引 中的 第1、2步骤&#xff0c;安装一下 AGDE &#xff0c;AGDE 的安装包可以在官网上找到。 UE4 使用AndroidGameDevelopmentExtension&#xff08;AGDE&#xff09;对安卓客户端做“断点调试”与“代码热更”-CSDN博客 在执行第二步骤前&#xff0c;记得…...

VSCode 生成HTML 基本骨架

在VSCode 新建html文件中敲一个英文感叹号 ! <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…...

【Spring AI】基于专属知识库的RAG智能问答小程序开发——功能优化:用户鉴权相关工具类代码

系列文章目录 【Spring AI】基于专属知识库的RAG智能问答小程序开发——完整项目&#xff08;含完整前端后端代码&#xff09;【Spring AI】基于专属知识库的RAG智能问答小程序开发——代码逐行精讲&#xff1a;核心ChatClient对象相关构造函数【Spring AI】基于专属知识库的R…...

Solr-搜索引擎-入门到精通

以下是对 Apache Solr 的简介及其常用语法的快速入门指南&#xff1a; 一、Solr 是什么&#xff1f; • 核心定位&#xff1a;Apache Solr 是一个基于 Lucene 的高性能、开源的搜索平台&#xff0c;支持全文检索、分词、高亮、聚合统计等功能。 • 核心功能&#xff1a; • 全…...

07_GRU模型

GRU模型 双向GRU笔记:https://blog.csdn.net/weixin_44579176/article/details/146459952 概念 GRU&#xff08;Gated Recurrent Unit&#xff09;也称为门控循环单元&#xff0c;是一种改进版的RNN。与LSTM一样能够有效捕捉长序列之间的语义关联&#xff0c;通过引入两个&qu…...

【字符设备驱动开发–IMX6ULL】(二)Linux 设备号

【字符设备驱动开发–IMX6ULL】&#xff08;二&#xff09;Linux 设备号 文章目录 【字符设备驱动开发–IMX6ULL】&#xff08;二&#xff09;Linux 设备号1 设备号的组成2.设备号的分配 1 设备号的组成 为了方便管理&#xff0c;Linux 中每个设备都有一个设备号&#xff0c;设…...

【大模型基础_毛玉仁】3.4 Prompt 技巧

目录 3.4 Prompt 技巧3.4.1 规范Prompt 编写1&#xff09;任务说明要明确2&#xff09;上下文丰富且清晰3&#xff09;输出格式要规范4&#xff09;排版要清晰 3.4.2 合理归纳提问1&#xff09;复杂问题拆解2&#xff09;追问 3.4.3 适时使用CoT1&#xff09;何时使用CoT2&…...

探索PyMOL新插件NRGSuite-Qt:全面提升分子对接、结合位点预测与动力学模拟的研究效率

随着分子建模和计算生物学的快速发展&#xff0c;分子对接&#xff08;Molecular Docking&#xff09;、结合位点预测、相互作用分析以及动力学研究等领域的工具越来越重要。这些工具不仅帮助研究人员理解分子间的相互作用机制&#xff0c;还能加速药物设计和优化过程。NRGSuit…...

sql2022 复制 事务级别发布后无法删除

Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission. 用SA用户登录执行下列语句 USE [xxxxx] GO EXEC dbo.sp_changedbowner loginame Nsa, …...

wokwi arduino mega 2560 - 键盘与LCD显示

截图&#xff1a; 链接&#xff1a; https://wokwi.com/projects/414520193913760769 代码&#xff1a; //cslg lcd key #include <LiquidCrystal.h> // 引入LiquidCrystal库&#xff0c;用于LCD显示 #include <Keypad.h> // 引入Keypad库&#xff0c;用于键盘输…...

Linux设置SSH免密码密钥登录

文章目录 设置SSH免密码密钥登录第一步&#xff1a; 生成SSH密钥对&#xff08;在客户端操作&#xff09;方式一&#xff1a;Windows 10/11 内置的 OpenSSH 客户端&#xff08;推荐&#xff09;常用选项&#xff1a;密钥算法选择建议生成秘钥 方式二&#xff1a;借用Xshell工具…...

深度剖析HTTP协议—GET/PUT请求方法的使用-构造请求的方法

活动发起人小虚竹 想对你说&#xff1a; 这是一个以写作博客为目的的创作活动&#xff0c;旨在鼓励大学生博主们挖掘自己的创作潜能&#xff0c;展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴&#xff0c;那么&#xff0c;快来参加吧&#xff01…...

GPU算力哪家好?GpuGeek推出高性能GPU云服务

在人工智能和深度学习领域&#xff0c;GPU算力租赁已成为推动技术创新的关键因素。随着越来越多的企业和个人开发者投身于AI研究和应用开发&#xff0c;如何高效、灵活地获取GPU算力成为了一个亟待解决的问题。GpuGeek作为一站式AI基础设施平台&#xff0c;凭借其独特的优势&am…...

蓝桥杯算法实战分享

蓝桥杯算法实战分享 蓝桥杯是国内知名的程序设计竞赛&#xff0c;涵盖算法、数据结构、编程技巧等多个领域。本文将从实战角度分享蓝桥杯算法竞赛的常见题型、解题思路和优化技巧&#xff0c;帮助参赛者更好地备战。 1. 常见题型与解题思路 蓝桥杯的题型主要包括以下几类&…...

【每日算法】Day 9-1:贪心算法精讲——区间调度与最优选择(C++实现)

掌握高效决策的核心思想&#xff01;今日深入解析贪心算法的底层逻辑&#xff0c;聚焦区间调度与最优选择两大高频场景&#xff0c;结合大厂真题与严谨证明&#xff0c;彻底掌握“局部最优即全局最优”的算法哲学。 一、贪心算法核心思想 贪心算法&#xff08;Greedy Algorit…...

构建稳健的机器学习系统:应对数据偏移挑战

构建稳健的机器学习系统&#xff1a;应对数据偏移挑战 1. 引言&#xff1a;数据偏移类型与挑战 在机器学习系统从实验室到生产环境的转变过程中&#xff0c;数据偏移&#xff08;Data Shift&#xff09;是最常见也最具挑战性的问题之一。所谓数据偏移&#xff0c;指的是训练数…...

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.1.3前馈网络(FFN)与激活函数(GELU)优化

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.1.3 前馈网络(FFN)与激活函数(GELU)优化1. 前馈网络(FFN)的架构设计与数学原理1.1 FFN在Transformer中的核心作用2. GELU激活函数的数学特性与优化2.1 GELU的数学形式与近似计算3. 逐行代码实现…...

3个版本的Unity项目的异同

根据搜索结果&#xff0c;以下是关于 SPR 3D Sample Scene(URP)、SPR Universal 3D 和 3D(Built-In Render Pipeline) 的定义及区别分析&#xff1a; 1. 定义与用途 SPR 3D Sample Scene(URP) 是基于 Universal Render Pipeline (URP) 的 3D 示例场景&#xff0c;专为展示 URP …...

组态软件之万维组态介绍(web组态、html组态、vue2/vue3组态、组态软件、组态编辑器)

一、什么是组态软件 组态软件是一种用于创建、配置和管理监控和控制系统的软件工具。组态是指不需要编写计算机程序、通过配置的方式完成工业应用开发的系统。它们通常用于工业自动化领域&#xff0c;用于实时监视和控制工业过程。组态软件提供了丰富的功能和工具&#xff0c;使…...

Linux系统perf命令使用介绍,如何用此命令进行程序热点诊断和性能优化

Linux perf 命令使用指南&#xff1a;程序热点诊断与性能优化 perf 是 Linux 系统上一个强大的性能分析工具&#xff0c;它能够帮助开发者进行程序热点诊断和性能优化。下面详细介绍 perf 的使用方法。 1. perf 简介 perf (Performance Event Counters) 是 Linux 内核提供的…...

《Linux运维实战:Ubuntu 22.04使用pam_faillock实现登录失败处理策略》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;Linux运维实战总结 一、背景信息 在ubuntu 22.04中&#xff0c;pam_tally2模块已被弃用&#xff0c;取而代之的是pam_faillock模块。因此&#xf…...