找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 21898|回复: 6
打印 上一主题 下一主题
收起左侧

蓝桥杯历年省赛试题解析,长贴,持续更新

[复制链接]
跳转到指定楼层
楼主
ID:231500 发表于 2018-3-5 19:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
【蓝桥杯单片机设计与开发】(18)省赛试题解析 2011第三届 温度记录器(上)
从本章开始,我将开始为大家讲解历年的省赛真题的编程思路以及编程原理,通过这种方式让大家学习边熟悉这种多模块协同的综合题目的编程方式。
2011年第三届蓝桥杯 单片机类 省赛试题是按照任务要求设计一个“温度监控器”,因为后续内容每个模块都有较多的代码,故我们将每一个题目分成两章来发布。
功能简述
        “温度监控器”可以实现环境温度检测及报警功能;通过 EEPROM 存储上下限温度数值,温度上下限数值可通过外部按键更改。系统硬件电路主要有单片机控制电路、数码管显示电路、EEPROM 存储电路、直流电机驱动电路(设计部分)、键控制电路及继电器组成,系统框图如图 1 所示:
        MCS-51 单片机汇编指令集、C51 关键字、DS18B20 和 AT24C02 芯片部分驱动、CT107D考试平台电路原理图以及本题所涉及到的芯片数据手册,可参考计算机上的电子文档。
设计任务要求1.数码管显示
通过 8 位共阳数码管显示温度信息,包括设定的温度上下限数值和当前温度值,显示格式如图 2 所示:
示例代码:display.c
  1. /************************************************************/
  2. /************************智术灵慧****************************/
  3. /******************蓝桥杯2011年省赛试题**********************/
  4. /***********************温度监控器***************************/
  5. /*******************联系QQ:1149809374***********************/
  6. /*************联系邮箱:418224424@aliyun.com*****************/
  7. /*****************官方博客:www.bkoak.com********************/
  8. /************************************************************/

  9. #include "stc15f2k60s2.h"
  10. #include "display.h"
  11. #include "at24c02.h"
  12. #include "ds18b20.h"

  13. uchar code tab[] =
  14. {0XC0,0XF9,0XA4,0XB0,0X99,0X92,
  15. 0X82,0XF8,0X80,0X90,0XBF,0XFF};
  16. uchar strtab[8];
  17. uchar temp_value;
  18. uint i;

  19. void display(char max,char min)
  20. {
  21.    strtab[0] = tab[max / 10];
  22.    strtab[1] = tab[max % 10];
  23.    strtab[2] = tab[min / 10];
  24.    strtab[3] = tab[min % 10];
  25.    strtab[4] = tab[11];
  26.    strtab[5] = tab[11];
  27.    strtab[6] = tab[temp_value / 10];
  28.    strtab[7] = tab[temp_value % 10];
  29. }

  30. void Timer0Init(void) //5毫秒@11.0592MHz
  31. {
  32.    AUXR |= 0x80;//定时器时钟1T模式
  33.    TMOD &= 0xF0;//设置定时器模式
  34.    TL0 = 0x00;//设置定时初值
  35.    TH0 = 0x28;//设置定时初值
  36.    TF0 = 0;//清除TF0标志
  37.    TR0 = 1;//定时器0开始计时
  38. }

  39. void Timer0_int() interrupt 1 using 0
  40. {
  41.    static uchar num;
  42.    TH0 = 0xcd;
  43.    TL0 = 0xd4;

  44.    switch (num)
  45.    {
  46.       case 0: P2 = ((P2&0x1f)|0xc0); P0 = 0x01;
  47.               P2 = ((P2&0x1f)|0xff); P0 = strtab[num]; break;
  48.       case 1: P2 = ((P2&0x1f)|0xc0); P0 = 0x02;
  49.               P2 = ((P2&0x1f)|0xff); P0 = strtab[num]; break;
  50.       case 2: P2 = ((P2&0x1f)|0xc0); P0 = 0x04;
  51.               P2 = ((P2&0x1f)|0xff); P0 = strtab[num]; break;
  52.       case 3: P2 = ((P2&0x1f)|0xc0); P0 = 0x08;
  53.               P2 = ((P2&0x1f)|0xff); P0 = strtab[num]; break;
  54.       case 4: P2 = ((P2&0x1f)|0xc0); P0 = 0x10;
  55.               P2 = ((P2&0x1f)|0xff); P0 = strtab[num]; break;
  56.       case 5: P2 = ((P2&0x1f)|0xc0); P0 = 0x20;
  57.               P2 = ((P2&0x1f)|0xff); P0 = strtab[num]; break;
  58.       case 6: P2 = ((P2&0x1f)|0xc0); P0 = 0x40;
  59.               P2 = ((P2&0x1f)|0xff); P0 = strtab[num]; break;
  60.       case 7: P2 = ((P2&0x1f)|0xc0); P0 = 0x80;
  61.               P2 = ((P2&0x1f)|0xff); P0 = strtab[num]; break;
  62.       default: break;
  63.    }
  64.    num++;
  65.    if (num == 8)
  66.       num = 0;
  67. }

  68. void Timer1Init(void) //5毫秒@11.0592MHz
  69. {
  70.    AUXR |= 0x40; //定时器时钟1T模式
  71.    TMOD &= 0xF0; //设置定时器模式
  72.    TL1 = 0x00; //设置定时初值
  73.    TH1 = 0x28; //设置定时初值
  74.    TF1 = 0; //清除TF0标志
  75.    TR1 = 1; //定时器0开始计时
  76. }

  77. void Timer1_int() interrupt 3
  78. {
  79.    i++;
  80.    if(i == 400)
  81.    {
  82.       i = 0;
  83.       temp_value = ReadTemp();
  84.    }
  85. }
