📄 main.c
字号:
//-----------------------------------------------------------------
// 名称: 温室监控系统仿真
//-----------------------------------------------------------------
// 说明: 本例运行时,所获取的温度值可通过串口传送给上位PC机显示,
// 上位PC机可通过串口控制下位机喷灌/通风/采光系统运行.
//
//-----------------------------------------------------------------
#include <pic.h>
#include <stdio.h>
#include <string.h>
#include "LCD1602_4BIT.h"
#include "DS18B20.h"
#define FAN_IN1 RD0 //通风电机控制
#define FAN_IN2 RD1
#define FAN_IN3 RD2 //采光电机控制
#define FAN_IN4 RD3
#define RELAY RD4 //水泵开关控制
volatile char recv_buff[12]; //串口接收缓冲
volatile char send_buff[10]; //串口发送缓冲
volatile char disp_buff[17] = "TEMP:"; //显示缓冲
volatile INT8U recv_OK = 0; //接收状态
INT8 _temp_sign; //温度符号(有符号数1,-1)
INT8U _temp_int, _temp_df; //温度整数部分与小数部分
//-----------------------------------------------------------------
// 延时子程序
//-----------------------------------------------------------------
void delay(INT8U x)
{
while (--x) __delay_ms(100);
}
//-----------------------------------------------------------------
// 串口初始化
//-----------------------------------------------------------------
void Serial_port_init()
{
TRISC6 = 0; TRISC7 = 1; //TXD,RXD方向设置
SYNC = 0; //选择异步通信模式
BRGH = 1; //选择高速波特率发生模式
TXEN = 1; //允许发送数据
SPBRG = _XTAL_FREQ/16/9600 - 1; //设置波特率为9600
SPEN = 1; //串行通信端口打开
CREN = 1; //使能连续接收串行数据
}
//------------------------------------------------------------------
// 通过串口向PC机发送字符串
//------------------------------------------------------------------
void Send_String(char *s)
{
}
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
ADCON1 = 6; //RA端口设为数字端口
TRISD = 0x00; PORTD = 0xFF; //电机控制端口输出
Serial_port_init(); //初始化串口
RCIE = 1; //使能接收中断
GIE = 1; //开放全局中断
PEIE = 1; //使能外部中断
LCD_Initialize(); //初始化LCD
LCD_showstring(0,0,(INT8U*)"GREENHOUSE MANA"); //输出两行提示信息
LCD_showstring(1,0,(INT8U*)"Wait... ");
Read_Temperature(); //预读温度
delay(10); //等待1秒(10*100ms)
LCD_showstring(1,0,(INT8U*)" "); //输出16个空格清除第二行
while(1)
{
if (Read_Temperature() == 1) //读取温度
{
}
if (recv_OK)
{
recv_OK = 0;
if (strcmp(recv_buff,"WIND_OPEN") == 0) //通风开
{
}
else if (strcmp(recv_buff,"WIND_CLOSE") == 0) //通风关
{
}
else if (strcmp(recv_buff,"LIGHT_OPEN") == 0) //采光开
{
}
else if (strcmp(recv_buff,"LIGHT_CLOSE") == 0) //采光关
{
}
else if (strcmp(recv_buff,"PUMP_OPEN") == 0) //水泵开
{
}
else if (strcmp(recv_buff,"PUMP_CLOSE") == 0) //水泵关
{
}
}
}
}
//------------------------------------------------------------------
// 串口接收中断程序(缓冲满时数据前移)
//------------------------------------------------------------------
void interrupt Serial_Port_Recv_ISR()
{
static INT8U i = 0; INT8U c = 0;
if(RCIE && RCIF)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -