1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
 
#include "sn74hc595.h"
void IO_control_init(void)
{
//SDA->SER
    io_open_drain_set(SER_PIN, 0);
    io_pin_mux_set(SER_PIN,IO_FUNC0);//°ÑÔ­ÏÈio SDA±äΪÆÕͨGPIO
    gpio_pin_set_dir(SER_PIN , GPIO_DIR_OUT, 0);//¸´ÓÃÔ­ÏÈGPIOÒý½ÅΪSER
    io_pull_set(SER_PIN , IO_PULL_DOWN, IO_PULL_UP_LEVEL4);
//SRCLK
    io_pin_mux_set(SRCLK_PIN,IO_FUNC0);
    gpio_pin_set_dir(SRCLK_PIN , GPIO_DIR_OUT, 0);
    io_pull_set(SRCLK_PIN , IO_PULL_DOWN, IO_PULL_UP_LEVEL4);
//RCLK
    io_pin_mux_set(RCLK_PIN,IO_FUNC0);
    gpio_pin_set_dir(RCLK_PIN , GPIO_DIR_OUT, 0);
    io_pull_set(RCLK_PIN , IO_PULL_DOWN, IO_PULL_UP_LEVEL4);
}
uint8_t data_temp,temp_bit;
void IO_LED_control_change(uint8_t data)
{
    data_temp=data;
    uint8_t temp;
    for(int i=0; i<8; i++) {
        temp=data&1;
                temp_bit=temp;
        if(temp)//дÈëµÍλÊý¾Ý
            SER_1;
        else
            SER_0;
        SRCLK_1;//½«Êý¾Ý·ÅÈëÒÆÎ»¼Ä´æÆ÷
        SRCLK_0;
        data>>=1;
    }
    RCLK_1;//½«Êý¾Ý´æÈë´æ´¢Æ÷²¢Êä³ö
    RCLK_0;
}
//¸ßµçƽ¿ªÆôpower£¬µÍµçƽ¹Ø±Õpower
void gps_air780_power_change(uint8_t gps_state,uint8_t air_state)
{
    gps_power_state=gps_state;
    air780_power_state=air_state;
    update_led_power_state();//¸üпØÖÆÒý½Å
}
void update_led_power_state(void)
{
    uint8_t control_state=air780_power_state<<7|gps_power_state<<6|motor_power_state<<5|uwb_state<<4|gps_success_state<<3|air780_success_state<<2|red_charge_state<<1|green_charge_state;
    IO_LED_control_change(control_state);
}
void blink_led(uint8_t*state)
{   if(*state==0)
        *state=1;
    else {
        *state=0;
    }
    update_led_power_state();
    delay_us(1000);
    if(*state==0)
        *state=1;
    else {
        *state=0;
    }
    update_led_power_state();
}
 
void gps_led_on(void)
{
    gps_success_state=1;//uwbÁÁÆð
    update_led_power_state();
}
void gps_led_off(void)
{
    gps_success_state=0;//uwbÃð
    update_led_power_state();
}
void uwb_led_on(void)
{
    uwb_state=1;//uwbÁÁÆð
    update_led_power_state();
}
void uwb_led_off(void)
{
    uwb_state=0;//uwbÃð
    update_led_power_state();
}
void air780_led_on(void)
{
    air780_success_state=1;//uwbÁÁÆð
    update_led_power_state();
}
void air780_led_off(void)
{
    air780_success_state=0;//uwbÃð
    update_led_power_state();
}
void charge_red_on(void)
{
        red_charge_state=1;//³äµçºìµÆÁÁÆð
    update_led_power_state();
}
void charge_red_off(void)
{
        red_charge_state=0;//³äµçºìµÆÏ¨Ãð
    update_led_power_state();
}
void charge_green_on(void)
{
        green_charge_state=1;//³äµçÂ̵ÆÁÁÆð
    update_led_power_state();
}
void charge_green_off(void)
{
        green_charge_state=0;//³äµçÂ̵ÆÏ¨Ãð
    update_led_power_state();
}
 
void charge_state_change(void)
{
    if(gpio_pin_get_val(INPUT_5V_Pin))
    {
                if(bat_percent==100)
                {
                red_charge_state=0;
                green_charge_state=1;
                }else{
                red_charge_state=1;
                green_charge_state=0;
                }
                enbale_blink_flag=0;
                update_led_power_state();
    }else{
                if(bat_percent>15)
                {
                charge_green_off();
                charge_red_off();
                    enbale_blink_flag=0;
                }else{
//                        green_charge_state=0;
//                        if(secondtask_count%2==0)
//                        {
//                            red_charge_state=0;
//                        }else{
//                            red_charge_state=1;
//                        }
//                        update_led_power_state();
                    enbale_blink_flag=1;
                        }
            }
}