小工具知识网

当前位置: 首页 > 行业知识 > 蓝桥杯单片机第14届省赛客观题目+程序题目+程序题参考答案

行业知识

蓝桥杯单片机第14届省赛客观题目+程序题目+程序题参考答案

2026-11-07 23:18:43 来源:互联网转载

���录

客观题题目

程序题题目

程序题参考答案

main.h

main.c

Init.h

Init.c

SMG.h

SMG.c

DSQ.h

DSQ.c

YanShi.h

YanShi.c

JZKey.h

JZKey.c

ds1302.h

ds1302.c

iic.h

iic.c

onewire.h

onewire.c

LN555.h

LN555.c

客观题题目

程序题题目

 

 

程序题参考答案

        首先吐槽一下,花300元体验国赛的难度,是真的崩溃。

        3个小时写完,2个小时改bug!!!

  1. NE555本来应该是在国赛考的,这届省赛直接上了。
  2. I2C、DS1302、DS18B20,这3个省赛常考的内容,按照往届省赛的习惯应该是三选二进行考查,但是这届省赛中直接将这3个都给考了,这种做法常见于国赛当中。
  3. 这届赛题的逻辑也更加复杂,出现了两个采集到的数据,进行对比最大值、计算平均值、前后两次采集到的数据比较。
  4. 程序题的题目能达到5页之多。
  5. 客观题也不好做。
  6. 个人感觉,疫情开放后,为了减少国赛的参加人数。

main.h

#ifndef __MAIN_H_#define __MAIN_H_#include #define uchar unsigned char#define uint unsigned int#include "Init.h"#include "SMG.h"#include "DSQ.h"#include "YanShi.h"#include "JZKey.h"#include "ds1302.h"#include "iic.h"#include "onewire.h"#include "LN555.h"void LED_Show();#endif

main.c

#include "main.h"uchar key_num=0;uchar key_num_old=0;uchar JieMian=0;//界面。0:时间;1:回显;2:参数,3:温湿度uchar JieMian_old;uchar HuiXian=0;//回显。0:温度;1:湿度;2:时间char WenDu_CanShu=30;//温度参数,0-99uint S9_time=0;uchar shi,fen,miao;uchar ADC_data;uchar ADC_data_old;uchar ChuFa_CiShu=0;//触发次数uchar WenDu=0;//温度uchar WenDu_old;uchar WenDu_temp;uchar WenDu_Max=0;uint WenDu_PingJun=0;uint Hz;uint Hz_time=0;uchar ChuFa_Shi,ChuFa_Fen;uchar ShiDu=0;uchar ShiDu_old=0;uchar ShiDu_old_temp;uchar ShiDu_Max=0;uint ShiDu_PingJun=0;uchar JieMian_flag=0;//0:正常运转;1:3秒显示温湿度uint JieMian_flag_time=0;uchar YouXiao_flag=1;uchar L4_time=0;uint ADC_time=0;void main(){Init_BZ();DSQ_2_Init();SMG_Init();JZKey_Init();LN555_DSQ_0_Init();Ds1302_XieData(13,3,5);DS18B20_GetWenDu();while(1){key_num_old=key_num;key_num=JZKey_GetKeynum();if(key_num_old!=key_num&&JieMian_flag==0){if(key_num==4){JieMian++;JieMian=JieMian%3;if(JieMian==1){HuiXian=0;}}else if(key_num==5&&JieMian!=0){HuiXian++;HuiXian=HuiXian%3;}else if(key_num==8&&JieMian==2){WenDu_CanShu++;if(WenDu_CanShu>=99){WenDu_CanShu=99;}}else if(key_num==9&&JieMian==2){WenDu_CanShu--;if(WenDu_CanShu=200){ADC_time=0;ADC_data_old=ADC_data;ADC_data=IIC_ADC_GetData(1);if(ADC_data_old>ADC_data&&JieMian_flag==0&&ADC_data_old>90&&ADC_data9&&ShiDu=10){SMG_Show(24,16,16,16,16,16,WenDu_CanShu/10,WenDu_CanShu%10);}else if(WenDu_CanShu>=0){SMG_Show(24,16,16,16,16,16,16,WenDu_CanShu);}}else if(JieMian==3){if(YouXiao_flag==1){SMG_Show(14,16,16,WenDu/10,WenDu%10,17,ShiDu/10,ShiDu%10);}else{SMG_Show(14,16,16,WenDu_temp/10,WenDu_temp%10,17,10,10); }}LED_Show();}void LED_Show(){uchar L1_2_3=0xff;uchar L4=0xff;uchar L5=0xff;uchar L6=0xff;if(JieMian==0){L1_2_3=0xfe;}else if(JieMian==1){L1_2_3=0xfd;}else if(JieMian==2){L1_2_3=0xfb;}if(L4_time>=100){L4=0xf7;}if(YouXiao_flag==0){L5=0xef;}if(ChuFa_CiShu>=2&&WenDu_old=1; if(SDA) temp|=0x80; SCK=1;}  RST=0;_nop_(); SCK=0;_nop_();SCK=1;_nop_();SDA=0;_nop_();SDA=1;_nop_();return (temp);}void Ds1302_XieData(unsigned char shi,fen,miao){shi=(shi/10)*16+(shi%10);fen=(fen/10)*16+(fen%10);miao=(miao/10)*16+(miao%10);Write_Ds1302_Byte(0x8e,0x00);Write_Ds1302_Byte(0x84,shi);Write_Ds1302_Byte(0x82,fen);Write_Ds1302_Byte(0x80,miao);Write_Ds1302_Byte(0x8e,0x80);}unsigned char Ds1302_GetShi(){unsigned char date;date=Read_Ds1302_Byte(0x85);date=(date/16)*10+(date%16);return date;}unsigned char Ds1302_GetFen(){unsigned char date;date=Read_Ds1302_Byte(0x83);date=(date/16)*10+(date%16);return date;}unsigned char Ds1302_GetMiao(){unsigned char date;date=Read_Ds1302_Byte(0x81);date=(date/16)*10+(date%16);return date;}

iic.h

#ifndef _IIC_H#define _IIC_H#include #include "intrins.h"void IIC_Start(void); void IIC_Stop(void);  bit IIC_WaitAck(void);  void IIC_SendAck(bit ackbit); void IIC_SendByte(unsigned char byt); unsigned char IIC_RecByte(void); unsigned char IIC_ADC_GetData(unsigned char di_zhi);void IIC_DAC_XieData(unsigned char date);unsigned char IIC_EEPROM_GetData(unsigned char di_zhi);void IIC_EEPROM_XieData(unsigned char dizhi,date);#endif

iic.c

/*  程序说明: IIC总线驱动程序  软件环境: Keil uVision 4.10   硬件环境: CT107单片机综合实训平台 8051,12MHz  日    期: 2011-8-9*/#include "iic.h"#define DELAY_TIME 5#define SlaveAddrW 0xA0#define SlaveAddrR 0xA1//总线引脚定义sbit SDA = P2^1;  /* 数据线 */sbit SCL = P2^0;  /* 时钟线 */void IIC_Delay(unsigned char i){    do{_nop_();}    while(i--);        }//总线启动条件void IIC_Start(void){    SDA = 1;    SCL = 1;    IIC_Delay(DELAY_TIME);    SDA = 0;    IIC_Delay(DELAY_TIME);    SCL = 0;}//总线停止条件void IIC_Stop(void){    SDA = 0;    SCL = 1;    IIC_Delay(DELAY_TIME);    SDA = 1;    IIC_Delay(DELAY_TIME);}//发送应答void IIC_SendAck(bit ackbit){    SCL = 0;    SDA = ackbit;  // 0:应答,1:非应答    IIC_Delay(DELAY_TIME);    SCL = 1;    IIC_Delay(DELAY_TIME);    SCL = 0;     SDA = 1;    IIC_Delay(DELAY_TIME);}//等待应答bit IIC_WaitAck(void){    bit ackbit;    SCL  = 1;    IIC_Delay(DELAY_TIME);    ackbit = SDA;    SCL = 0;    IIC_Delay(DELAY_TIME);    return ackbit;}//通过I2C总线发送数据void IIC_SendByte(unsigned char byt){    unsigned char i;    for(i=0; i

上一篇:怎么用服务器上网记录?

下一篇:系统的服务器地址怎么找?