标题: 蓝桥杯历年省赛试题解析,长贴,持续更新 [打印本页]
作者: 13122031726 时间: 2018-3-5 19:42
标题: 蓝桥杯历年省赛试题解析,长贴,持续更新
【蓝桥杯单片机设计与开发】(18)省赛试题解析 2011第三届 温度记录器(上)从本章开始,我将开始为大家讲解历年的省赛真题的编程思路以及编程原理,通过这种方式让大家学习边熟悉这种多模块协同的综合题目的编程方式。
2011年第三届蓝桥杯 单片机类 省赛试题是按照任务要求设计一个“温度监控器”,因为后续内容每个模块都有较多的代码,故我们将每一个题目分成两章来发布。
功能简述 “温度监控器”可以实现环境温度检测及报警功能;通过 EEPROM 存储上下限温度数值,温度上下限数值可通过外部按键更改。系统硬件电路主要有单片机控制电路、数码管显示电路、EEPROM 存储电路、直流电机驱动电路(设计部分)、键控制电路及继电器组成,系统框图如图 1 所示:
MCS-51 单片机汇编指令集、C51 关键字、DS18B20 和 AT24C02 芯片部分驱动、CT107D考试平台电路原理图以及本题所涉及到的芯片数据手册,可参考计算机上的电子文档。
设计任务要求1.数码管显示通过 8 位共阳数码管显示温度信息,包括设定的温度上下限数值和当前温度值,显示格式如图 2 所示:
示例代码:display.c
- /************************************************************/
- /************************智术灵慧****************************/
- /******************蓝桥杯2011年省赛试题**********************/
- /***********************温度监控器***************************/
- /*******************联系QQ:1149809374***********************/
- /*************联系邮箱:418224424@aliyun.com*****************/
- /*****************官方博客:www.bkoak.com********************/
- /************************************************************/
-
- #include "stc15f2k60s2.h"
- #include "display.h"
- #include "at24c02.h"
- #include "ds18b20.h"
-
- uchar code tab[] =
- {0XC0,0XF9,0XA4,0XB0,0X99,0X92,
- 0X82,0XF8,0X80,0X90,0XBF,0XFF};
- uchar strtab[8];
- uchar temp_value;
- uint i;
-
- void display(char max,char min)
- {
- strtab[0] = tab[max / 10];
- strtab[1] = tab[max % 10];
- strtab[2] = tab[min / 10];
- strtab[3] = tab[min % 10];
- strtab[4] = tab[11];
- strtab[5] = tab[11];
- strtab[6] = tab[temp_value / 10];
- strtab[7] = tab[temp_value % 10];
- }
-
- void Timer0Init(void) //5毫秒@11.0592MHz
- {
- AUXR |= 0x80;//定时器时钟1T模式
- TMOD &= 0xF0;//设置定时器模式
- TL0 = 0x00;//设置定时初值
- TH0 = 0x28;//设置定时初值
- TF0 = 0;//清除TF0标志
- TR0 = 1;//定时器0开始计时
- }
-
- void Timer0_int() interrupt 1 using 0
- {
- static uchar num;
- TH0 = 0xcd;
- TL0 = 0xd4;
-
- switch (num)
- {
- case 0: P2 = ((P2&0x1f)|0xc0); P0 = 0x01;
- P2 = ((P2&0x1f)|0xff); P0 = strtab[num]; break;
- case 1: P2 = ((P2&0x1f)|0xc0); P0 = 0x02;
- P2 = ((P2&0x1f)|0xff); P0 = strtab[num]; break;
- case 2: P2 = ((P2&0x1f)|0xc0); P0 = 0x04;
- P2 = ((P2&0x1f)|0xff); P0 = strtab[num]; break;
- case 3: P2 = ((P2&0x1f)|0xc0); P0 = 0x08;
- P2 = ((P2&0x1f)|0xff); P0 = strtab[num]; break;
- case 4: P2 = ((P2&0x1f)|0xc0); P0 = 0x10;
- P2 = ((P2&0x1f)|0xff); P0 = strtab[num]; break;
- case 5: P2 = ((P2&0x1f)|0xc0); P0 = 0x20;
- P2 = ((P2&0x1f)|0xff); P0 = strtab[num]; break;
- case 6: P2 = ((P2&0x1f)|0xc0); P0 = 0x40;
- P2 = ((P2&0x1f)|0xff); P0 = strtab[num]; break;
- case 7: P2 = ((P2&0x1f)|0xc0); P0 = 0x80;
- P2 = ((P2&0x1f)|0xff); P0 = strtab[num]; break;
- default: break;
- }
- num++;
- if (num == 8)
- num = 0;
- }
-
- void Timer1Init(void) //5毫秒@11.0592MHz
- {
- AUXR |= 0x40; //定时器时钟1T模式
- TMOD &= 0xF0; //设置定时器模式
- TL1 = 0x00; //设置定时初值
- TH1 = 0x28; //设置定时初值
- TF1 = 0; //清除TF0标志
- TR1 = 1; //定时器0开始计时
- }
-
- void Timer1_int() interrupt 3
- {
- i++;
- if(i == 400)
- {
- i = 0;
- temp_value = ReadTemp();
- }
- }
复制代码
示例代码:display.h- /************************************************************/
- /************************智术灵慧****************************/
- /******************蓝桥杯2011年省赛试题**********************/
- /***********************温度监控器***************************/
- /*******************联系QQ:1149809374***********************/
- /*************联系邮箱:418224424@aliyun.com*****************/
- /*****************官方博客:www.bkoak.com********************/
- /************************************************************/
-
- #ifndef __DISPLAY_H_
- #define __DISPLAY_H_
-
- void display(uchar max,uchar min);
- void Timer0Init(void);
- void Timer1Init(void);
-
- #endif
复制代码
2.温度测量单元通过 DS18B20 数字温度芯片测量环境温度。
示例代码:ds18b20.c
- /************************************************************/
- /************************智术灵慧****************************/
- /******************蓝桥杯2011年省赛试题**********************/
- /***********************温度监控器***************************/
- /*******************联系QQ:1149809374***********************/
- /*************联系邮箱:418224424@aliyun.com*****************/
- /*****************官方博客:www.bkoak.com********************/
- /************************************************************/
-
- #ifndef __DELAY_H_
- #define __DELAY_H_
-
- void Delay5us();
- void Delay10ms();
- void Delay500us();
-
- #endif
复制代码- /************************************************************/
- /************************智术灵慧****************************/
- /******************蓝桥杯2011年省赛试题**********************/
- /***********************温度监控器***************************/
- /*******************联系QQ:1149809374***********************/
- /*************联系邮箱:418224424@aliyun.com*****************/
- /*****************官方博客:www.bkoak.com********************/
- /************************************************************/
- #include "delay.h"
- #include "intrins.h"
-
- void Delay5us() //@11.0592MHz
- {
- unsigned char i;
-
- _nop_();
- i = 11;
- while (--i);
- }
-
- void Delay10ms() //@11.0592MHz
- {
- unsigned char i, j;
-
- i = 108;
- j = 145;
- do
- {
- while (--j);
- } while (--i);
- }
-
- void Delay500us() //@11.0592MHz
- {
- unsigned char i, j;
-
- _nop_();
- _nop_();
- i = 6;
- j = 93;
- do
- {
- while (--j);
- } while (--i);
- }
复制代码
本章内容到这里就先结束了,剩下的程序和文档将在下一部分一同发出,希望大家先对这一部分内容进行加深理解,只有将每一部分都了解透彻才能更好地完成比赛的要求。
更多资讯关注公众号:智术灵慧(zslh_dyh)
QQ交流群:693211073

