Protues 基于51单片机的DS18B20温度采集:键盘输入温度上下限_超出设定温度范围报警_8数码管显示

功能实现:
1、设计单片机与16按键的矩阵式键盘接口以及8数码管的接口电路,测试显示和按键功能。
2、设计单片机与DS18B20的接口电路,实现数字温度信息的采集,然后编程处理采集到的数据,得到温度值。
3、将采集的温度信息的显示在数码管上。
4、设计声光报警电路,设置温度的上下限值,实现报警功能
5,将温度上下限显示在数码管上。
6,温度超过温度上限时,步进电机驱动风扇降温。
欢迎超链接过来的读者,功能演示为GIF图片,鼠标请滑慢一点

protues仿真图
在这里插入图片描述

功能展示

温度的实时获取
在这里插入图片描述
温度的设置与查看
在这里插入图片描述
报警效果
在这里插入图片描述
代码较长分开说明:

一、 定义与函数声明
#include <reg52.h>
#include <intrins.h> // 因为此文件中用到了延时函数_nop_()(延时一个机器周期),所以要包含_nop_()的头文件、
#define u16 unsigned int
#define u8 unsigned char
char temperatureH = 100, temperatureL = -10; //最高温,最低温  char范围-128~127
// 键盘定义
u8 line, row, Sort = 0, kvalue = 0, kscan, kscanA = 0, kscanB = 0;
u8 keyRowLine();
void getKeyVaule();
void setH();
void setL();
void showH();
void showL();
void dealKey();
// 测温定义
sbit SPEAK = P3 ^ 1;
sbit DQ = P3 ^ 7;
u8 flag = 0, EX = 0, setting = 0, led_active = 0;
u16 n = 0;
u8 dat[10] = {
   0, 0, 0, 12, 5, 6, 7, 8, 9};
u8 dispcode[] =
    {
   0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
     0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71,
     0x40, 0x76, 0xb8, 0xb7, 0xbe}; //'-'  'H'   'L'  'n'  'u'
// *****************函数声明*******************
void delay5(u8);
u8 initialize();
void write1Byte(u8 come);
u8 read1Byte();
u16 getTemperature();
void Temp_treatment();
void LED_4();
void alarm();

唯一要注意的是延时函数_nop_()为延时一个机器周期的作用

、代码逻辑概括 主函数
// *****************主函数**********************
void main()
{
   
    u8 i;
    delay5(1000);
    while (1)
    {
   
        getKeyVaule();    //键盘函数
        dealKey();        //处理按键
        Temp_treatment(); //温度函数
        for (i = 0; i < 30; i++)
        {
   
            LED_4(); //显示LED
            delay5(1000);
            if (EX)
            {
   
                alarm(); //报警
                delay5(1000);
            }
        }
    }
}

for (i = 0; i < 30; i++) 语句是为了在一次while (1)循环中LED显示次数增多,增强LED显示稳定性。
EX代表温度超过范围,会使蜂鸣器报警。

、精确延时5us 延时函数
// *****************延时函数********************
void delay5(u8 n)
{
   
    do
    {
    //搭配11.059MHZ 精确延时5us
        _nop_();
        _nop_();
        _nop_();
        n--;
    } while (n);
}
、51单
  • 24
    点赞
  • 161
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值