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

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

相关文章

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill

使用MapStruct实现Java对象映射的示例代码

《使用MapStruct实现Java对象映射的示例代码》本文主要介绍了使用MapStruct实现Java对象映射的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、什么是 MapStruct?二、实战演练:三步集成 MapStruct第一步:添加 Mave

Java抽象类Abstract Class示例代码详解

《Java抽象类AbstractClass示例代码详解》Java中的抽象类(AbstractClass)是面向对象编程中的重要概念,它通过abstract关键字声明,用于定义一组相关类的公共行为和属... 目录一、抽象类的定义1. 语法格式2. 核心特征二、抽象类的核心用途1. 定义公共接口2. 提供默认实