复制代码

示例代码:display.h
  1. /************************************************************/
  2. /************************智术灵慧****************************/
  3. /******************蓝桥杯2011年省赛试题**********************/
  4. /***********************温度监控器***************************/
  5. /*******************联系QQ:1149809374***********************/
  6. /*************联系邮箱:418224424@aliyun.com*****************/
  7. /*****************官方博客:www.bkoak.com********************/
  8. /************************************************************/

  9. #ifndef __DISPLAY_H_
  10. #define __DISPLAY_H_

  11. void display(uchar max,uchar min);
  12. void Timer0Init(void);
  13. void Timer1Init(void);

  14. #endif
复制代码

2.温度测量单元
通过 DS18B20 数字温度芯片测量环境温度。

示例代码:ds18b20.c
  1. /************************************************************/
  2. /************************智术灵慧****************************/
  3. /******************蓝桥杯2011年省赛试题**********************/
  4. /***********************温度监控器***************************/
  5. /*******************联系QQ:1149809374***********************/
  6. /*************联系邮箱:418224424@aliyun.com*****************/
  7. /*****************官方博客:www.bkoak.com********************/
  8. /************************************************************/

  9. #include "stc15f2k60s2.h"
  10. #include "ds18b20.h"

  11. sbit DQ = P1^4;

  12. //单总线延时函数
  13. void Delay_ds18b20(uint n)
  14. {
  15.    uchar i;
  16.    while (n--)
  17.    {
  18.       for (i = 0;i > 12;i++);
  19.    }
  20. }

  21. //DS18B20芯片初始化
  22. bit Init_DS18B20(void)
  23. {
  24.    bit initflag = 0;
  25.    DQ = 1;
  26.    Delay_ds18b20(12);
  27.    DQ = 0;
  28.    Delay_ds18b20(80);
  29.    DQ = 1;
  30.    Delay_ds18b20(10);
  31.    initflag = DQ;
  32.    Delay_ds18b20(5);

  33.    return initflag;
  34. }

  35. //通过单总线向DS18B20写一个字节
  36. void Write_DS18B20(uchar dat)
  37. {
  38.    uchar i;
  39.    for (i = 0;i < 8;i++)
  40.    {
  41.       DQ = 0;
  42.       DQ = dat & 0x01;
  43.       Delay_ds18b20(5);
  44.       DQ = 1;
  45.       dat >>= 1;
  46.    }
  47.    Delay_ds18b20(5);
  48. }

  49. //从DS18B20读取一个字节
  50. uchar Read_DS18B20(void)
  51. {
  52. uchar i;
  53. uchar dat;
  54. for (i = 0;i < 8;i++)
  55. {
  56.       DQ = 0;
  57.       dat >>= 1;
  58.       DQ = 1;
  59.       if (DQ)
  60.       {
  61.          dat |= 0x80;
  62.       }
  63.       Delay_ds18b20(5);
  64.    }
  65.    return dat;
  66. }

  67. /******************温度读取********************/
  68. uchar ReadTemp(void)
  69. {
  70.    uchar TL, TH, Temp;

  71.    Init_DS18B20();
  72.    Write_DS18B20(0xcc);
  73.    Write_DS18B20(0x44);

  74.    Init_DS18B20();
  75.    Write_DS18B20(0xcc);
  76.    Write_DS18B20(0xbe);

  77.    TL = Read_DS18B20();
  78.    TH = Read_DS18B20();

  79.    Temp = (TH << 4)|(TL >> 4);

  80.    return Temp;
  81. }
