朱野:基于无线传感网络的温度监控系统
#define LCD_CLEAR_SCREEN 0x01 // 清屏
#define LCD_HOMING 0x02 // 光标返回原点 void LCD_Write(bit style, unsigned char input) {
LcdEn=0;
LcdRs=style;
LcdRw=0; _nop_();
DBPort=input; _nop_();//注意顺序 LcdEn=1; _nop_();//注意顺序 LcdEn=0; _nop_(); LCD_Wait(); }
/设置显示模式*************************************************/ #define LCD_SHOW 0x04 //显示开 #define LCD_HIDE 0x00 //显示关 #define LCD_CURSOR 0x02 //显示光标
#define LCD_NO_CURSOR 0x00 //无光标 #define LCD_FLASH 0x01 //光标闪动 #define LCD_NO_FLASH 0x00 //光标不闪动 void LCD_SetDisplay(unsigned char DisplayMode) {
LCD_Write(LCD_COMMAND, 0x08|DisplayMode); }
/设置输入模式************************************************************/ #define LCD_AC_UP 0x02
#define LCD_AC_DOWN 0x00 // default #define LCD_MOVE 0x01 // 画面可平移 #define LCD_NO_MOVE 0x00 //default void LCD_SetInput(unsigned char InputMode) {
LCD_Write(LCD_COMMAND, 0x04|InputMode); }
/初始化LCD**************************************************************/ void LCD_Initial() {
LcdEn=0;
LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵 LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动 }
//液晶字符输入的位置**************************************************/
30
安徽工程大学机电学院毕业设计(论文)
void GotoXY(unsigned char x, unsigned char y) {
if(y==0)
LCD_Write(LCD_COMMAND,0x80|x); if(y==1)
LCD_Write(LCD_COMMAND,0x80|(x-0x40)); }
/***********************将字符输出到液晶显示****************************/ void Print(unsigned char *str) {
while(*str!='\\0') {
LCD_Write(LCD_DATA,*str); str++; } }
void show_value() //液晶显示程序 {
ReadTemp(); //开启温度采集程序
temp_to_str(); //温度数据转换成液晶字符 GotoXY(12,1); //液晶字符显示位置 Print(TempBuffer); //显示测量温度
GotoXY(12,0); //液晶字符显示位置 Print(maxtemp); //显示报警温度 Delay1ms(400); //扫描延时 }
void Warming()
{if(temp_value>=maxtenp) JDQ=~JDQ; else JDQ=0; }
#include
typedef unsigned char uchar; typedef unsigned char uint;
//****************************************IO端口*************************************** sbit MISO =P1^3; sbit MOSI =P1^1; sbit SCK =P1^4; sbit CE =P1^5; sbit CSN =P1^0; sbit IRQ =P1^2;
31
定义朱野:基于无线传感网络的温度监控系统
sbit LcdRs = P2^3; sbit LcdRw = P2^2; sbit LcdEn = P2^1;
sbit ACC0 = ACC^0; sbit ACC7 = ACC^7;
sbit Set = P2^5; //模式切换键 sbit Up = P2^6; //加法按钮 sbit Down = P2^7; //减法按钮
sbit DQ = P2^0; //温度传送数据IO口
sbit JDQ= P2^4; //发光二极管模拟继电器输出 char done,count,temp,flag,up_flag,down_flag; int temp_value; //温度值 int temp_value; //报警温度 uchar TempBuffer[5];
/***********1602液晶显示部分子程序****************/
//Port Definitions***************************************
sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口 /内部等待函数*********************************************** unsigned char LCD_Wait(void) {
LcdRs=0;
LcdRw=1; _nop_();
LcdEn=1; _nop_(); LcdEn=0;
return DBPort; }
//向LCD写入命令或数据**************************** #define LCD_COMMAND 0 // Command #define LCD_DATA 1 // Data #define LCD_CLEAR_SCREEN 0x01 // 清屏
#define LCD_HOMING 0x02 // 光标返回原点 void LCD_Write(bit style, unsigned char input) {
LcdEn=0;
LcdRs=style;
LcdRw=0; _nop_();
DBPort=input; _nop_();//注意顺序 LcdEn=1; _nop_();//注意顺序 LcdEn=0; _nop_(); LCD_Wait(); }
/设置显示模式*************************************************/ #define LCD_SHOW 0x04 //显示开
32
安徽工程大学机电学院毕业设计(论文)
#define LCD_HIDE 0x00 //显示关 #define LCD_CURSOR 0x02 //显示光标
#define LCD_NO_CURSOR 0x00 //无光标 #define LCD_FLASH 0x01 //光标闪动 #define LCD_NO_FLASH 0x00 //光标不闪动 void LCD_SetDisplay(unsigned char DisplayMode) {
LCD_Write(LCD_COMMAND, 0x08|DisplayMode); }
//设置输入模式************************************************************ #define LCD_AC_UP 0x02
#define LCD_AC_DOWN 0x00 // default #define LCD_MOVE 0x01 // 画面可平移 #define LCD_NO_MOVE 0x00 //default void LCD_SetInput(unsigned char InputMode) {
LCD_Write(LCD_COMMAND, 0x04|InputMode); }
//初始化LCD************************************************************ void LCD_Initial() {
LcdEn=0;
LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵 LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动 }
//液晶字符输入的位置************************ void GotoXY(unsigned char x, unsigned char y) {
if(y==0)
LCD_Write(LCD_COMMAND,0x80|x); if(y==1)
LCD_Write(LCD_COMMAND,0x80|(x-0x40)); }
//将字符输出到液晶显示
void Print(unsigned char *str) {
while(*str!='\\0') {
LCD_Write(LCD_DATA,*str); str++;
33
朱野:基于无线传感网络的温度监控系统
} }
void show_value() //液晶显示程序 {
ReadTemp(); //开启温度采集程序
temp_to_str(); //温度数据转换成液晶字符 GotoXY(12,1); //液晶字符显示位置 Print(TempBuffer); //显示测量温度
GotoXY(12,0); //液晶字符显示位置 Print(maxtemp); //显示报警温度 Delay1ms(400); //扫描延时 }
void Warming()
{if(temp_value>=maxtenp) JDQ=~JDQ; else JDQ=0; }
/***********ds18b20子程序*************************/ /***********ds18b20延迟子函数(晶振12MHz )*******/ void delay_18B20(unsigned int i) {
while(i--); }
/**********ds18b20初始化函数**********************/ void Init_DS18B20(void) {
unsigned char x=0;
DQ = 1; //DQ复位 delay_18B20(8); //稍做延时
DQ = 0; //单片机将DQ拉低
delay_18B20(80); //精确延时 大于 480us DQ = 1; //拉高总线 delay_18B20(14);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay_18B20(20); }
/***********ds18b20读一个字节**************/ unsigned char ReadOneChar(void) {
uchar i=0;
uchar dat = 0; for (i=8;i>0;i--) {
34