【第十三届蓝桥杯单片机国赛满分代码】

2024-08-31 03:28

本文主要是介绍【第十三届蓝桥杯单片机国赛满分代码】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

其他相关文章:
【提分必看!】蓝桥杯单片机提分技巧(国一经验分享)
【国一超全代码分享!】蓝桥杯单片机各模块代码整合
【蓝桥杯单片机客观题知识点汇总】

本代码经过编译后生成的hex文件经过了4T测试平台的满分测试。读者对代码有疑问的可以在评论区里提出。

主函数

#include "stdio.h"
#include "intrins.h"#include "bsp_init.h"
#include "bsp_led.h"
#include "bsp_key.h"
#include "bsp_seg.h"
#include "bsp_sonic.h"
#include "bsp_555.h"
#include "bsp_iic.h"#include "Timer.h"//
void Key_Proc(void);
void Seg_Proc(void);//
unsigned char Key_Slow=0;
unsigned char Seg_Slow=0;unsigned char onems_tick=0;
unsigned char freq_tick=0;
unsigned char pwm_tick=0;
unsigned int clear_tick=0;// 按键
unsigned char Key_Value;
unsigned char Key_Down;
unsigned char Key_Old;// 数码管
unsigned char seg_string[11];
unsigned char seg_buf[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
unsigned char pos=0;// LED
unsigned char ucLed=0;// EEPROM
unsigned char eeprom_string[2];// 超声波和频率测量
unsigned char dist=0;
unsigned int freq=0;// 逻辑标志位
unsigned char ui_state=0;
unsigned char par_mode=0;
bit cm_mode=0;
bit hz_mode=0;
bit pwm_flag=0;
bit dist_flag=0;
bit count_flag=0;
bit clear_flag=0;bit pp1_flag=0;
bit pp2_flag=0;// 湿度
unsigned char shidu=0;// 参数
float freq_par=9.0;
unsigned char shidu_par=40;
float dist_par=0.6;unsigned char count=0;void main(void)
{Cls_Waishe();Sonic_Timer1Init();Freq_Timer0Init();Timer2Init();EA=1;while(1){Key_Proc();Seg_Proc();}
}//
void Key_Proc(void)
{if(Key_Slow)  return;Key_Slow=1;Key_Value=Read_BTN();Key_Down=Key_Value&(Key_Old^Key_Value);Key_Old=Key_Value;if(Key_Down==4){ui_state++;if(ui_state>3)  ui_state=0;}if(ui_state==3 && Key_Down==5){par_mode++;if(par_mode>2)  par_mode=0;}if(ui_state==0 && Key_Down==7) hz_mode^=1;if(ui_state==2 && Key_Down==6) cm_mode^=1;if(ui_state==3){if(par_mode==0){if(Key_Down==6){freq_par+=0.5;if(freq_par>12.0)  freq_par=1.0;}else if(Key_Down==7){freq_par-=0.5;if(freq_par<1.0)  freq_par=12.0;}}else if(par_mode==1){if(Key_Down==6){shidu_par+=10;if(shidu_par>60)  shidu_par=10;}else if(Key_Down==7){shidu_par-=10;if(shidu_par<10)  shidu_par=60;}}else if(par_mode==2){if(Key_Down==6){dist_par+=0.1;if(dist_par>1.2)  dist_par=0.1;}else if(Key_Down==7){dist_par-=0.1;if(dist_par<0.1)  dist_par=1.2;}}}if(ui_state==1){if(Key_Value==7){if(clear_tick++>100){clear_flag=1;}}else{if(clear_flag==1){clear_tick=0;clear_flag=0;count=0;}else{clear_tick=0;}}}
}
//
void Seg_Proc(void)
{if(Seg_Slow)  return;Seg_Slow=1;shidu=(Pcf_ADC(0x43)/51.0)*20.0;dist=Wave_Rec();if((dist/100.0)>dist_par)  {if(count_flag==0){count_flag=1;count++;}dist_flag=1;ucLed |= 0x20;}else  {if(count_flag==1){count_flag=0;count++;}dist_flag=0;ucLed &= 0xDF;}eeprom_string[0]=count;EEPROM_Write(eeprom_string,0,1);if(shidu<=shidu_par){Pcf_DAC(51);}else if(shidu>=80){Pcf_DAC(255);}else{Pcf_DAC(((4.0/(80.0-1.0*shidu_par))*(float)shidu+((80.0-5.0*shidu_par)/(80.0-1.0*shidu_par)))*51.0);}if(shidu>shidu_par)  ucLed |= 0x10;else  ucLed &= 0xEF;if(freq>(freq_par*1000))  {pwm_flag=1;ucLed |= 0x08;}else {pwm_flag=0;ucLed &= 0xF7;}switch(ui_state){case 0:{ucLed = ucLed&0xF9|0x01;par_mode=0;if(hz_mode==0){sprintf(seg_string,"F %6d",freq);}else if(hz_mode==1){sprintf(seg_string,"F %7.1f",freq/1000.0);}break;}case 1:{ucLed = ucLed&0xFA|0x02;sprintf(seg_string,"H     %2d",(unsigned int)shidu);break;}case 2:{ucLed = ucLed&0xFC|0x04;if(cm_mode==0)  {sprintf(seg_string,"A    %3d",(unsigned int)dist);}else if(cm_mode==1){sprintf(seg_string,"A    %4.2f",dist/100.0);}break;}case 3:{if(par_mode==0){ucLed = ucLed&0xF9^0x01;sprintf(seg_string,"P1   %4.1f",freq_par);}else if(par_mode==1){ucLed = ucLed&0xFA^0x02;sprintf(seg_string,"P2    %2d",(unsigned int)shidu_par);}else if(par_mode==2){ucLed = ucLed&0xFC^0x04;sprintf(seg_string,"P3    %3.1f",dist_par);}break;}default:break;}Seg_Tran(seg_string,seg_buf);
}//-----------------------------------------------
//中断服务程序
void t2int() interrupt 12           //中断入口
{if(++onems_tick==10){onems_tick=0;if(Key_Slow++==10)  Key_Slow=0;if(Seg_Slow++==100)  Seg_Slow=0;if(++freq_tick==100){freq_tick=0;TR0 = 0;freq=((TH0<<8)|TL0);freq=freq*10;TL0 = 0;		TH0 = 0;		TR0 = 1;}Seg_Disp(seg_buf,pos);if(++pos==8)  pos=0;Led_Disp(ucLed);}if(dist_flag==0)  P0=0x00;else if(dist_flag==1)  P0=0x10;
//	if(pwm_flag==1){pp2_flag=0;if(pwm_tick<8){if(pp1_flag==0){pp1_flag=1;P0|=0x20;P2=P2&0x1F|0xA0;P2=P2&0x1F;}}else{if(pp1_flag==1){pp1_flag=0;P0|=0x00;P2=P2&0x1F|0xA0;P2=P2&0x1F;}}if(++pwm_tick==10)  pwm_tick=0;}else if(pwm_flag==0){pp1_flag=0;if(pwm_tick<2){if(pp2_flag==0){pp2_flag=1;P0|=0x20;P2=P2&0x1F|0xA0;P2=P2&0x1F;}}else{if(pp2_flag==1){pp2_flag=0;P0|=0x00;P2=P2&0x1F|0xA0;P2=P2&0x1F;}}if(++pwm_tick==10)  pwm_tick=0;}
}

其他模块

其他模块代码直接参考:【国一超全代码分享!】蓝桥杯单片机各模块代码整合

这篇关于【第十三届蓝桥杯单片机国赛满分代码】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1122749

相关文章

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

nginx-rtmp-module模块实现视频点播的示例代码

《nginx-rtmp-module模块实现视频点播的示例代码》本文主要介绍了nginx-rtmp-module模块实现视频点播,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录预置条件Nginx点播基本配置点播远程文件指定多个播放位置参考预置条件配置点播服务器 192.

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

深入解析Spring TransactionTemplate 高级用法(示例代码)

《深入解析SpringTransactionTemplate高级用法(示例代码)》TransactionTemplate是Spring框架中一个强大的工具,它允许开发者以编程方式控制事务,通过... 目录1. TransactionTemplate 的核心概念2. 核心接口和类3. TransactionT

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下