导航菜单
首页 >  蓝桥杯单片机省赛真题  > 第十五届蓝桥杯单片机省赛程序题题目+心得,附可运行代码

第十五届蓝桥杯单片机省赛程序题题目+心得,附可运行代码

   前言

        第十五届蓝桥杯单片机省赛刚刚结束,在比赛之前对这届单片机的程序题预计难度会很高,因为十四届的程序题难度彪高,又整合了许多模块,导致十四届没考的模块寥寥无几,本来预计会考超声波和串口,所幸没考,本次程序着重考察的是da输出和ne555定时器,围绕着ne555检测到的模拟电压输入频率做的一系列操作,难点在于一个需要对频率做一个调参操作,涉及到负数和正数的调节,还有一个就是根据超限参数,来调整da输出的倍率,总体难度不高,正常完成时间大概在3小时左右,下面上题目:

程序题

代码:

        对于这次题目的难点代码稍微解释一下,因为调参需要用到负数,并且要显示出来,所以定义了两个变量,到正数变量减到0,且按键再一次输入时,标志位置一且负数变量+100,当标志位为1时,对频率减去负数变量,且显示横杠加负数变量。然后就是根据超限频率调整DA输出,直接定义一个调整倍率的函数,switch超限参数的值,因为超限只能1k到9k,所以全部case出来,然后用计算器算出倍率,在定义一个浮点型的全局变量,根据超限的值调整这个浮点型变量的值,然后再成当前频率减500hz输出就行了。

#include "reg52.h"#include "intrins.h"#include "iic.h"#include "ds1302.h"#define uchar unsigned char#define uint unsigned intsfr P4 = 0xc0;sbit R1 = P3^0;sbit R2 = P3^1;sbit R3 = P3^2;sbit R4 = P3^3;sbit C1 = P3^4;sbit C2 = P3^5;sbit C3 = P4^2;sbit C4 = P4^4;void Display();code unsigned char Seg_Table[] = {0xc0, //00xf9, //10xa4, //20xb0, //30x99, //40x92, //50x82, //60xf8, //70x80, //80x90, //90x88, //A0x83, //b0xc6, //C0xa1, //d0x86, //E0x8e //F};uchar fiag0=1;float beilv;uchar LED=0xff;uchar DA;uchar t_m,t_h,t_s;uchar cuowu=0;uint f,dis_fyuanshi,dis_f,dis_fmax;uchar fushu;uint tiaozheng,chaoxian=2000,tiaozheng2;uchar count1s,countkey,countLED;uchar Ds1302_Write[7] = {0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};uchar Ds1302_Read[7] = {0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};uchar Time[3] = {0x05,0x03,0x13};void Delayus(uchar j){while(j--);}void SelectHC573(uchar n){switch(n){case 0:P2 = (P2&0x1f)|0x00;break;case 4:P2 = (P2&0x1f)|0x80;break;case 5:P2 = (P2&0x1f)|0xa0;break;case 6:P2 = (P2&0x1f)|0xc0;break;case 7:P2 = (P2&0x1f)|0xe0;break;}}void ShowSMG(uchar pos,uchar dat){SelectHC573(6);P0 = 0x01

相关推荐: