历史上的今天
今天是:2024年12月08日(星期日)
2021年12月08日 | 基于51单片机的智能家居控制温度光照气体检测
2021-12-08 来源:eefocus
硬件设计
A. 该设计基于51单片机的智能家居控制温度光照空气监测;
B. 由LCD1602作为显示器,温度采用DS18B20,光照采用光敏二极管,具有声光报警装置,通过三个按键可设置阈值;
仿真图如下:

程序设计:
#include #include "intrins.h" #define u8 unsigned char #define u16 unsigned int #define uchar unsigned char #define uint unsigned int uchar yushe_wendu=50; //温度预设值 uchar yushe_yanwu=100; //光照预设值 uchar yushe_tianranqi=100; //天然气预设值 uint wendu; //温度值全局变量 uchar yanwu; //用于读取ADC数据 uchar tianranqi; //用于读取ADC数据 uint times = 0; //变量times,计数,用于液晶切换显示 uchar shezhi_flag = 0; //变量标志位,用于切换显示设置天然气预设值 //运行模式 uchar Mode=0; //=1是设置温度阀值 =2是设置光照阀值 =0是正常监控模式 uint Buzzer=0; uint count = 0; //管脚声明 sbit Led_Yellow =P2^4; //黄灯 sbit speaker =P2^0; //蜂鸣器 sbit cg=P2^3; //总开关 sbit c1_k=P1^1; //窗帘1开关 sbit c2_k=P1^4; //窗帘2开关 /******************************************************************** * 名称 : delay_1ms() * 功能 : 延时1ms函数 * 输入 : q * 输出 : 无 ***********************************************************************/ void delay_ms(uint q) { uint i,j; for(i=0;i } /*********************************************************************************************************** LCD1602相关函数 ***********************************************************************************************************/ //LCD管脚声明 (RW引脚实物直接接地,因为本设计只用到液晶的写操作,RW引脚一直是低电平) sbit LCDRS = P2^7; sbit LCDEN = P2^6; sbit D0 = P0^0; sbit D1 = P0^1; sbit D2 = P0^2; sbit D3 = P0^3; sbit D4 = P0^4; sbit D5 = P0^5; sbit D6 = P0^6; sbit D7 = P0^7; //LCD延时 void LCDdelay(uint z) //该延时大约100us(不精确,液晶操作的延时不要求很精确) { uint x,y; for(x=z;x>0;x--) for(y=10;y>0;y--); } void LCD_WriteData(u8 dat) { if(dat&0x01)D0=1;else D0=0; if(dat&0x02)D1=1;else D1=0; if(dat&0x04)D2=1;else D2=0; if(dat&0x08)D3=1;else D3=0; if(dat&0x10)D4=1;else D4=0; if(dat&0x20)D5=1;else D5=0; if(dat&0x40)D6=1;else D6=0; if(dat&0x80)D7=1;else D7=0; } //写命令 void write_com(uchar com) { LCDRS=0; LCD_WriteData(com); // DAT=com; LCDdelay(5); LCDEN=1; LCDdelay(5); LCDEN=0; } //写数据 void write_data(uchar date) { LCDRS=1; LCD_WriteData(date); // DAT=date; LCDdelay(5); LCDEN=1; LCDdelay(5); LCDEN=0; } /*------------------------------------------------ 选择写入位置 ------------------------------------------------*/ void SelectPosition(unsigned char x,unsigned char y) { if (x == 0) { write_com(0x80 + y); //表示第一行 } else { write_com(0xC0 + y); //表示第二行 } } /*------------------------------------------------ 写入字符串函数 ------------------------------------------------*/ void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { SelectPosition(x,y) ; while (*s) { write_data( *s); s ++; } } 链接:https://pan.baidu.com/s/1hfpynLhRsGrz7ThPg0pnIw 提码:9oo8 for(j=0;j<110;j++);
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:16 编辑 有谁画过高频类的PCB板并且性能稳定,我以前画的总是干扰太大,网上的一些抗干扰的方法说的又比较抽象,没有具体实物 请画过的帮忙传一份上来吧,小弟下回去研究研究。最好能有一些注释说明的 ...… 查看全部问答> |
|
我们公司要招一名Linux下的蓝牙开发工程师。公司地址在上海中山公园附近。薪资待遇1万/月。 职位要求: 1、精通LINUX系统以及C/C++编程(必须)。 2、熟悉嵌入式系统、单片机的开发。 3、精通蓝牙协议、蓝牙应用开发(必须)。 4、至少三年以 ...… 查看全部问答> |
|
CS8900、CS8900A芯片是Cirrus Logic公司生产的一种局域网处理芯片,在嵌入式领域中使用非常常见。它的封装是100-pin TQFP,内部集成了在片RAM、10BASE-T收发滤波器,并且提供8位和16位两种接口,一般在单片机中,使用了CS8900的8位 ...… 查看全部问答> |
|
最近也在学习C2000,如果用库的话可以在controlSTIUE的例程的目录中,复制一个,然后在其工程中编制自己的程序。其好处是可以在FLASH中运行。 但我看坛子里的童鞋都用非库。所以我也看看非库但非库只能在RAM中运行。至于怎么在FLASH ...… 查看全部问答> |




