标题:
基于51单片机智能家居仿真程序设计 屏幕无显示 求帮助
[打印本页]
作者:
love287168663
时间:
2022-5-16 00:03
标题:
基于51单片机智能家居仿真程序设计 屏幕无显示 求帮助
该智能家居基于51单片机控制, 同时外接DS1302和DS18B20以及LCD液晶屏等,对智能家居智进行简易的控制。
该设计运用到的芯片:STC89C58+DS18B20+DHT11+DS1302+LCD12864+红外人体感应器+无线遥控
功能:
1.数字可调万年历
2.显示空气中温度和湿度
3.对环境温度和湿度可以自动控制
4.测量水的温度
5.无线控制
6.防盗报警
7.低功耗模式
8.开机图片
9.EEPROM数据保存
51hei.png
(69.2 KB, 下载次数: 49)
下载附件
2022-5-16 04:30 上传
单片机源程序如下:
/****************************************/
/************DHT11驱动程序***************/
/****************************************/
#include<reg52.h>
#include<intrins.h>
#include"DHT11.h"
#include"delay_ms.h"
unsigned int w_s;
unsigned char sd_shi,sd_ge,wd_shi1,wd_ge1,dsq_0,sign_wd,sign_sd; //先要在这进行声明,然后在头文件(DHT11.h)中用extern进行外部变量声明
unsigned char set_up_sd,set_up_wd; //湿度报警和温度报警阀值
char shidu,wendu;
void delay_us(unsigned int x) //DHT11专用延时
{
while(x--);
}
void init_DHT11() //初始化DHT11
{
unsigned char k=250;
DHT=0;
delay_us(2100); //延时18.925ms
DHT=1;
delay_us(2); //延时34us,等待DHT11响应,变低电平
while((DHT==0)&&k--); //判断DHT11是否响应,且要防止掉入死循环,先是低电平然后,等待DHT11变高电平
k=250;
while((DHT==1)&&k--); //判断DHT11是否开始传输数据(再次进入低电平表示开始传输数据)
}
unsigned char Read_OneChar() //从DHT11读出一个字节数据
{
unsigned char g;
unsigned char temp;
for(g=0;g<8;g++)
{
temp=temp<<1; //从高字节开始读起,每读一位向左移一位
while(!DHT); //判断是否DHT11信号是否变高电平(这步非常非常关键)
delay_us(3); //变高后延时44us左右,这样如果是“1”则还是高电平,“0”就是低电平了
if(DHT==1) //进行“1”和“0”的判断
{
temp=temp|0x01;
delay_us(1);
}
}
return(temp);
}
unsigned int return_wendu_shidu() //读取温度湿度
{
unsigned char sd_h,sd_l,wd_h,wd_l,crc;
unsigned int sd_wd;
init_DHT11(); //初始化DHT11
sd_h=Read_OneChar(); //湿度高8位
sd_l=Read_OneChar(); //湿度低8位
wd_h=Read_OneChar(); //温度高8位
wd_l=Read_OneChar(); //温度低8位
crc=Read_OneChar(); //CRC校验8位
sign_sd=sd_h; //报警湿度
sign_wd=wd_h; //报警温度
sd_wd=0x00ff&sd_h;
sd_wd=sd_wd<<8;
sd_wd=sd_wd|wd_h; //高8位为湿度整数部分,低8位为温度整数部分
return(sd_wd);
}
void qushu_DHT11(unsigned int qs) //取数将数据分离
{
unsigned char sd_H,wd_H; //因为进来的数据是int型,高八位为湿度,低八位为温度
wd_H=0x00ff&qs; //所以要将数据分离开来,再次分成char型,然后再进行取数
qs=qs>>8; //取湿度数据
sd_H=qs; //直接将int型给char型,会自动保留低八位
sd_shi=sd_H/10; //关于为什么要这样,因为这样可以不用设置全局变量
sd_ge=sd_H%10; //没有全局变量就容易将程序模块化!!!
wd_shi1=wd_H/10;
wd_ge1=wd_H%10;
}
复制代码
Keil代码与Proteus仿真下载:
01.7z
(298.08 KB, 下载次数: 27)
2022-5-16 04:34 上传
点击文件名下载附件
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1