test
Dependencies: mbed BufferedSerial LS7366LIB2 FastPWM
7_segment.h@0:e12eb40b9fef, 2020-04-23 (annotated)
- Committer:
- lsh2205
- Date:
- Thu Apr 23 00:38:16 2020 +0000
- Revision:
- 0:e12eb40b9fef
test;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lsh2205 | 0:e12eb40b9fef | 1 | #ifndef _7_SEGMENT_H_ |
lsh2205 | 0:e12eb40b9fef | 2 | #define _7_SEGMENT_H_ |
lsh2205 | 0:e12eb40b9fef | 3 | |
lsh2205 | 0:e12eb40b9fef | 4 | #include "MCP23S17.h" |
lsh2205 | 0:e12eb40b9fef | 5 | |
lsh2205 | 0:e12eb40b9fef | 6 | #define SEG_DELAY_TIME (int)3 |
lsh2205 | 0:e12eb40b9fef | 7 | #define SEG_OE_PERIOD (int)1500 // 1.5 ms |
lsh2205 | 0:e12eb40b9fef | 8 | |
lsh2205 | 0:e12eb40b9fef | 9 | #define SEG_PGAIN 0 |
lsh2205 | 0:e12eb40b9fef | 10 | #define SEG_INPUT 0 |
lsh2205 | 0:e12eb40b9fef | 11 | |
lsh2205 | 0:e12eb40b9fef | 12 | |
lsh2205 | 0:e12eb40b9fef | 13 | //FastPWM OE_pin(PB_11, -1); |
lsh2205 | 0:e12eb40b9fef | 14 | //PwmOut OE_pin(PB_11); |
lsh2205 | 0:e12eb40b9fef | 15 | //DigitalOut output_enable_pin(PB_11); |
lsh2205 | 0:e12eb40b9fef | 16 | bool OE_state = false; |
lsh2205 | 0:e12eb40b9fef | 17 | |
lsh2205 | 0:e12eb40b9fef | 18 | const bool num_data[10][8] = { |
lsh2205 | 0:e12eb40b9fef | 19 | {1,0,0,0,0,0,0,1}, |
lsh2205 | 0:e12eb40b9fef | 20 | {1,1,1,1,0,0,1,1}, |
lsh2205 | 0:e12eb40b9fef | 21 | {0,1,0,0,1,0,0,1}, |
lsh2205 | 0:e12eb40b9fef | 22 | {0,1,1,0,0,0,0,1}, |
lsh2205 | 0:e12eb40b9fef | 23 | {0,0,1,1,0,0,1,1}, |
lsh2205 | 0:e12eb40b9fef | 24 | {0,0,1,0,0,1,0,1}, |
lsh2205 | 0:e12eb40b9fef | 25 | {0,0,0,0,0,1,0,1}, |
lsh2205 | 0:e12eb40b9fef | 26 | {1,0,1,1,0,0,0,1}, |
lsh2205 | 0:e12eb40b9fef | 27 | {0,0,0,0,0,0,0,1}, |
lsh2205 | 0:e12eb40b9fef | 28 | {0,0,1,1,0,0,0,1}, |
lsh2205 | 0:e12eb40b9fef | 29 | }; |
lsh2205 | 0:e12eb40b9fef | 30 | |
lsh2205 | 0:e12eb40b9fef | 31 | int Gobal_GPIOA = 0x00; |
lsh2205 | 0:e12eb40b9fef | 32 | |
lsh2205 | 0:e12eb40b9fef | 33 | void Segment_Init(); |
lsh2205 | 0:e12eb40b9fef | 34 | void Segment_PWM_Control(); |
lsh2205 | 0:e12eb40b9fef | 35 | void pgain_Latch_pin(bool logic); |
lsh2205 | 0:e12eb40b9fef | 36 | void pgain_Clock_pin(bool logic); |
lsh2205 | 0:e12eb40b9fef | 37 | void pgain_data_pin(bool logic); |
lsh2205 | 0:e12eb40b9fef | 38 | void input_Latch_pin(bool logic); |
lsh2205 | 0:e12eb40b9fef | 39 | void input_Clock_pin(bool logic); |
lsh2205 | 0:e12eb40b9fef | 40 | void input_data_pin(bool logic); |
lsh2205 | 0:e12eb40b9fef | 41 | void Pgain_segment(int num1,int num2,int num3,int delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 42 | void Input_segment(int num1,int num2,int delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 43 | |
lsh2205 | 0:e12eb40b9fef | 44 | void Segment_Init() |
lsh2205 | 0:e12eb40b9fef | 45 | { |
lsh2205 | 0:e12eb40b9fef | 46 | Pgain_segment(0, 0, 0, SEG_DELAY_TIME); |
lsh2205 | 0:e12eb40b9fef | 47 | Input_segment(0, 0, SEG_DELAY_TIME); |
lsh2205 | 0:e12eb40b9fef | 48 | //output_enable_pin = 1; |
lsh2205 | 0:e12eb40b9fef | 49 | // OE_pin.period(0.015); |
lsh2205 | 0:e12eb40b9fef | 50 | // OE_pin.write(0.5f); |
lsh2205 | 0:e12eb40b9fef | 51 | } |
lsh2205 | 0:e12eb40b9fef | 52 | /* |
lsh2205 | 0:e12eb40b9fef | 53 | void Segment_PWM_Control() |
lsh2205 | 0:e12eb40b9fef | 54 | { |
lsh2205 | 0:e12eb40b9fef | 55 | output_enable_pin = OE_state; |
lsh2205 | 0:e12eb40b9fef | 56 | OE_state = !OE_state; |
lsh2205 | 0:e12eb40b9fef | 57 | } |
lsh2205 | 0:e12eb40b9fef | 58 | */ |
lsh2205 | 0:e12eb40b9fef | 59 | void pgain_Latch_pin(bool logic) //GPA2 |
lsh2205 | 0:e12eb40b9fef | 60 | { |
lsh2205 | 0:e12eb40b9fef | 61 | if(logic) |
lsh2205 | 0:e12eb40b9fef | 62 | Gobal_GPIOA |= (1<<2);//LED를 켠다. |
lsh2205 | 0:e12eb40b9fef | 63 | else |
lsh2205 | 0:e12eb40b9fef | 64 | Gobal_GPIOA &= ~(1<<2);//LED를 끈다. |
lsh2205 | 0:e12eb40b9fef | 65 | |
lsh2205 | 0:e12eb40b9fef | 66 | MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA); |
lsh2205 | 0:e12eb40b9fef | 67 | } |
lsh2205 | 0:e12eb40b9fef | 68 | |
lsh2205 | 0:e12eb40b9fef | 69 | void pgain_Clock_pin(bool logic) //GPA3 |
lsh2205 | 0:e12eb40b9fef | 70 | { |
lsh2205 | 0:e12eb40b9fef | 71 | if(logic) |
lsh2205 | 0:e12eb40b9fef | 72 | Gobal_GPIOA |= (1<<3);//LED를 켠다. |
lsh2205 | 0:e12eb40b9fef | 73 | else |
lsh2205 | 0:e12eb40b9fef | 74 | Gobal_GPIOA &= ~(1<<3);//LED를 끈다. |
lsh2205 | 0:e12eb40b9fef | 75 | |
lsh2205 | 0:e12eb40b9fef | 76 | MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA); |
lsh2205 | 0:e12eb40b9fef | 77 | } |
lsh2205 | 0:e12eb40b9fef | 78 | |
lsh2205 | 0:e12eb40b9fef | 79 | void pgain_data_pin(bool logic) //GPA0 |
lsh2205 | 0:e12eb40b9fef | 80 | { |
lsh2205 | 0:e12eb40b9fef | 81 | if(logic) |
lsh2205 | 0:e12eb40b9fef | 82 | Gobal_GPIOA |= (1<<0);//LED를 켠다. |
lsh2205 | 0:e12eb40b9fef | 83 | else |
lsh2205 | 0:e12eb40b9fef | 84 | Gobal_GPIOA &= ~(1<<0);//LED를 끈다. |
lsh2205 | 0:e12eb40b9fef | 85 | |
lsh2205 | 0:e12eb40b9fef | 86 | MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA); |
lsh2205 | 0:e12eb40b9fef | 87 | } |
lsh2205 | 0:e12eb40b9fef | 88 | |
lsh2205 | 0:e12eb40b9fef | 89 | void input_Latch_pin(bool logic) //GPA6 |
lsh2205 | 0:e12eb40b9fef | 90 | { |
lsh2205 | 0:e12eb40b9fef | 91 | if(logic) |
lsh2205 | 0:e12eb40b9fef | 92 | Gobal_GPIOA |= (1<<6);//LED를 켠다. |
lsh2205 | 0:e12eb40b9fef | 93 | else |
lsh2205 | 0:e12eb40b9fef | 94 | Gobal_GPIOA &= ~(1<<6);//LED를 끈다. |
lsh2205 | 0:e12eb40b9fef | 95 | |
lsh2205 | 0:e12eb40b9fef | 96 | MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA); |
lsh2205 | 0:e12eb40b9fef | 97 | } |
lsh2205 | 0:e12eb40b9fef | 98 | |
lsh2205 | 0:e12eb40b9fef | 99 | void input_Clock_pin(bool logic) //GPA7 |
lsh2205 | 0:e12eb40b9fef | 100 | { |
lsh2205 | 0:e12eb40b9fef | 101 | if(logic) |
lsh2205 | 0:e12eb40b9fef | 102 | Gobal_GPIOA |= (1<<7);//LED를 켠다. |
lsh2205 | 0:e12eb40b9fef | 103 | else |
lsh2205 | 0:e12eb40b9fef | 104 | Gobal_GPIOA &= ~(1<<7);//LED를 끈다. |
lsh2205 | 0:e12eb40b9fef | 105 | |
lsh2205 | 0:e12eb40b9fef | 106 | MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA); |
lsh2205 | 0:e12eb40b9fef | 107 | } |
lsh2205 | 0:e12eb40b9fef | 108 | |
lsh2205 | 0:e12eb40b9fef | 109 | void input_data_pin(bool logic) //GPA4 |
lsh2205 | 0:e12eb40b9fef | 110 | { |
lsh2205 | 0:e12eb40b9fef | 111 | if(logic) |
lsh2205 | 0:e12eb40b9fef | 112 | Gobal_GPIOA |= (1<<4);//LED를 켠다. |
lsh2205 | 0:e12eb40b9fef | 113 | else |
lsh2205 | 0:e12eb40b9fef | 114 | Gobal_GPIOA &= ~(1<<4);//LED를 끈다. |
lsh2205 | 0:e12eb40b9fef | 115 | |
lsh2205 | 0:e12eb40b9fef | 116 | MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA); |
lsh2205 | 0:e12eb40b9fef | 117 | } |
lsh2205 | 0:e12eb40b9fef | 118 | |
lsh2205 | 0:e12eb40b9fef | 119 | void Pgain_segment(int num1,int num2,int num3,int delay_time_us) |
lsh2205 | 0:e12eb40b9fef | 120 | { |
lsh2205 | 0:e12eb40b9fef | 121 | pgain_Latch_pin(0); |
lsh2205 | 0:e12eb40b9fef | 122 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 123 | |
lsh2205 | 0:e12eb40b9fef | 124 | if(num1>9) |
lsh2205 | 0:e12eb40b9fef | 125 | num1=9; |
lsh2205 | 0:e12eb40b9fef | 126 | if(num1<0) |
lsh2205 | 0:e12eb40b9fef | 127 | num1=0; |
lsh2205 | 0:e12eb40b9fef | 128 | |
lsh2205 | 0:e12eb40b9fef | 129 | if(num2>9) |
lsh2205 | 0:e12eb40b9fef | 130 | num2=9; |
lsh2205 | 0:e12eb40b9fef | 131 | if(num2<0) |
lsh2205 | 0:e12eb40b9fef | 132 | num2=0; |
lsh2205 | 0:e12eb40b9fef | 133 | |
lsh2205 | 0:e12eb40b9fef | 134 | if(num3>9) |
lsh2205 | 0:e12eb40b9fef | 135 | num3=9; |
lsh2205 | 0:e12eb40b9fef | 136 | if(num3<0) |
lsh2205 | 0:e12eb40b9fef | 137 | num3=0; |
lsh2205 | 0:e12eb40b9fef | 138 | |
lsh2205 | 0:e12eb40b9fef | 139 | |
lsh2205 | 0:e12eb40b9fef | 140 | for(int i=0;i<8;i++) |
lsh2205 | 0:e12eb40b9fef | 141 | { |
lsh2205 | 0:e12eb40b9fef | 142 | pgain_Clock_pin(1); |
lsh2205 | 0:e12eb40b9fef | 143 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 144 | pgain_data_pin(num_data[num3][i]); |
lsh2205 | 0:e12eb40b9fef | 145 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 146 | pgain_Clock_pin(0); |
lsh2205 | 0:e12eb40b9fef | 147 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 148 | } |
lsh2205 | 0:e12eb40b9fef | 149 | for(int i=0;i<8;i++) |
lsh2205 | 0:e12eb40b9fef | 150 | { |
lsh2205 | 0:e12eb40b9fef | 151 | pgain_Clock_pin(1); |
lsh2205 | 0:e12eb40b9fef | 152 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 153 | pgain_data_pin(num_data[num2][i]); |
lsh2205 | 0:e12eb40b9fef | 154 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 155 | pgain_Clock_pin(0); |
lsh2205 | 0:e12eb40b9fef | 156 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 157 | } |
lsh2205 | 0:e12eb40b9fef | 158 | for(int i=0;i<8;i++) |
lsh2205 | 0:e12eb40b9fef | 159 | { |
lsh2205 | 0:e12eb40b9fef | 160 | pgain_Clock_pin(1); |
lsh2205 | 0:e12eb40b9fef | 161 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 162 | pgain_data_pin(num_data[num1][i]); |
lsh2205 | 0:e12eb40b9fef | 163 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 164 | pgain_Clock_pin(0); |
lsh2205 | 0:e12eb40b9fef | 165 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 166 | } |
lsh2205 | 0:e12eb40b9fef | 167 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 168 | pgain_Latch_pin(1); |
lsh2205 | 0:e12eb40b9fef | 169 | } |
lsh2205 | 0:e12eb40b9fef | 170 | |
lsh2205 | 0:e12eb40b9fef | 171 | void Input_segment(int num1,int num2,int delay_time_us) |
lsh2205 | 0:e12eb40b9fef | 172 | { |
lsh2205 | 0:e12eb40b9fef | 173 | input_Latch_pin(0); |
lsh2205 | 0:e12eb40b9fef | 174 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 175 | |
lsh2205 | 0:e12eb40b9fef | 176 | if(num1>9) |
lsh2205 | 0:e12eb40b9fef | 177 | num1=9; |
lsh2205 | 0:e12eb40b9fef | 178 | if(num1<0) |
lsh2205 | 0:e12eb40b9fef | 179 | num1=0; |
lsh2205 | 0:e12eb40b9fef | 180 | |
lsh2205 | 0:e12eb40b9fef | 181 | if(num2>9) |
lsh2205 | 0:e12eb40b9fef | 182 | num2=9; |
lsh2205 | 0:e12eb40b9fef | 183 | if(num2<0) |
lsh2205 | 0:e12eb40b9fef | 184 | num2=0; |
lsh2205 | 0:e12eb40b9fef | 185 | |
lsh2205 | 0:e12eb40b9fef | 186 | for(int i=0;i<8;i++) |
lsh2205 | 0:e12eb40b9fef | 187 | { |
lsh2205 | 0:e12eb40b9fef | 188 | input_Clock_pin(1); |
lsh2205 | 0:e12eb40b9fef | 189 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 190 | input_data_pin(num_data[num2][i]); |
lsh2205 | 0:e12eb40b9fef | 191 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 192 | input_Clock_pin(0); |
lsh2205 | 0:e12eb40b9fef | 193 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 194 | } |
lsh2205 | 0:e12eb40b9fef | 195 | for(int i=0;i<8;i++) |
lsh2205 | 0:e12eb40b9fef | 196 | { |
lsh2205 | 0:e12eb40b9fef | 197 | input_Clock_pin(1); |
lsh2205 | 0:e12eb40b9fef | 198 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 199 | input_data_pin(num_data[num1][i]); |
lsh2205 | 0:e12eb40b9fef | 200 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 201 | input_Clock_pin(0); |
lsh2205 | 0:e12eb40b9fef | 202 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 203 | } |
lsh2205 | 0:e12eb40b9fef | 204 | wait_us(delay_time_us); |
lsh2205 | 0:e12eb40b9fef | 205 | input_Latch_pin(1); |
lsh2205 | 0:e12eb40b9fef | 206 | } |
lsh2205 | 0:e12eb40b9fef | 207 | |
lsh2205 | 0:e12eb40b9fef | 208 | #endif |