无线温度检测程序完整版.docx
《无线温度检测程序完整版.docx》由会员分享,可在线阅读,更多相关《无线温度检测程序完整版.docx(36页珍藏版)》请在冰豆网上搜索。
![无线温度检测程序完整版.docx](https://file1.bdocx.com/fileroot1/2022-11/19/6eeb62fb-3b09-4eed-ad30-d65f0c4de9ab/6eeb62fb-3b09-4eed-ad30-d65f0c4de9ab1.gif)
无线温度检测程序完整版
从机采用温度传感器DS18B20将测出的温度,通过红外线发射模块将数据发送,主机通过红外线接收模块在主机上通过4位数码管显示,同时在从机上也能看到当前从机采集到的温度数据;如果温度超过设置的上下限,会通过蜂鸣器报警提示。
[1]单片机的C语言应用程序设计(马忠梅、)
[2]新编单片机应用程序设计(张毅刚)
[3]崔双虎.温室无线传感器网络监测系统的设计研究:
硕士论文.中国农业大学,2007
[4]马琦.基于无线传感器网络的温室温湿度监测系统研究:
硕士论文.中北大学,2009
[5]庞娜,程德福.基于ZigBee无线传感器网络的温室监测系统设计[J].吉林大学学报,2010,28
(1):
55-60
[6]陈小忠,黄宁.单片机接口技术实用子程序[M].2007
主机程序
Main.c
#include"reg52.h"
#include"hs0038.h"
#include"LCD1602_8.h"
externUCHARR_DATA[7];
//-----------------------------------------------------
/*---------------------主函数-----------------------*/
voidmain(void)
{
LCD_initial();
Init_main();
Beep=0;
while
(1)
{
if(Succes)
{
LCD1602_write_char(1,3,R_DATA[0]);
LCD1602_write_char(1,4,R_DATA[3]);
LCD1602_write_char(1,5,R_DATA[4]);
LCD1602_write_char(1,6,R_DATA[5]);
LCD1602_write_char(1,7,R_DATA[6]);
Succes=0;
}
}
}
LCD1602_8.h
----------------------------------------------------------------------*/
#ifndef__LCD1602_H__
#define__LCD1602_H__
#include
#defineucharunsignedchar
#defineuintunsignedint
/*---------------------------------------------------------
LCD数据、控制口定义
---------------------------------------------------------*/
#defineLCD_DATAP0//LCD的数据口
sbitLCD_BUSY=LCD_DATA^7;//LCD忙信号位
sbitLCD_RS=P1^2;//LCD寄存器选择
sbitLCD_RW=P1^1;//LCD读写控制
sbitLCD_EN=P1^0;//LCD使能信号*/
/*---------------------------------------------------------
LCD数据定义
---------------------------------------------------------*/
#defineLCD_GO_HOME0x02//AC=0,光标、画面回HOME位
//输入方式设置
#defineLCD_AC_AUTO_INCREMENT0x06//数据读、写操作后,AC自动增一
#defineLCD_AC_AUTO_DECREASE0x04//数据读、写操作后,AC自动减一
#defineLCD_MOVE_ENABLE0x05//数据读、写操作,画面平移
#defineLCD_MOVE_DISENABLE0x04//数据读、写操作,画面不动
//设置显示、光标及闪烁开、关
#defineLCD_DISPLAY_ON0x0C//显示开
#defineLCD_DISPLAY_OFF0x08//显示关
#defineLCD_CURSOR_ON0x0A//光标显示
#defineLCD_CURSOR_OFF0x08//光标不显示
#defineLCD_CURSOR_BLINK_ON0x09//光标闪烁
#defineLCD_CURSOR_BLINK_OFF0x08//光标不闪烁
//光标、画面移动,不影响DDRAM
#defineLCD_LEFT_MOVE0x18//LCD显示(整屏)右移一位0x05
#defineLCD_RIGHT_MOVE0x1C//LCD显示(整屏)左移一位0x07
#defineLCD_CURSOR_LEFT_MOVE0x10//光标左移一位
#defineLCD_CURSOR_RIGHT_MOVE0x14//光标右移一位
//工作方式设置
#defineLCD_DISPLAY_DOUBLE_LINE0x38//两行显示
#defineLCD_DISPLAY_SINGLE_LINE0x30//单行显示
/*---------------------------------------------------------
延时程序
---------------------------------------------------------*/
voiddelay_us(unsignedintt)//延时US
{
while(t--);
}
voiddelay_ms(unsignedintt)//延时MS
{
unsignedinti;
unsignedcharj;
for(i=0;ifor(j=0;j<125;j++);//11.0592--j=125;12M--j=110;
}
/*---------------------------------------------------------
LCD程序
---------------------------------------------------------*/
voidLCD_check_busy(void)//检测LCD状态,看它是不是还在忙呢
{
while
(1)
{
LCD_EN=0;//下降沿触发
LCD_RS=0;//1:
数据寄存器;0:
命令寄存器
LCD_RW=1;//1:
读;0:
写
LCD_DATA=0xff;
LCD_EN=1;
if(!
LCD_BUSY)break;
}
LCD_EN=0;
}
voidLCD_cls(void)//LCD清屏
{
LCD_check_busy();
LCD_RS=0;
LCD_RW=0;
LCD_DATA=1;
LCD_EN=1;
}
voidLCD_write_instruction(unsignedcharLCD_instruction)//写指令到LCD
{
LCD_check_busy();
LCD_RS=0;
LCD_RW=0;
LCD_DATA=LCD_instruction;
LCD_EN=1;
}
voidLCD_write_data(unsignedcharLCD_data)//写一个字节数据到LCD
{
LCD_check_busy();
LCD_RS=1;
LCD_RW=0;
LCD_DATA=LCD_data;
LCD_EN=1;
LCD_EN=0;
}
voidLCD1602_write_string(unsignedx,unsignedchary,unsignedchar*s)////写入字符串到第x(1,2)行y(0,15)列
{
unsignedchari=0;
x=(x-1)*0x40;//第几行
y=x+y;//第几列
LCD_write_instruction(0x80+y);
while(s[i]!
=0x00)//写入字符串值
{
LCD_write_data(s[i]);
i++;
}
}
voidLCD1602_write_char(unsignedx,unsignedchary,unsignedchardat)////写入字符到第x(1,2)行y(0,15)列
{
unsignedchari=0;
x=(x-1)*0x40;//第几行
y=x+y;//第几列
LCD_write_instruction(0x80+y);
LCD_write_data(dat);//写入字符串值
}
voidLCD1602_move(charx)//整屏向左移动次数:
X
{
LCD_write_instruction(0x07);//设置成写空整屏就向左移动
for(;x>0;x--)
{
LCD_write_instruction(0x80+0x27);//在最后的那个位置写空格
LCD_write_data('');
delay_ms(130);
}
LCD_write_instruction(0x06);//关设置
}
voidLCD1602_CURSOR(unsignedcharwei,unsignedcharx,unsignedchary)//光标定位(0x00~0X0F0X40~0X4F),显示?
(1/0),闪烁?
(1/0)
{
LCD_write_instruction(0x80+wei);//0x00~0X0F0X40~0X4F
if(x==1&&y==0)
{LCD_write_instruction(LCD_DISPLAY_ON|LCD_CURSOR_ON|LCD_CURSOR_BLINK_OFF);//显示?
光标?
闪烁?
LCD_write_instruction(LCD_DISPLAY_ON|LCD_CURSOR_ON|LCD_CURSOR_BLINK_OFF);}
elseif(x==0&&y==1)
{LCD_write_instruction(LCD_DISPLAY_ON|LCD_CURSOR_OFF|LCD_CURSOR_BLINK_ON);
LCD_write_instruction(LCD_DISPLAY_ON|LCD_CURSOR_OFF|LCD_CURSOR_BLINK_ON);}
elseif(x==1&&y==1)
{LCD_write_instruction(LCD_DISPLAY_ON|LCD_CURSOR_ON|LCD_CURSOR_BLINK_ON);
LCD_write_instruction(LCD_DISPLAY_ON|LCD_CURSOR_ON|LCD_CURSOR_BLINK_ON);}
else
{LCD_write_instruction(LCD_DISPLAY_ON|LCD_CURSOR_OFF|LCD_CURSOR_