作者: 13122031726 时间: 2018-3-6 17:23
【蓝桥杯单片机设计与开发】(19)省赛试题解析 2011第三届 温度记录器(下)从本章我们继续上一章的内容,我将开始为大家讲解历年的省赛真题的编程思路以及编程原理,通过这种方式让大家学习边熟悉这种多模块协同的综合题目的编程方式。
2011年第三届蓝桥杯 单片机类 省赛试题是按照任务要求设计一个“温度监控器”第二章。
功能简述 “温度监控器”可以实现环境温度检测及报警功能;通过 EEPROM 存储上下限温度数值,温度上下限数值可通过外部按键更改。系统硬件电路主要有单片机控制电路、数码管显示电路、EEPROM 存储电路、直流电机驱动电路(设计部分)、键控制电路及继电器组成,系统框图如图 1 所示:
MCS-51 单片机汇编指令集、C51 关键字、DS18B20 和 AT24C02 芯片部分驱动、CT107D考试平台电路原理图以及本题所涉及到的芯片数据手册,可参考计算机上的电子文档。
设计任务要求3.EEPROM 记录单元系统通过 AT24C02 存储温度信息,AT24C02 内部存储地址 0x00 和 0x01 分别存储
温度上下限数据信息;温度上下限数据可通过外部按键进行修改,并通过数码管实时显
示。数据存储格式如图 3 所示:
示例代码:at24c02.c
- /************************************************************/
- /************************智术灵慧****************************/
- /******************蓝桥杯2011年省赛试题**********************/
- /***********************温度监控器***************************/
- /*******************联系QQ:1149809374***********************/
- /*************联系邮箱:418224424@aliyun.com*****************/
- /*****************官方博客:www.bkoak.com********************/
- /************************************************************/
-
- #ifndef __AT24C02_H_
- #define __AT24C02_H_
-
- #define SlaveAddrW 0xA0
- #define SlaveAddrR 0xA1
-
- void IIC_Start(void);
- void IIC_Stop(void);
- void IIC_Ack(unsigned char ackbit);
- bit IIC_WaitAck(void);
- void IIC_SendByte(unsigned char byt);
- unsigned char IIC_RecByte(void);
- void WriteByte_AT24C02(uchar add,uchar date);
- uchar ReadByte_AT24C02(uchar add);
-
- #endif
复制代码
4.按键控制单元(见main.c)独立按键 S4 设定为“加上限”按键;每按下一次,温度上限值增加 1℃;
独立按键 S5 设定为“加下限”按键;每按下一次,温度下限值增加 1℃;
独立按键 S6 设定为“减上限”按键;每按下一次,温度上限值减少 1℃;
独立按键 S7 设定为“减下限”按键;每按下一次,温度下限值减少 1℃。
5.按直流电机驱动电路设计(见main.c)设计一个直流电机驱动电路与单片机 P34 引脚连接。
6.温控单元(见main.c)若当前温度数值超过 EEPROM 中存储的温度上限数据,通过单片机 P34 口产生周期为 1KHz 占空比为 30%的 PWM 信号驱动直流电机工作。待温度恢复到上下限阈值内时,P34 口输出高电平,直流电机停止工作。
若当前温度低于 EEPROM 中存储的温度下限数据,继电器打开,当温度恢复到上
3下限阈值内时,继电器自动关闭。
7.系统初始状态说明(见main.c)上、下限温度值需要设定在 0℃到 99℃范围内,下限值不大于上限值。系统上电后,从 EEPROM 中读取温度上、下限数值,并实时显示当前温度。
示例代码:main.c
本章资料下载地址
本章关于2011年省赛试题“温度监控器”的讲解到这里就结束了,如果有不理解的可以加群,找我或者群里的朋友交流。
更多资讯关注公众号:智术灵慧(zslh_dyh)
QQ交流群:693211073