复制代码
  1. /************************************************************/
  2. /************************智术灵慧****************************/
  3. /******************蓝桥杯2011年省赛试题**********************/
  4. /***********************温度监控器***************************/
  5. /*******************联系QQ:1149809374***********************/
  6. /*************联系邮箱:418224424@aliyun.com*****************/
  7. /*****************官方博客:www.bkoak.com********************/
  8. /************************************************************/

  9. #ifndef _DS18B20_H
  10. #define _DS18B20_H

  11. #define OW_SKIP_ROM 0xcc
  12. #define DS18B20_CONVERT 0x44
  13. #define DS18B20_READ 0xbe

  14. void Delay_ds18b20(uint n);
  15. bit Init_DS18B20(void);
  16. void Write_DS18B20(uchar dat);
  17. uchar Read_DS18B20(void);
  18. uchar ReadTemp(void);

  19. #endif
复制代码

程序中需要用到的延时函数:delay.c  &  delay.h
  1. /************************************************************/
  2. /************************智术灵慧****************************/
  3. /******************蓝桥杯2011年省赛试题**********************/
  4. /***********************温度监控器***************************/
  5. /*******************联系QQ:1149809374***********************/
  6. /*************联系邮箱:418224424@aliyun.com*****************/
  7. /*****************官方博客:www.bkoak.com********************/
  8. /************************************************************/

  9. #ifndef __DELAY_H_
  10. #define __DELAY_H_

  11. void Delay5us();
  12. void Delay10ms();
  13. void Delay500us();

  14. #endif
复制代码
  1. /************************************************************/
  2. /************************智术灵慧****************************/
  3. /******************蓝桥杯2011年省赛试题**********************/
  4. /***********************温度监控器***************************/
  5. /*******************联系QQ:1149809374***********************/
  6. /*************联系邮箱:418224424@aliyun.com*****************/
  7. /*****************官方博客:www.bkoak.com********************/
  8. /************************************************************/
  9. #include "delay.h"
  10. #include "intrins.h"

  11. void Delay5us() //@11.0592MHz
  12. {
  13. unsigned char i;

  14. _nop_();
  15. i = 11;
  16. while (--i);
  17. }

  18. void Delay10ms() //@11.0592MHz
  19. {
  20.    unsigned char i, j;

  21.    i = 108;
  22.    j = 145;
  23.    do
  24.    {
  25.       while (--j);
  26.    } while (--i);
  27. }

  28. void Delay500us() //@11.0592MHz
  29. {
  30.    unsigned char i, j;

  31.    _nop_();
  32.    _nop_();
  33.    i = 6;
  34.    j = 93;
  35.    do
  36.    {
  37.       while (--j);
  38.    } while (--i);
  39. }
