⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 单片机c语言程序设计100例--基于PIC+PROTEUS
💻 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 + -