-
-
第三届 温度记录器.rar
207.56 KB, 下载次数: 40, 下载积分: 黑币 -5
作者: 13122031726 时间: 2018-3-9 14:46
【蓝桥杯单片机设计与开发】(20)省赛模拟题解析 2012第四届 自动售水机(简析)“自动售水机”设计任务书功能简述通过竞赛硬件平台模拟小区自动售水机的工作流程:通过按键控制售水机水流出和停止;通过数码管显示费率、出水量及总费用;通过光敏电阻检测环境亮度,在亮度过低的情况下,自动开灯。系统硬件电路主要由单片机控制电路、数码管显示电路、A/D 转换电路及功能按键组成。系统框图如图 1 所示:
单总线驱动程序、CT107D 单片机考试平台电路原理图以及本题所涉及到的芯片数据手册,可参考计算机上的电子文档。程序流程图及相关工程文件请以考生号命名,并保存在计算机上的考生文件夹中(文件夹名为考生准考证号,文件夹位于 windows 桌面上)。
设计任务及要1. 温度检测温度检测采用 DS18B20 温度传感器,数据经过单片机处理后,与用户设定的温度上限(T MAX )和温度下限(T MIN )比较,确定当前温度所处的区间,数码管温度显示格式如图 2 所示:
关于温度区间的说明 :
温度区间 0:当前温度<T MIN
温度区间 1:T MIN ≤当前温度≤T MAX
温度区间 2:当前温度>T MAX
可设定的最大温度区间:0℃~99℃
2. 用户输入-3 ×4 矩阵键盘通过矩阵键盘设定系统的工作参数,各个按键的功能定义如图 3 所示:
“设置”按键按下后,进入工作参数设定界面,如图 4 所示,依次按下设定的数值,再次按下“设置”按键,保存当前输入的数据,并退出工作参数设定界面。
3. 执行机构执行机构由指示灯 L1 和继电器组成,用于报警和连接外部高低温执行机构。
3.1 实时温度处在温度区间 0,继电器关闭,指示灯 L1 以 0.8 秒为间隔闪烁;
3.2 实时温度处在温度区间 1,继电器关闭,指示灯 L1 以 0.4 秒为间隔闪烁;
3.3 实时温度处在温度区间 2,继电器打开,指示灯 L1 以 0.2 秒为间隔闪烁。
4. 初始化状态说明系统默认的温度上限为 30℃(T MAX ),温度下限为 20℃(T MIN ),可以通过矩阵键盘修改。
5. 电路原理图设计假定一个光敏电阻,在光线充足的状态下,阻值为 5KΩ,挡光状态下阻值≥45 KΩ,使用简单阻容元件、晶体管、运算放大器等设计一个光敏电路开关电路,挡光状态下电路驱动 5V继电器 K1 吸合,反之,继电器断开。设计过程中,请考虑信号抖动等因素,简述电路的工作原理与设计思路,并绘制出电路原理图。
本章资料下载地址无黑币见原文,有的直接这里就行。
本章关于2012年省赛模拟试题“自动售水机”的源码请各位下载查看,不懂得地方留言或者加群交流。
更多资讯关注公众号:智术灵慧(zslh_dyh)
QQ交流群:693211073

