Files

436 lines
15 KiB
C
Raw Permalink Normal View History

/*
* main.c
* <EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>ʵ<EFBFBD><EFBFBD>I2C<EFBFBD>ӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LED<EFBFBD><EFBFBD>PWM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>UART1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>LOG<EFBFBD><EFBFBD>Ϣ
* <EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>1.0
*
* <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>
* 1. I2C<EFBFBD>ӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD>ַΪ0x8A<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ7λ<EFBFBD><EFBFBD>ַ45<EFBFBD><EFBFBD>
* 2. ֧<EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* 3. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>LED<EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>0xCC<EFBFBD>رգ<EFBFBD>0xDD<EFBFBD>򿪣<EFBFBD>
* 4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>PWMռ<EFBFBD>ձȣ<EFBFBD>0x00-0x64<EFBFBD><EFBFBD>Ӧ0%-100%<EFBFBD><EFBFBD>
* 5. ͨ<EFBFBD><EFBFBD>UART1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* 6. ÿ<EFBFBD>η<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ͷ<EFBFBD>ļ<EFBFBD>
#include "xtell.h" // <20><><EFBFBD><EFBFBD>LOG<4F><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#include "uart.h" // UART1<54><31><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#include "intrins.h" // <20>ṩ_nop_()<29><><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
// <20><><EFBFBD><EFBFBD>PCA<43><41><EFBFBD>ɱ<EFBFBD><C9B1>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD>
sfr CCON = 0xd8; // PCA<43><41><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>PCAģ<41><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><D0BA>ж<EFBFBD>
sbit CF = CCON^7; // PCA<43><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>PCA<43><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>1
sbit CR = CCON^6; // PCA<43><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD><D0BF><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><31><CAB1><EFBFBD><EFBFBD>PCA<43><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
sbit CCF2 = CCON^2; // PCAģ<41><C4A3>2<EFBFBD>жϱ<D0B6>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1>1
sbit CCF1 = CCON^1; // PCAģ<41><C4A3>1<EFBFBD>жϱ<D0B6>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1>1
sbit CCF0 = CCON^0; // PCAģ<41><C4A3>0<EFBFBD>жϱ<D0B6>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1>1
sfr CMOD = 0xd9; // PCAģʽ<C4A3>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PCA<43><41>ʱ<EFBFBD><CAB1>Դ<EFBFBD>͹<EFBFBD><CDB9><EFBFBD>ģʽ
sfr CL = 0xe9; // PCA<43><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><38><CEBB><EFBFBD>洢PCA<43><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>8λֵ
sfr CH = 0xf9; // PCA<43><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><38><CEBB><EFBFBD>洢PCA<43><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>8λֵ
sfr CCAPM1 = 0xdb; // PCAģ<41><C4A3>1<EFBFBD>Ƚ<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>1<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>ģʽ
sfr CCAP1L = 0xeb; // PCAģ<41><C4A3>1<EFBFBD>Ƚ<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><38><CEBB><EFBFBD><EFBFBD><EFBFBD>ڴ洢PWMռ<4D>ձȵĵ<C8B5>
sfr CCAP1H = 0xfb; // PCAģ<41><C4A3>1<EFBFBD>Ƚ<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><38><CEBB><EFBFBD><EFBFBD><EFBFBD>ڴ洢PWMռ<4D>ձȵĸ<C8B5>
sfr PCA_PWM1 = 0xf3; // PCAģ<41><C4A3>1 PWM<57><4D><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PWM<57><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
// <20><><EFBFBD><EFBFBD>I2C<32><43><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>xdataָ<61><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չSFR<46><52>
#define I2CCFG (*(unsigned char volatile xdata *)0xfe80) // I2C<32><43><EFBFBD>üĴ<C3BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<32>Ĺ<EFBFBD><C4B9><EFBFBD>ģʽ<C4A3>Ͳ<EFBFBD><CDB2><EFBFBD>
#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81) // I2C<32><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>I2C<32><43><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
#define I2CMSST (*(unsigned char volatile xdata *)0xfe82) // I2C<32><43><EFBFBD><EFBFBD>״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָʾI2C<32><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83) // I2C<32>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>I2C<32>ӻ<EFBFBD><D3BB>IJ<EFBFBD><C4B2><EFBFBD>
#define I2CSLST (*(unsigned char volatile xdata *)0xfe84) // I2C<32>ӻ<EFBFBD>״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָʾI2C<32>ӻ<EFBFBD><D3BB><EFBFBD>״̬
#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85) // I2C<32>ӻ<EFBFBD><D3BB><EFBFBD>ַ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<32>ӻ<EFBFBD><D3BB>ĵ<EFBFBD>ַ
#define I2CTXD (*(unsigned char volatile xdata *)0xfe86) // I2C<32><43><EFBFBD>ݷ<EFBFBD><DDB7>ͼĴ<CDBC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>I2C<32><43><EFBFBD><EFBFBD>
#define I2CRXD (*(unsigned char volatile xdata *)0xfe87) // I2C<32><43><EFBFBD>ݽ<EFBFBD><DDBD>ռĴ<D5BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>I2C<32><43><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>I2C<32>¼<EFBFBD><C2BC><EFBFBD>־λ
#define I2C_EVENT_START 0x40 // START<52>¼<EFBFBD><C2BC><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⵽I2C START<52>ź<EFBFBD>ʱ<EFBFBD><CAB1>1
#define I2C_EVENT_RECV 0x20 // RECV<43>¼<EFBFBD><C2BC><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>I2C<32><43><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>1
#define I2C_EVENT_SEND 0x10 // SEND<4E>¼<EFBFBD><C2BC><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>I2C<32><43><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>1
#define I2C_EVENT_STOP 0x08 // STOP<4F>¼<EFBFBD><C2BC><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⵽I2C STOP<4F>ź<EFBFBD>ʱ<EFBFBD><CAB1>1
// <20><><EFBFBD><EFBFBD>I2C<32>ӻ<EFBFBD><D3BB><EFBFBD>ַ<EFBFBD><D6B7>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><E6B4A2>ַ
#define I2C_SLAVE_ADDR 0x5A // I2C<32>ӻ<EFBFBD><D3BB><EFBFBD>ַ,<2C><>Ӧ7λ2D
// #define I2C_SLAVE_ADDR 0x8A // I2C<32>ӻ<EFBFBD><D3BB><EFBFBD>ַ,<2C><>Ӧ7λ45
#define REG_ADDR 0x86 // Լ<><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><E6B4A2>ַ<EFBFBD><D6B7>ֻ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַΪ0x86ʱ<36>Ž<EFBFBD><C5BD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ȫ<>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned char xdata buffer[64]; // I2C<32><43><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>I2C<32><43><EFBFBD>ݣ<EFBFBD>ʹ<EFBFBD><CAB9>xdata<74><EFBFBD>Խ<EFBFBD>ʡdata<74>οռ<CEBF>
unsigned char data_len; // <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
unsigned char recv_reg_addr_global; // <20><EFBFBD><E6B4A2><EFBFBD>յ<EFBFBD><D5B5>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
bit isda; // <20><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>־<EFBFBD><D6BE>Ϊ1ʱ<31><CAB1>ʾ<EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
bit isma; // <20><EFBFBD><E6B4A2>ַ<EFBFBD><D6B7>־<EFBFBD><D6BE>Ϊ1ʱ<31><CAB1>ʾ<EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>մ洢<D5B4><E6B4A2>ַ
bit is_header_received; // ֡ͷ<D6A1><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>Ϊ1ʱ<31><CAB1>ʾ<EFBFBD>ѽ<EFBFBD><D1BD>յ<EFBFBD>֡ͷ0xAA
// <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ڴ<EFBFBD><DAB4>ں<EFBFBD>ʱ<EFBFBD><CAB1>
unsigned char xdata log_buffer[128]; // <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ洢<DAB4><E6B4A2>Ҫͨ<D2AA><CDA8>UART1<54><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
unsigned char log_idx = 0; // <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָʾ<D6B8><CABE>ǰ<EFBFBD><C7B0>־<EFBFBD><D6BE><EFBFBD>ݴ洢<DDB4><E6B4A2>λ<EFBFBD><CEBB>
unsigned char buffer_idx; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׷<EFBFBD>ٵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ݴ洢λ<E6B4A2><CEBB>
/**
* @brief <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>500ms<EFBFBD><EFBFBD>
* @details ʵ<EFBFBD><EFBFBD>Լ500ms<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>11.0592MHz<EFBFBD><EFBFBD>ϵͳʱ<EFBFBD><EFBFBD>
* @param <EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void Delay500ms(void) // @11.0592MHz
{
unsigned char data i, j, k; // <20><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
_nop_(); // ִ<><D6B4>һ<EFBFBD><D2BB><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD>ָ<EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>
_nop_(); // ִ<><D6B4>һ<EFBFBD><D2BB><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD>ָ<EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>
i = 22; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i
j = 3; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>j
k = 227; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>k
do { // <20><><EFBFBD><EFBFBD>do-whileѭ<65><D1AD>
do { // <20>в<EFBFBD>do-whileѭ<65><D1AD>
while (--k); // <20>ڲ<EFBFBD>whileѭ<65><D1AD><EFBFBD><EFBFBD>k<EFBFBD><6B>227<32>ݼ<EFBFBD><DDBC><EFBFBD>0
} while (--j); // <20>в<EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>j<EFBFBD><6A>3<EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>0
} while (--i); // <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>i<EFBFBD><69>22<32>ݼ<EFBFBD><DDBC><EFBFBD>0
}
/**
* @brief <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>30ms<EFBFBD><EFBFBD>
* @details ʵ<EFBFBD><EFBFBD>Լ30ms<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>11.0592MHz<EFBFBD><EFBFBD>ϵͳʱ<EFBFBD><EFBFBD>
* @param <EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void Delay30ms(void) // @11.0592MHz
{
unsigned char data i, j, k; // <20><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
_nop_(); // ִ<><D6B4>һ<EFBFBD><D2BB><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD>ָ<EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>
_nop_(); // ִ<><D6B4>һ<EFBFBD><D2BB><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD>ָ<EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>
i = 2; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i
j = 175; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>j
k = 220; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>k
do { // <20><><EFBFBD><EFBFBD>do-whileѭ<65><D1AD>
do { // <20>в<EFBFBD>do-whileѭ<65><D1AD>
while (--k); // <20>ڲ<EFBFBD>whileѭ<65><D1AD><EFBFBD><EFBFBD>k<EFBFBD><6B>220<32>ݼ<EFBFBD><DDBC><EFBFBD>0
} while (--j); // <20>в<EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>j<EFBFBD><6A>175<37>ݼ<EFBFBD><DDBC><EFBFBD>0
} while (--i); // <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>i<EFBFBD><69>2<EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>0
}
void Delay10us(void) //@11.0592MHz
{
unsigned char data i;
i = 35;
while (--i);
}
/**
* @brief Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @details <EFBFBD><EFBFBD><EFBFBD><EFBFBD>GPIOģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ø<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵĹ<EFBFBD><EFBFBD><EFBFBD>ģʽ
* @param <EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void HardwareInit(void)
{
// <20><><EFBFBD><EFBFBD>GPIOģʽ
// P1.0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BL_PWM<57><4D>, P1.2:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LED<45><44>, P1.1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>루TP_INT<4E><54>
// P1.3:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EN_6211<31><31>, P1.6:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EN_DISP<53><50>
P1M0 = 0x4d; // P1<50><31>ģʽ<C4A3><CABD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P1.0<EFBFBD><EFBFBD>P1.2<EFBFBD><EFBFBD>P1.3<EFBFBD><EFBFBD>P1.6Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
P1M1 = 0x02; // P1<50><31>ģʽ<C4A3><CABD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P1.1Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// P3.2:SCL, P3.3:SDA, P3.4:BL_EN(<28><><EFBFBD><EFBFBD>), P3.7:TP_SHUTDOWN(<28><><EFBFBD><EFBFBD>)
P3M0 = 0xb0; // P3<50><33>ģʽ<C4A3><CABD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P3.4<EFBFBD><EFBFBD>P3.7Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
P3M1 = 0x00; // P3<50><33>ģʽ<C4A3><CABD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>׼˫<D7BC><CBAB>
P5M0 = 0x00; // P5<50><35>ģʽ<C4A3><CABD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪĬ<CEAA><C4AC>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
P5M1 = 0x00; // P5<50><35>ģʽ<C4A3><CABD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪĬ<CEAA><C4AC>׼˫<D7BC><CBAB><EFBFBD><EFBFBD>
}
/**
* @brief PWM<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @details <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>PCAģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PWM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD>LED<EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param <EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void PWMInit()
{
CCON = 0x00; // <20><><EFBFBD><EFBFBD>PCA<43><41><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>־λ
CMOD = 0x08; // PCAʱ<41><CAB1>Ϊϵͳʱ<CDB3>ӣ<EFBFBD><D3A3><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
CL = 0x00; // <20><><EFBFBD><EFBFBD>PCA<43><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CH = 0x00; // <20><><EFBFBD><EFBFBD>PCA<43><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CCAPM1 = 0x42; // PCAģ<41><C4A3>1ΪPWM<57><4D><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʹ<EFBFBD>ܱȽ<DCB1><C8BD><EFBFBD>
PCA_PWM1 = 0x00; // PCAģ<41><C4A3>1<EFBFBD><31><EFBFBD><EFBFBD>8λPWM<57><4D><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>Ϊ256<35><36>
CCAP1L = 0x80; // PWMռ<4D>ձ<EFBFBD>Ϊ50% [(0xFF - 0x80) / 0xFF]
CCAP1H = 0x80; // <20><>CCAP1L<31><4C><EFBFBD><EFBFBD>һ<EFBFBD>£<EFBFBD>ȷ<EFBFBD><C8B7>PWMռ<4D>ձ<EFBFBD><D5B1><EFBFBD>ȷ
CR = 1; // <20><><EFBFBD><EFBFBD>PCA<43><41>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼPWM<57><4D><EFBFBD><EFBFBD>
}
/**
* @brief I2C<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @details <EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD>ӻ<EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ôӻ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
* @param <EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void I2CInit()
{
// <20><><EFBFBD><EFBFBD>I2C<32><43><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3>ΪP3.2(SCL)/P3.3(SDA)
P_SW2 = 0x30; // <20><><EFBFBD><EFBFBD>P_SW2Ϊ0x30<33><30>ѡ<EFBFBD><D1A1>SCL_4/P3.2, SDA_4/P3.3
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չRAM<41><4D><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>I2C<32><43><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD>
P_SW2 |= 0x80;
// <20><><EFBFBD><EFBFBD>I2C<32>ӻ<EFBFBD>ģʽ
I2CCFG = 0x81; // ʹ<><CAB9>I2C<32>ӻ<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SCLʱ<4C><CAB1>Ϊϵͳʱ<CDB3><CAB1>/16
I2CSLADR = I2C_SLAVE_ADDR; // <20><><EFBFBD>ôӻ<C3B4><D3BB><EFBFBD><E8B1B8>ַΪ8A
I2CSLST = 0x00; // <20><><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD>״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>־
I2CSLCR = 0x78; // ʹ<>ܴӻ<DCB4>ģʽ<C4A3>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>START<52><54>STOP<4F><50>RECV<43><56>SEND<4E>¼<EFBFBD><C2BC>ж<EFBFBD>
// <20>˳<EFBFBD><CBB3><EFBFBD>չRAM<41><4D><EFBFBD><EFBFBD>ģʽ
P_SW2 &= ~0x80;
// ȫ<><C8AB><EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9>
EA = 1;
// <20><>ʼ<EFBFBD><CABC><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
isda = 1; // <20><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>־<EFBFBD><D6BE>1<EFBFBD><31><EFBFBD><EFBFBD>ʾ<EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
isma = 1; // <20><EFBFBD><E6B4A2>ַ<EFBFBD><D6B7>־<EFBFBD><D6BE>1<EFBFBD><31><EFBFBD><EFBFBD>ʾ<EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>մ洢<D5B4><E6B4A2>ַ
is_header_received = 0; // ֡ͷ<D6A1><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>0<EFBFBD><30>δ<EFBFBD><CEB4><EFBFBD>յ<EFBFBD>֡ͷ<D6A1><CDB7>
buffer_idx = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ϊ0<CEAA><30>ָ<EFBFBD>򻺳<EFBFBD><F2BBBAB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>
data_len = 0; // <20><><EFBFBD>ݳ<EFBFBD><DDB3>ȳ<EFBFBD>ʼ<EFBFBD><CABC>Ϊ0
I2CTXD = buffer[buffer_idx]; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ͼĴ<CDBC><C4B4><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>PWMռ<EFBFBD>ձȺ<EFBFBD><EFBFBD><EFBFBD>
* @details <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>ձȣ<EFBFBD>0-100<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PWM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD>LED<EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param duty_cycle ռ<EFBFBD>ձȣ<EFBFBD><EFBFBD><EFBFBD>Χ0-100
* @return <EFBFBD><EFBFBD>
*/
void SetPWM(unsigned char duty_cycle)
{
unsigned char ccap_value; // <20><><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>CCAPֵ
unsigned char pwm_duty; // <20><><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ռ<EFBFBD>ձȰٷֱ<D9B7>
// <20><>0x00-0xFFӳ<46>䵽0-100%<25><>ռ<EFBFBD>ձ<EFBFBD>
pwm_duty = (duty_cycle * 100) / 255;
// <20><><EFBFBD><EFBFBD>CCAPֵ<50><D6B5>ccap_value = 255 - (ռ<>ձ<EFBFBD> * 255 / 100)
// <20><>ΪPCA<43><41>PWM<57><4D><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD>CCAPֵ<50><D6B5>ʼΪ<CABC>ߵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>255ʱ<35><CAB1>Ϊ<EFBFBD>͵<EFBFBD>ƽ
ccap_value = 255 - ((unsigned int)pwm_duty * 255 / 100);
// <20><><EFBFBD><EFBFBD>PWMռ<4D>ձȣ<D5B1>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>CCAP1L<31><4C>CCAP1H<31><48>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵһ<D6B5><D2BB>
CCAP1L = ccap_value;
CCAP1H = ccap_value;
}
/**
* @brief I2C<EFBFBD>жϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD>־λ+<EFBFBD><EFBFBD><EFBFBD>ַУ<EFBFBD>
* @details <EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>START<EFBFBD><EFBFBD>RECV<EFBFBD><EFBFBD>SEND<EFBFBD><EFBFBD>STOP<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>I2C<EFBFBD>ӻ<EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>
* @param <EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void I2C_Isr() interrupt 24
{
// <20><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
unsigned char i; // <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned char recv_dev_addr; // <20><><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
unsigned char recv_reg_addr; // <20><><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD>յ<EFBFBD><D5B5>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
unsigned char recv_data; // <20><><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>P_SW2<57>Ĵ<EFBFBD><C4B4><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>Ա<EFBFBD><D4B1>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ָ<EFBFBD>
_push_(P_SW2);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չRAM<41><4D><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>I2C<32><43><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD>
P_SW2 |= 0x80;
// <20><><EFBFBD><EFBFBD>START<52>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⵽I2C START<52>ź<EFBFBD>ʱִ<CAB1><D6B4>
if (I2CSLST & I2C_EVENT_START)
{
I2CSLST &= ~I2C_EVENT_START; // <20><><EFBFBD><EFBFBD>START<52>¼<EFBFBD><C2BC><EFBFBD>־
is_header_received = 0; // <20><><EFBFBD><EFBFBD>֡ͷ<D6A1><CDB7>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
// <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>
buffer_idx = 0;
data_len = 0;
// <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ȷ<EFBFBD><C8B7>ÿ<EFBFBD><C3BF>ͨ<EFBFBD>ſ<EFBFBD>ʼʱ<CABC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹɾ<C7B8><C9BE><EFBFBD>
for(i=0; i<64; i++)
{
buffer[i] = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
}
}
// <20><><EFBFBD><EFBFBD>RECV<43>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>I2C<32><43><EFBFBD><EFBFBD>ʱִ<CAB1><D6B4>
else if (I2CSLST & I2C_EVENT_RECV)
{
I2CSLST &= ~I2C_EVENT_RECV; // <20><><EFBFBD><EFBFBD>RECV<43>¼<EFBFBD><C2BC><EFBFBD>־
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
if (isda)
{
recv_dev_addr = I2CRXD; // <20><>ȡ<EFBFBD><EFBFBD><E8B1B8>ַ
buffer[buffer_idx++] = recv_dev_addr; // <20><><EFBFBD><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EBBBBA><EFBFBD><EFBFBD>
if(buffer_idx >= 63) buffer_idx = 0; // <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data_len++;
isda = 0; // <20><EFBFBD><E8B1B8>ַƥ<D6B7><C6A5><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>־
}
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>մ洢<D5B4><E6B4A2>ַ
else if (isma)
{
isma = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2>ַ<EFBFBD><D6B7>־
recv_reg_addr = I2CRXD; // <20><>ȡ<EFBFBD><EFBFBD><E6B4A2>ַ<EFBFBD><D6B7><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>
recv_reg_addr_global = recv_reg_addr; // <20><><EFBFBD>浽ȫ<E6B5BD>ֱ<EFBFBD><D6B1><EFBFBD>
// <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>buffer
buffer[buffer_idx++] = recv_reg_addr; // <20>ѼĴ<D1BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַд<D6B7><D0B4>buffer<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD>
if(buffer_idx >= 63) buffer_idx = 0; // <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data_len++;
// У<><D0A3><EFBFBD><EFBFBD><E6B4A2>ַ
if (recv_reg_addr == REG_ADDR)
{
// <20><>ַΪ0x96<39><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else if (recv_reg_addr == 0x94 || recv_reg_addr == 0x95)
{
// <20><>ַΪ0x94<39><34>0x95<39><35>ֻ<EFBFBD><D6BB>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
isda = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>־
isma = 1; // <20><><EFBFBD>ô洢<C3B4><E6B4A2>ַ<EFBFBD><D6B7>־
I2CTXD = buffer[0]; // ׼<><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
_pop_(P_SW2); // <20>ָ<EFBFBD>P_SW2<57>Ĵ<EFBFBD><C4B4><EFBFBD>ֵ
return; // ֱ<>ӷ<EFBFBD><D3B7>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
I2CTXD = buffer[0]; // ׼<><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// <20><><EFBFBD>򣬽<EFBFBD><F2A3ACBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>
else
{
recv_data = I2CRXD; // <20><>ȡ<EFBFBD><C8A1><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
buffer[buffer_idx++] = recv_data;
if(buffer_idx >= 63) buffer_idx = 0; // <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data_len++;
// ֻ<>е<EFBFBD><D0B5><EFBFBD><E6B4A2>ַΪ0x96ʱ<36>Ž<EFBFBD><C5BD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (recv_reg_addr_global == REG_ADDR)
{
// <20><><EFBFBD>ݽ<EFBFBD><DDBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PWMռ<4D>ձȣ<D5B1>0x00-0xFF<46><46>Ӧ0-100%<25><>
SetPWM(recv_data);
}
}
}
// <20><><EFBFBD><EFBFBD>SEND<4E>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>I2C<32><43><EFBFBD><EFBFBD>ʱִ<CAB1><D6B4>
else if (I2CSLST & I2C_EVENT_SEND)
{
I2CSLST &= ~I2C_EVENT_SEND; // <20><><EFBFBD><EFBFBD>SEND<4E>¼<EFBFBD><C2BC><EFBFBD>־
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>յ<EFBFBD>NAK<41><4B><EFBFBD>ӻ<EFBFBD>δȷ<CEB4>ϣ<EFBFBD>
if (I2CSLST & 0x02)
{
I2CTXD = 0xff; // <20><><EFBFBD>յ<EFBFBD>NAK<41><4B>ֹͣ<CDA3><D6B9><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>0xff
}
else
{
static unsigned char send_idx = 0;
I2CTXD = buffer[send_idx++]; // <20><><EFBFBD>յ<EFBFBD>ACK<43><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(send_idx >= data_len) send_idx = 0;
}
}
// <20><><EFBFBD><EFBFBD>STOP<4F>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⵽I2C STOP<4F>ź<EFBFBD>ʱִ<CAB1><D6B4>
else if (I2CSLST & I2C_EVENT_STOP)
{
I2CSLST &= ~I2C_EVENT_STOP; // <20><><EFBFBD><EFBFBD>STOP<4F>¼<EFBFBD><C2BC><EFBFBD>־
// <20><><EFBFBD>ø<EFBFBD><C3B8>ֱ<EFBFBD>־λ<D6BE><CEBB>Ϊ<EFBFBD><CEAA>һ<EFBFBD><D2BB>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>
isda = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>־
isma = 1; // <20><><EFBFBD>ô洢<C3B4><E6B4A2>ַ<EFBFBD><D6B7>־
is_header_received = 0; // <20><><EFBFBD><EFBFBD>֡ͷ<D6A1><CDB7>־
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ
for(i=0; i<data_len; i++)
{
log_buffer[log_idx++] = buffer[i]; // <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8>Ƶ<EFBFBD><C6B5><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(log_idx >= 127) log_idx = 0; // <20><>ֹ<EFBFBD><D6B9>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ȷ<EFBFBD><C8B7>ÿ<EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϻ󻺳<CFBA><F3BBBAB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹɾ<C7B8><C9BE><EFBFBD>
for(i=0; i<64; i++)
{
buffer[i] = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
}
buffer_idx = 0; // <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data_len = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
}
// <20>ָ<EFBFBD>P_SW2<57>Ĵ<EFBFBD><C4B4><EFBFBD>ֵ<EFBFBD><D6B5>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ״̬<D7B4><CCAC>ȷ
_pop_(P_SW2);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>forѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @details <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>
* @param <EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void main()
{
// <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>ѭ<EFBFBD><D1AD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned char i;
// Ӳ<><D3B2><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
HardwareInit(); // <20><><EFBFBD><EFBFBD>GPIOģʽ
PWMInit(); // <20><>ʼ<EFBFBD><CABC>PWMģ<4D><C4A3>
I2CInit(); // <20><>ʼ<EFBFBD><CABC>I2C<32>ӻ<EFBFBD>ģʽ
uart1_init(); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LOG<4F><47>Ϣ
SetPWM(50); // <20><>ʼ<EFBFBD><CABC>PWMռ<4D>ձ<EFBFBD>Ϊ50%
// P3.5<EFBFBD><EFBFBD>ƽ<EFBFBD>л<EFBFBD><EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD>LCD_RESET<EFBFBD><EFBFBD>
P3 |= 0x20; // <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P3.5
Delay30ms(); // <20>ӳ<EFBFBD>30ms
P3 &= ~0x20; // <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P3.5
Delay30ms(); // <20>ӳ<EFBFBD>30ms
P3 |= 0x20; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD><D9B4><EFBFBD><EFBFBD><EFBFBD>P3.5<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD><EFBFBD>ָߵ<EFBFBD>ƽ<EFBFBD><EFBFBD>
// P3.7<EFBFBD><EFBFBD>ƽ<EFBFBD>л<EFBFBD><EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD>TP_SHUTDOWN<EFBFBD><EFBFBD>
P3 |= 0x80; // <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P3.7
Delay30ms(); // <20>ӳ<EFBFBD>30ms
P3 &= ~0x80; // <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P3.7
Delay30ms(); // <20>ӳ<EFBFBD>30ms
P3 |= 0x80; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD><D9B4><EFBFBD><EFBFBD><EFBFBD>P3.7<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD><EFBFBD>ָߵ<EFBFBD>ƽ<EFBFBD><EFBFBD>
// LED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BL_EN<45>ø<EFBFBD>
P1 |= 0x04; // <20><><EFBFBD><EFBFBD>P1.2Ϊ<EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><EFBFBD>LED<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
P3 |= 0x10; // <20><><EFBFBD><EFBFBD>P3.4Ϊ<EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><EFBFBD>BL_EN<EFBFBD>ø<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ͨ<EFBFBD><CDA8>UART1<54><31><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>λ<EFBFBD><CEBB>
LOG("System initialized\r\n"); // ϵͳ<CFB5><CDB3>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ڴ<EFBFBD><DAB4>ں<EFBFBD>ʱ
while (1)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (log_idx > 0)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><69>
for (i=0; i<log_idx; i++)
{
LOG("%c", log_buffer[i]); // <20><>ӡ<EFBFBD><D3A1>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ַ<EFBFBD>
}
// LOG("\n"); // <20><>ӡ<EFBFBD><D3A1><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>־<EFBFBD><D6BE>
log_idx = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
}
Delay10us();
}
}