#include <8052.h> #include "serial_command.h" #include "temp.h" typedef unsigned int u16; typedef unsigned char u8; u8 cmdCode = 0; u8 lightCmdCode = 0x0; u8 tempCmdCode = 0x0; u8 newCmdFlag = 0; u16 tim0countAll = 2000; u16 tim0count = 0; u8 tim0flag = 0; char g_mode = 0x01; char g_bodyMode = 0x00; #define person = P1_0; char g_gasMode = 0x00; #define gasState = P1_1; char FAS_LIGHT_BLINK = 0x50; #define beep = P1_5; u8 m_flag = 0; // LcdDisplay #define LSA P2_2 #define LSB P2_3 #define LSC P2_4 u8 DisplayData[8]; // u8 DisplayData[8] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07}; u8 LcdSegment[10] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F }; #define CLASS_3 #define CLASS_4 void delay(u16 i) { while (i--); } void Uart1Send(u16 sendData) { TI = 0; SBUF = (char) (sendData >> 8); while (TI == 0) { } TI = 0; SBUF = (char) (sendData & 0xFF); while (TI == 0) { } TI = 0; delay(50); } void UsartInit(void) { SCON = 0x50; TMOD = 0x22; PCON = 0x80; TH1 = 0xF4; TL1 = 0xF4; ES = 1; EA = 1; TR1 = 1; PS = 1; } void Usart(void) __interrupt(4) { cmdCode = SBUF; newCmdFlag = 1; RI = 0; } void ProcessCommand(void) { if (newCmdFlag) { #ifdef CLASS_3 u16 recvData; recvData = (cmdCode << 8) + cmdCode; Uart1Send(recvData); #endif newCmdFlag = 0; switch (cmdCode) { case CTRL_CODE_CYCLE_500ms: tim0countAll = 2000; break; case CTRL_CODE_CYCLE_1s: tim0countAll = 4000; break; case CTRL_CODE_CYCLE_2s: tim0countAll = 8000; break; case CTRL_CODE_CYCLE_5s: tim0countAll = 20000; break; case CTRL_CODE_TEMP_Enable: case CTRL_CODE_TEMP_Disable: tempCmdCode = cmdCode; break; case CTRL_CODE_BODY_Disable: case CTRL_CODE_BODY_Buzzer: case CTRL_CODE_BODY_Light: g_bodyMode = cmdCode; break; case CTRL_CODE_SYSMODE_Disable: case CTRL_CODE_SYSMODE_Telemetry: case CTRL_CODE_SYSMODE_Security: g_mode = cmdCode; break; case CTRL_CODE_GAS_Disable: case CTRL_CODE_GAS_State: case CTRL_CODE_GAS_Data: g_gasMode = cmdCode; break; default: break; } } } void LcdDisplay(void) { u8 i; for (i = 0; i < 6; i++) { switch (i) { case 0: LSA = 0; LSB = 0; LSC = 0; break; case 1: LSA = 1; LSB = 0; LSC = 0; break; case 2: LSA = 0; LSB = 1; LSC = 0; break; case 3: LSA = 1; LSB = 1; LSC = 0; break; case 4: LSA = 0; LSB = 0; LSC = 1; break; case 5: LSA = 1; LSB = 0; LSC = 1; break; } P0 = DisplayData[5 - i]; delay(100); P0 = 0x00; } } void TempProc(int temp) { float tp; u8 i = 0; if (temp < 0) { DisplayData[0] = 0x40; temp = temp - 1; temp = ~temp; tp = temp; temp = tp * 0.0625 * 100 + 0.5; } else { DisplayData[0] = 0x00; tp = temp; temp = tp * 0.0625 * 100 + 0.5; } DisplayData[1] = LcdSegment[temp / 10000]; DisplayData[2] = LcdSegment[temp % 10000 / 1000]; DisplayData[3] = LcdSegment[temp % 1000 / 100] | 0x80; DisplayData[4] = LcdSegment[temp % 100 / 10]; DisplayData[5] = LcdSegment[temp % 10]; } void ProcessTempCmd(void) { u16 t_send = 0, tc = 0, td = 0; int temp; #ifdef CLASS_4 tempCmdCode = CTRL_CODE_TEMP_Enable; #endif if (tempCmdCode == CTRL_CODE_TEMP_Enable) { EA = 0; temp = Ds18b20ReadTemp(); EA = 1; tc = MCU_CMD_TEMP << 12; td = (u16) temp & 0xFFF; //t_send = td + tc; t_send = temp; Uart1Send(t_send); TempProc(temp); } } int ProcessBodyCmd(void) { return 0; } void ProcessLightCmd(void) { } int ProcessGasCmd(void) { return 0; } void main(void) { int gasFlag, bodyFlag; UsartInit(); while (1) { ProcessCommand(); #ifdef CLASS_4 ProcessTempCmd(); LcdDisplay(); #endif if (tim0flag) { tim0flag = 0; if (g_mode == CTRL_CODE_SYSMODE_Security) { bodyFlag = ProcessBodyCmd(); } if ((g_mode == CTRL_CODE_SYSMODE_Security) || (g_mode == CTRL_CODE_SYSMODE_Telemetry)) { gasFlag = ProcessGasCmd(); } ProcessLightCmd(); if (tempCmdCode != CTRL_CODE_TEMP_Disable) { ProcessTempCmd(); } } } }