资源简介
该系统以STC89C51RC单片机最小系统为核心,利用DS18B20温度采集模块,LCD 1602显示屏、L298N电机驱动模块、HC-SR501人体感应模块、舵机控制模块、ESP8266 WIFI控制模块组成智能风扇控制系统。当有人进入室内,HC-SR501人体感应模块会监测到有人出现,同时DS18B20温度采集模块将采集到的温度与系统开始设置的阈值做比较,并将采集到的温度数据显示在LCD 16 -02显示屏上。当室温高于所设置的温度且有人存在的情况下,风扇将会自动吹风;当温度低于所设置的温度时风扇仍保持关闭状态。
代码片段和文件信息
/*
* DS18B20测试程序
*
* 用途:数码管模块测试程序
*
* 作者 日期 备注
* Huafeng Lin 2012/04/21 新增
* Huafeng Lin 2012/04/21 修改
*
*/
#include
#include
#define uchar unsigned char
void ds18b20_delay(unsigned char i)
{
for(i;i>0;i--);
}
void ds18b20_delay1(uchar i)
{
uchar jk;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void Init_DS18B20(void)
{
unsigned char x=0;
DQ=1; //DQ先置高
ds18b20_delay(8); //稍延时
DQ=0; //发送复位脉冲
ds18b20_delay(80); //延时(>480us)
DQ=1; //拉高数据线
ds18b20_delay(5); //等待(15~60us)
x=DQ; //用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1
ds18b20_delay(20);
}
//读一个字节
ReadOneChar(void) //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号
{
unsigned char i=0; //每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期
unsigned char dat=0;
for (i=8;i>0;i--) //一个字节有8位
{
DQ=1;
ds18b20_delay(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80; //DQ=1没信号,不读
ds18b20_delay(4);
}
return(dat);
}
//写一个字节
void WriteOneChar(unsigned char dat)
{
unsigned char i=0; //数据线从高电平拉至低电平,产生写起始信号。15us之内将所需写的位送到数据线上,
for(i=8;i>0;i--) //在15~60us之间对数据线进行采样,如果是高电平就写1,低写0发生。
{
DQ=0; //在开始另一个写周期前必须有1us以上的高电平恢复期。
DQ=dat&0x01;
ds18b20_delay(5);
DQ=1;
dat>>=1;
}
ds18b20_delay(4);
}
//读温度值(低位放tempL;高位放tempH;)
void ReadTemperature(void)
{
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳过读序列号的操作
WriteOneChar(0x44); //启动温度转换
ds18b20_delay(125); //转换需要一点时间,延时
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳过读序列号的操作
WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位)
tempL=ReadOneChar(); //读出温度的低位LSB
tempH=ReadOneChar(); //读出温度的高位MSB
if(tempH>0x7f) //最高位为1时温度是负
{
tempL=~tempL; //补码转换,取反加一
tempH=~tempH+1;
fg=0; //读取温度为负时fg=0
}
sdata = tempL/16+tempH*16; //整数部分
xiaoshu1 = (tempL&0x0f)*10/16; //小数第一位
xiaoshu2 = (tempL&0x0f)*100/16%10; //小数第二位
xiaoshu=xiaoshu1*10+xiaoshu2; //小数两位
}
//显示函数
void Led(unsigned int date)
{
if(fg==1)
{
P2=0xfe; //P1.0=0,选通第一位
P0=seg7code[date/10]; //十位数,查表,输出
ds18b20_delay1(5);
P0=0xff; //消隐
P2=0xfd; //P1.1=0选通第二位,个位数
P0=seg7codeB[date%10];
ds18b20_delay1(5);
P0=0xff; //消隐
P2=0xfb; //P1.3=0选通第三位,小数点第一位
P0=seg7code[xiaoshu1];
ds18b20_delay1(5);
P0=0xff; //消隐
P2=0xf7; //P1.3=0选通第四位,小数点第二位
P0=seg7code[xiaoshu2];
ds18b20_delay1(5);
P0=0xff; //消隐
}
if(fg==0) //温度为负时显示的数据
{
P2=0xfe; //P1.0=0,选通第一位
P0=seg7code[11]; //显示负号
ds18b20_delay1(5);
P0=0xff; //消隐
P2=0xfd; //P1.1=0选通第二位,十位数
P0=seg7code[date/10];
ds18b20_delay1(5);
P0=0xff; //消隐
P2=0xfb; //P1.3=0选通第三位,个位数
P0=seg7codeB[date%10];
ds18b20_delay1(5);
P0=0xff; //消隐
P2
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-10-27 22:14 自感应风扇\
文件 14848 2017-10-27 22:13 自感应风扇\Thumbs.db
目录 0 2017-10-27 22:14 自感应风扇\仿真\
文件 123781 2017-06-29 17:39 自感应风扇\仿真\Last Loaded 自感应风扇.DBK
文件 123781 2017-06-29 22:24 自感应风扇\仿真\自感应风扇.DSN
文件 1028 2017-07-01 10:02 自感应风扇\仿真\自感应风扇.PWI
文件 314577 2017-07-01 09:59 自感应风扇\自感应温控风扇.docx
文件 41813 2017-06-30 13:25 自感应风扇\自感应风扇.DSN.pdf
目录 0 2017-10-27 22:15 自感应风扇\自感应风扇程序\
文件 3616 2017-06-28 21:44 自感应风扇\自感应风扇程序\DS18B20.c
文件 3934 2017-06-29 22:17 自感应风扇\自感应风扇程序\DS18B20.h
文件 1599 2017-06-28 22:00 自感应风扇\自感应风扇程序\lcd.c
文件 2381 2017-06-29 22:21 自感应风扇\自感应风扇程序\lcd.h
目录 0 2017-10-27 22:14 自感应风扇\自感应风扇程序\Listings\
文件 7095 2017-06-28 21:44 自感应风扇\自感应风扇程序\Listings\DS18B20.lst
文件 3958 2017-06-28 22:18 自感应风扇\自感应风扇程序\Listings\lcd.lst
文件 4610 2017-06-29 22:23 自感应风扇\自感应风扇程序\Listings\main.lst
文件 14545 2017-06-28 21:00 自感应风扇\自感应风扇程序\Listings\STARTUP.lst
文件 19888 2017-06-29 23:07 自感应风扇\自感应风扇程序\Listings\自感应风扇.m51
文件 1862 2017-06-29 23:07 自感应风扇\自感应风扇程序\main.c
目录 0 2017-10-27 22:15 自感应风扇\自感应风扇程序\ob
文件 8260 2017-06-28 21:44 自感应风扇\自感应风扇程序\ob
文件 125 2017-06-28 21:44 自感应风扇\自感应风扇程序\ob
文件 5250 2017-06-28 22:18 自感应风扇\自感应风扇程序\ob
文件 113 2017-06-28 22:18 自感应风扇\自感应风扇程序\ob
文件 15126 2017-06-29 22:23 自感应风扇\自感应风扇程序\ob
文件 116 2017-06-29 22:23 自感应风扇\自感应风扇程序\ob
文件 828 2017-06-28 21:00 自感应风扇\自感应风扇程序\ob
文件 13427 2017-06-29 23:07 自感应风扇\自感应风扇程序\ob
文件 1075 2017-06-29 23:07 自感应风扇\自感应风扇程序\ob
文件 2625 2017-06-29 23:07 自感应风扇\自感应风扇程序\ob
............此处省略5个文件信息
- 上一篇:Qt多线程教程.rar
- 下一篇:dsp 28335的实验报告 带滤波的AD采样
相关资源
- 电子万年历毕业设计基于AT89C51单片机
- 51单片机封装库
- C51单片机密码锁4×4矩阵键盘+LCD1602液
- 基于51单片机的万年历程序
- 基于51单片机的lcd篮球计分器程序
- 51单片机 等精度测频率 LCD显示 C程序
- 基于51单片机的锯齿波&正弦波发生器
- 利用51单片机实现了红外发射以及接受
- 51单片机LED16X16点阵滚动显示
- 基于51单片机的空调遥控器C源程序
- 51单片机控制RDA5807收音机模块
- 基于C51单片机的声光控灯
- 51单片机电子门铃设计
- 基于51单片机的 4×4键盘及8位数码管显
- 基于51单片机的霹雳灯
- 51单片机贪吃蛇游戏程序
- 51单片机控制57步进电机启停,正反转
- 51单片机实现Modbus从机程序
- 51单片机看门狗设计
- 51单片机开发的韦根接受的C程序;支
- 51单片机ADXL345三轴加速度传感器源代
- 51单片机1602万年历矩阵按键
- 超声波测距仪
- STC89C52RC使用电位器控制WS2812B调光
- C51单片机电子琴
- 带串口通信的温度控制器(带proteus仿
- 基于51单片机的智能家居系统程序
- AD9833驱动程序
- 基于C51单片机音乐盒设计[1]
- 89C51单片机控制HT1621B驱动LCD(C程序)
评论
共有 条评论