复制代码

本章内容到这里就先结束了,剩下的程序和文档将在下一部分一同发出,希望大家先对这一部分内容进行加深理解,只有将每一部分都了解透彻才能更好地完成比赛的要求。

本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:Bkoak’s blog  http://www.bkoak.com

联系博主
邮箱:wjf418224424@aliyun.com
更多资讯关注公众号:智术灵慧(zslh_dyh)
QQ交流群:693211073


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:231500 发表于 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
  1. /************************************************************/
  2. /************************智术灵慧****************************/
  3. /******************蓝桥杯2011年省赛试题**********************/
  4. /***********************温度监控器***************************/
  5. /*******************联系QQ:1149809374***********************/
  6. /*************联系邮箱:418224424@aliyun.com*****************/
  7. /*****************官方博客:www.bkoak.com********************/
  8. /************************************************************/

  9. #include "stc15f2k60s2.h"
  10. #include "at24c02.h"
  11. #include "delay.h"
  12. sbit SCL = P2^0;
  13. sbit SDA = P2^1;
  14. //总线启动条件
  15. void IIC_Start(void)
  16. {
  17.    SDA = 1;
  18.    SCL = 1;
  19.    Delay5us();
  20.    SDA = 0;
  21.    Delay5us();
  22.    SCL = 0;
  23. }

  24. //总线停止条件
  25. void IIC_Stop(void)
  26. {
  27.    SDA = 0;
  28.    SCL = 1;
  29.    Delay5us();
  30.    SDA = 1;
  31. }

  32. //应答位控制
  33. void IIC_Ack(uchar ackbit)
  34. {
  35.    if (ackbit)
  36.    {
  37.       SDA = 0;
  38.    }
  39.    else
  40.    {
  41.       SDA = 1;
  42.    }
  43.    Delay5us();
  44.    SCL = 1;
  45.    Delay5us();
  46.    SCL = 0;
  47.    SDA = 1;
  48.    Delay5us();
  49. }

  50. //等待应答
  51. bit IIC_WaitAck(void)
  52. {
  53.    SDA = 1;
  54.    Delay5us();
  55.    SCL = 1;
  56.    Delay5us();
  57.    if (SDA)
  58.    {
  59.       SCL = 0;
  60.       IIC_Stop();
  61.       return 0;
  62.    }
  63.    else
  64.    {
  65.       SCL = 0;
  66.       return 1;
  67.    }
  68. }

  69. //通过I2C总线发送数据
  70. void IIC_SendByte(uchar byt)
  71. {
  72.    uchar i;
  73.    for (i = 0;i < 8;i++)
  74.    {
  75.       if (byt & 0x80)
  76.       {
  77.          SDA = 1;
  78.       }
  79.       else;
  80.       {
  81.          SDA = 0;
  82.       }
  83.       Delay5us();
  84.       SCL = 1;
  85.       byt <<= 1;
  86.       Delay5us();
  87.       SCL = 0;
  88.    }
  89. }

  90. //从I2C总线上接收数据
  91. uchar IIC_RecByte(void)
  92. {
  93.    uchar da;
  94.    uchar i;

  95.    for(i=0;i<8;i++)
  96.    {
  97.       SCL = 1;
  98.       Delay5us();
  99.       da <<= 1;
  100.       if(SDA)
  101.          da |= 0x01;
  102.       SCL = 0;
  103.       Delay5us();
  104.    }
  105.    return da;
  106. }

  107. void WriteByte_AT24C02(uchar add,uchar date)
  108. {
  109.    IIC_Start();
  110.    IIC_SendByte(0xa0);//发方式字1010 0000
  111.    IIC_WaitAck();
  112.    IIC_SendByte(add);
  113.    IIC_WaitAck();
  114.    IIC_SendByte(date);
  115.    IIC_WaitAck();
  116.    IIC_Stop();
  117.    Delay10ms();
  118. }

  119. uchar ReadByte_AT24C02(uchar add)
  120. {
  121.    uchar date;

  122.    IIC_Start();
  123.    IIC_SendByte(0xa0);//发方式字1010 0000
  124.    IIC_WaitAck();
  125.    IIC_SendByte(add);
  126.    IIC_WaitAck();

  127.    IIC_Start();
  128.    IIC_SendByte(0xa1);//发方式字1010 0001
  129.    IIC_WaitAck();
  130.    date = IIC_RecByte();
  131.    IIC_Ack(0);
  132.    IIC_Stop();
  133.    return date;
  134. }
