2026-07-17 19:43:02 +08:00
|
|
|
|
#include "system.h"
|
|
|
|
|
|
#include "rgb.h"
|
|
|
|
|
|
#include "ui.h"
|
|
|
|
|
|
#include "clock.h"
|
|
|
|
|
|
#include "../Drivers/lcd.h"
|
|
|
|
|
|
#include "../Drivers/rf.h"
|
|
|
|
|
|
#include "intrins.h"
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> main.c <20>еĵ<D0B5><C4B5><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>״̬<D7B4>ݴ<EFBFBD><DDB4><EFBFBD>־
|
|
|
|
|
|
extern volatile u8 p0_wakeup_flag; // P0 <20>˿ڰ<CBBF><DAB0><EFBFBD><EFBFBD>жϻ<D0B6><CFBB>ѱ<EFBFBD>־
|
|
|
|
|
|
extern volatile u8 p2_wakeup_flag; // P2 <20>˿ڰ<CBBF><DAB0><EFBFBD><EFBFBD>жϻ<D0B6><CFBB>ѱ<EFBFBD>־
|
|
|
|
|
|
extern volatile u8 p3_wakeup_flag; // P3 <20>˿<EFBFBD><CBBF><EFBFBD>Ƶ<EFBFBD>жϻ<D0B6><CFBB>ѱ<EFBFBD>־
|
|
|
|
|
|
extern volatile u8 rf_wakeup_flag; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>жϻ<D0B6><CFBB>ѱ<EFBFBD>־
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief ϵͳ GPIO <EFBFBD>˿ڹ<EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
void GPIO_Init(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
// EAXFR = 1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>ܼĴ<DCBC><C4B4><EFBFBD> (XSFR)
|
|
|
|
|
|
EAXFR = 1;
|
|
|
|
|
|
|
|
|
|
|
|
// 1. <20><><EFBFBD><EFBFBD> P0.1 (KEY_UP), P0.2 (KEY_CONFIRM), P0.3 (KEY_DOWN) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ˫<D7BC><CBAB><EFBFBD><EFBFBD>ģʽ (M1=0, M0=0)
|
|
|
|
|
|
P0M1 &= ~0x0E;
|
|
|
|
|
|
P0M0 &= ~0x0E;
|
|
|
|
|
|
KEY_UP = 1;
|
|
|
|
|
|
KEY_CONFIRM = 1;
|
|
|
|
|
|
KEY_DOWN = 1;
|
|
|
|
|
|
|
|
|
|
|
|
// 2. <20><><EFBFBD><EFBFBD> P1.3 (BAT_ADC) <20><><EFBFBD>ص<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ (M1=1, M0=0)
|
|
|
|
|
|
P1M1 |= (1 << 3);
|
|
|
|
|
|
P1M0 &= ~(1 << 3);
|
|
|
|
|
|
|
|
|
|
|
|
// 3. <20><><EFBFBD><EFBFBD> P5.4 (DET) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ (M1=1, M0=0)
|
|
|
|
|
|
P5M1 |= (1 << 4);
|
|
|
|
|
|
P5M0 &= ~(1 << 4);
|
|
|
|
|
|
|
|
|
|
|
|
// 4. <20><><EFBFBD><EFBFBD> P2.5 (MOTOR) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ (M1=0, M0=1)
|
|
|
|
|
|
P2M1 &= ~(1 << 5);
|
|
|
|
|
|
P2M0 |= (1 << 5);
|
|
|
|
|
|
MOTOR = 0; // Ĭ<>Ͼ<EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
// 5. <20><><EFBFBD><EFBFBD> P2.6 (KEY_SOS) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȱ<EFBFBD><C8B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ˫<D7BC><CBAB><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD> 1 (M1=0, M0=0)
|
|
|
|
|
|
P2M1 &= ~(1 << 6);
|
|
|
|
|
|
P2M0 &= ~(1 << 6);
|
|
|
|
|
|
KEY_SOS = 1;
|
|
|
|
|
|
|
|
|
|
|
|
// 6. <20><><EFBFBD><EFBFBD> P3.5 (SHUT) <20><>ƵоƬʹ<C6AC><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ (M1=0, M0=1)
|
|
|
|
|
|
P3M1 &= ~(1 << 5);
|
|
|
|
|
|
P3M0 |= (1 << 5);
|
|
|
|
|
|
SHUT = 1; // Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬ<D0BE><C6AC><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
// 7. <20><><EFBFBD><EFBFBD> P1.7 (SGM_CTRL / LEDA) Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ (M1=0, M0=1)
|
|
|
|
|
|
// PMOS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3>͵<EFBFBD>ƽ (0) <20><>ͨ<EFBFBD><CDA8><EFBFBD>⣬<EFBFBD>ߵ<EFBFBD>ƽ (1) <20><>ֹϨ<D6B9><CFA8>
|
|
|
|
|
|
P1M1 &= ~(1 << 7);
|
|
|
|
|
|
P1M0 |= (1 << 7);
|
|
|
|
|
|
SGM_CTRL = 1; // <20><>ʼ<EFBFBD><CABC>Ϊ<EFBFBD>ߵ<EFBFBD>ƽ (<28>رձ<D8B1><D5B1><EFBFBD>)<29><><EFBFBD><EFBFBD> LCD_Init <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
// 8. <20><><EFBFBD><EFBFBD> P0.1, P0.2, P0.3 <20><> P2.6 <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>裬<EFBFBD><E8A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
P0PU |= 0x0E; // <20><><EFBFBD><EFBFBD> P0.1/P0.2/P0.3 <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
P2PU |= 0x40; // <20><><EFBFBD><EFBFBD> P2.6 <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
// 9. <20><><EFBFBD><EFBFBD> P3.0 (UART1_RXD - <20><><EFBFBD><EFBFBD>) <20><> P3.1 (UART1_TXD - <20><><EFBFBD><EFBFBD>) Ϊ<><CEAA>Ӧģʽ
|
|
|
|
|
|
P3M1 &= ~((1 << 0) | (1 << 1));
|
|
|
|
|
|
P3M0 &= ~(1 << 0); // RXD <20><>Ϊ˫<D7BC><CBAB>
|
|
|
|
|
|
P3M0 |= (1 << 1); // TXD <20><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>뼶<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<EFBFBD><EFBFBD><EFBFBD><EFBFBD> CPU Ƶ<EFBFBD>ʹ<EFBFBD><EFBFBD>㻷·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|
|
|
|
|
* @param ms <EFBFBD>ӳٺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
void Delay_ms(u16 ms)
|
|
|
|
|
|
{
|
|
|
|
|
|
u16 i, j;
|
|
|
|
|
|
for (i = 0; i < ms; i++)
|
|
|
|
|
|
// 24MHz <20><><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>˫<EFBFBD><CBAB>ѭ<EFBFBD><D1AD>ʵ<EFBFBD><CAB5>Լ 1ms <20>ӳ<EFBFBD>
|
|
|
|
|
|
for (j = 12000; j > 0; j--);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD> 10 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 8051 ָ<EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>)
|
|
|
|
|
|
*/
|
|
|
|
|
|
void Delay10us(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
unsigned char data i;
|
|
|
|
|
|
_nop_();
|
|
|
|
|
|
i = 30; // ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
while (--i);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>뼶<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param us <EFBFBD>ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
void Delay_us(u16 us)
|
|
|
|
|
|
{
|
|
|
|
|
|
u16 i;
|
|
|
|
|
|
for(i = 0; i < us; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
_nop_(); _nop_(); _nop_(); _nop_();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD> Timer0 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
|
*/
|
|
|
|
|
|
u16 GetTimer0_Safe(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
u8 th, tl;
|
|
|
|
|
|
do {
|
|
|
|
|
|
th = TH0;
|
|
|
|
|
|
tl = TL0;
|
|
|
|
|
|
} while (th != TH0); // <20><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
return ((u16)th << 8) | tl;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD> UART1 (<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1) <EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
void Uart1_Init(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
SCON = 0x50; // 8λ<38><CEBB><EFBFBD><EFBFBD>, <20>ɱ䲨<C9B1><E4B2A8><EFBFBD><EFBFBD>
|
|
|
|
|
|
T2L = 0xCC; // 1Tģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 115200 <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>λ (24MHz)
|
|
|
|
|
|
T2H = 0xFF; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>λ
|
|
|
|
|
|
AUXR |= 0x14; // <20><>ʱ<EFBFBD><CAB1> 2 <20><>Ϊ 1T ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 2
|
|
|
|
|
|
AUXR |= 0x01; // <20><><EFBFBD><EFBFBD> 1 ѡ<><D1A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 2 <20><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
ES = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
void Uart_SendByte(u8 dat)
|
|
|
|
|
|
{
|
|
|
|
|
|
SBUF = dat;
|
|
|
|
|
|
while (!TI); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־<EFBFBD><D6BE>λ
|
|
|
|
|
|
TI = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>־
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ' |