您的位置:首页 > 游戏 > 手游 > 【第十三届蓝桥杯单片机国赛满分代码】

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

2024/12/25 22:37:46 来源:https://blog.csdn.net/S13352784013/article/details/141727722  浏览:    关键词:【第十三届蓝桥杯单片机国赛满分代码】

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

本代码经过编译后生成的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;}
}

其他模块

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com