复制代码

示例代码:at24c02.h
  1. /************************************************************/
  2. /************************智术灵慧****************************/
  3. /******************蓝桥杯2011年省赛试题**********************/
  4. /***********************温度监控器***************************/
  5. /*******************联系QQ:1149809374***********************/
  6. /*************联系邮箱:418224424@aliyun.com*****************/
  7. /*****************官方博客:www.bkoak.com********************/
  8. /************************************************************/

  9. #ifndef __AT24C02_H_
  10. #define __AT24C02_H_

  11. #define SlaveAddrW 0xA0
  12. #define SlaveAddrR 0xA1

  13. void IIC_Start(void);
  14. void IIC_Stop(void);
  15. void IIC_Ack(unsigned char ackbit);
  16. bit IIC_WaitAck(void);
  17. void IIC_SendByte(unsigned char byt);
  18. unsigned char IIC_RecByte(void);
  19. void WriteByte_AT24C02(uchar add,uchar date);
  20. uchar ReadByte_AT24C02(uchar add);

  21. #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
  1. /************************************************************/
  2. /************************智术灵慧****************************/
  3. /******************蓝桥杯2011年省赛试题**********************/
  4. /***********************温度监控器***************************/
  5. /*******************联系QQ:1149809374***********************/
  6. /*************联系邮箱:418224424@aliyun.com*****************/
  7. /*****************官方博客:www.bkoak.com********************/
  8. /************************************************************/
  9. #include "stc15f2k60s2.h"
  10. #include "display.h"
  11. #include "at24c02.h"
  12. #include "ds18b20.h"
  13. #include "delay.h"

  14. sbit KEY7 = P3^0;
  15. sbit KEY6 = P3^1;
  16. sbit KEY5 = P3^2;
  17. sbit KEY4 = P3^3;
  18. sbit PWM = P3^4;

  19. uchar Value, t;

  20. void Timer2Init(void);

  21. void main()
  22. {
  23.    char maxvalue,minvalue;

  24.    P2 = ((P2&0x1f)|0xa0);
  25.    P0 = 0x00;

  26.    Timer0Init();
  27.    Timer1Init();
  28.    Timer2Init();
  29.    ET0 = 1;
  30.    ET1 = 1;
  31.    EA = 1;

  32. //   WriteByte_AT24C02(0x00,30); //第一次烧录时使用,再次烧录注释即可
  33. //   WriteByte_AT24C02(0x01,23);
  34.    maxvalue = ReadByte_AT24C02(0x00);
  35.    minvalue = ReadByte_AT24C02(0x01);

  36.    while (1)
  37.    {
  38.       display(maxvalue,minvalue);
  39.       if (KEY7 == 0)
  40.       {
  41.          Delay10ms();
  42.          if (KEY7 == 0)
  43.          {
  44.             minvalue--;
  45.             while (!KEY7);
  46.          }
  47.       }
  48.       if (KEY5 == 0)
  49.       {
  50.          Delay10ms();
  51.          if (KEY5 == 0)
  52.          {
  53.             minvalue++;
  54.             while (!KEY5);
  55.          }
  56.       }

  57.       if (KEY6 == 0)
  58.       {
  59.          Delay10ms();
  60.          if (KEY6 == 0)
  61.          {
  62.             maxvalue--;
  63.             while (!KEY6);
  64.          }
  65.       }
  66.       if (KEY7 == 0)
  67.       {
  68.          Delay10ms();
  69.          if (KEY4 == 0)
  70.          {
  71.             maxvalue++;
  72.             while (!KEY4);
  73.          }
  74.       }
  75.       if (minvalue < 0)
  76.          minvalue = 0;
  77.       else if (minvalue > 99)
  78.          minvalue = 99;
  79.       if (maxvalue < 0)
  80.          maxvalue = 0;
  81.       else if (maxvalue > 99)
  82.          maxvalue = 99;

  83.       WriteByte_AT24C02(0x00,maxvalue);
  84.       WriteByte_AT24C02(0x01,minvalue);

  85.       if (Value < minvalue)
  86.       {
  87.          P2 = ((P2&0x1f)|0xa0);
  88.          P0 = 0x10;
  89.          
  90.          PWM = 1;
  91.       }
  92.       else if (Value > minvalue || Value < maxvalue)
  93.       {
  94.          P2 = ((P2&0x1f)|0xa0);
  95.          P0 = 0x00;
  96.    
  97.          PWM = 0;
  98.       }
  99.       else if (Value > maxvalue)
  100.       {
  101.          PWM = 0;
  102.          Delay500us();
  103.          PWM = 1;
  104.          Delay500us();

  105.          P2 = ((P2&0x1f)|0xa0);
  106.          P0 = 0x00;
  107.       }
  108.    }
  109. }

  110. void Timer2Init(void) //5毫秒@11.0592MHz
  111. {
  112.    T2L = 0x00;
  113.    T2H = 0x28;
  114.    
  115.    t++;
  116.    if(t == 200)
  117.    {
  118.       t = 0;
  119.       Value = ReadTemp();
  120.    }
  121. }
复制代码

本章资料下载地址
本章关于2011年省赛试题“温度监控器”的讲解到这里就结束了,如果有不理解的可以加群,找我或者群里的朋友交流。


本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:Bkoak’s blog  http://www.bkoak.com

联系博主
邮箱:wjf418224424@aliyun.com
更多资讯关注公众号:智术灵慧(zslh_dyh)
QQ交流群:693211073


第三届 温度记录器.rar

207.56 KB, 下载次数: 40, 下载积分: 黑币 -5

回复

使用道具 举报

板凳
ID:231500 发表于 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年省赛模拟试题“自动售水机”的源码请各位下载查看,不懂得地方留言或者加群交流。


本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:Bkoak’s blog  http://www.bkoak.com

联系博主
邮箱:wjf418224424@aliyun.com
更多资讯关注公众号:智术灵慧(zslh_dyh)
QQ交流群:693211073




第四届 自动售水机.rar

565.26 KB, 下载次数: 20, 下载积分: 黑币 -5

回复

使用道具 举报

地板
ID:231500 发表于 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年省赛模拟试题“自动售水机”的源码请各位下载查看,不懂得地方留言或者加群交流。


本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:Bkoak’s blog  http://www.bkoak.com

联系博主
邮箱:wjf418224424@aliyun.com
更多资讯关注公众号:智术灵慧(zslh_dyh)
QQ交流群:693211073




第四届 自动售水机.rar

565.26 KB, 下载次数: 28, 下载积分: 黑币 -5

回复

使用道具 举报

5#
ID:404878 发表于 2019-3-20 17:24 | 只看该作者
楼主停更了么?
回复

使用道具 举报

6#
ID:328200 发表于 2019-6-12 10:50 | 只看该作者
期待更新,点赞
回复

使用道具 举报

7#
ID:557774 发表于 2019-6-12 13:17 来自手机 | 只看该作者
怎么不用lcd12864当显示呢?学习不来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表