-
-
第四届 自动售水机.rar
565.26 KB, 下载次数: 20, 下载积分: 黑币 -5
作者: 13122031726 时间: 2018-3-9 16:15
【蓝桥杯单片机设计与开发】(20)省赛模拟题解析 2012第四届 自动售水机(简析)“自动售水机”设计任务书功能简述通过竞赛硬件平台模拟小区自动售水机的工作流程:通过按键控制售水机水流出和停止;通过数码管显示费率、出水量及总费用;通过光敏电阻检测环境亮度,在亮度过低的情况下,自动开灯。系统硬件电路主要由单片机控制电路、数码管显示电路、A/D 转换电路及功能按键组成。系统框图如图 1 所示:
单总线驱动程序、CT107D 单片机考试平台电路原理图以及本题所涉及到的芯片数据手册,可参考计算机上的电子文档。程序流程图及相关工程文件请以考生号命名,并保存在计算机上的考生文件夹中(文件夹名为考生准考证号,文件夹位于 windows 桌面上)。
设计任务及要1. 温度检测温度检测采用 DS18B20 温度传感器,数据经过单片机处理后,与用户设定的温度上限(T MAX )和温度下限(T MIN )比较,确定当前温度所处的区间,数码管温度显示格式如图 2 所示:
关于温度区间的说明 :
温度区间 0:当前温度<T MIN
温度区间 1:T MIN ≤当前温度≤T MAX
温度区间 2:当前温度>T MAX
可设定的最大温度区间:0℃~99℃
2. 用户输入-3 ×4 矩阵键盘通过矩阵键盘设定系统的工作参数,各个按键的功能定义如图 3 所示:
“设置”按键按下后,进入工作参数设定界面,如图 4 所示,依次按下设定的数值,再次按下“设置”按键,保存当前输入的数据,并退出工作参数设定界面。
3. 执行机构执行机构由指示灯 L1 和继电器组成,用于报警和连接外部高低温执行机构。
3.1 实时温度处在温度区间 0,继电器关闭,指示灯 L1 以 0.8 秒为间隔闪烁;
3.2 实时温度处在温度区间 1,继电器关闭,指示灯 L1 以 0.4 秒为间隔闪烁;
3.3 实时温度处在温度区间 2,继电器打开,指示灯 L1 以 0.2 秒为间隔闪烁。
4. 初始化状态说明系统默认的温度上限为 30℃(T MAX ),温度下限为 20℃(T MIN ),可以通过矩阵键盘修改。
5. 电路原理图设计假定一个光敏电阻,在光线充足的状态下,阻值为 5KΩ,挡光状态下阻值≥45 KΩ,使用简单阻容元件、晶体管、运算放大器等设计一个光敏电路开关电路,挡光状态下电路驱动 5V继电器 K1 吸合,反之,继电器断开。设计过程中,请考虑信号抖动等因素,简述电路的工作原理与设计思路,并绘制出电路原理图。
本章资料下载地址无黑币见原文,有的直接这里就行。
本章关于2012年省赛模拟试题“自动售水机”的源码请各位下载查看,不懂得地方留言或者加群交流。
更多资讯关注公众号:智术灵慧(zslh_dyh)
QQ交流群:693211073

-
-
第四届 自动售水机.rar
565.26 KB, 下载次数: 28, 下载积分: 黑币 -5
作者: lzDestiny 时间: 2019-3-20 17:24
楼主停更了么?
作者: hfj2011 时间: 2019-6-12 10:50
期待更新,点赞
作者: abc111111 时间: 2019-6-12 13:17
怎么不用lcd12864当显示呢?学习不来
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |