test4

Dependencies:   mbed BufferedSerial LS7366LIB2 FastPWM

Revision:
0:7cff999a7f5c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/7_segment.h	Mon May 11 08:47:18 2020 +0000
@@ -0,0 +1,372 @@
+#ifndef _7_SEGMENT_H_
+#define _7_SEGMENT_H_
+
+#include "MCP23S17.h"
+
+#define SEG_DELAY_TIME  (int)3
+#define SEG_OE_PERIOD   (int)1500 // 1.5 ms
+
+#define SEG_PGAIN 0
+#define SEG_INPUT 0
+
+
+//FastPWM OE_pin(PB_11, -1);
+//PwmOut OE_pin(PB_11);
+//DigitalOut output_enable_pin(PB_11);
+bool OE_state = false;
+
+uint8_t menual_step = 0;
+uint32_t menual_delay = 0;
+
+const bool num_data[10][8] =    {
+                                    {1,0,0,0,0,0,0,1},
+                                    {1,1,1,1,0,0,1,1},
+                                    {0,1,0,0,1,0,0,1},
+                                    {0,1,1,0,0,0,0,1},
+                                    {0,0,1,1,0,0,1,1},
+                                    {0,0,1,0,0,1,0,1},
+                                    {0,0,0,0,0,1,0,1},
+                                    {1,0,1,1,0,0,0,1},
+                                    {0,0,0,0,0,0,0,1},
+                                    {0,0,1,1,0,0,0,1},
+                                };
+                                
+const bool menual_data[70][8] =    {                                
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 0, 0, 0, 1, 1, 0, 1}, 
+                                            {1, 1, 1, 0, 0, 1, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                                                            
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 0, 0, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 1, 0, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                                                            
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 0, 0, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 1, 0, 0, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                                                            
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 0, 0, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 0, 0, 0, 1},
+                                            {1, 1, 1, 1, 1, 1, 0, 1},
+                                                                            
+                                            {1, 1, 1, 1, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 0, 0, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 0, 0, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                                                            
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 1, 1, 1, 0, 1},
+                                            {1, 0, 0, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 0, 0, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                                                            
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 0, 0, 1, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 0, 0, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                                                            
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 0, 1, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 0, 0, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                                                            
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 1, 0, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 0, 0, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                                                            
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 0, 0, 0, 1, 1, 1, 1},
+                                            {1, 1, 1, 0, 0, 0, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                                                            
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 1, 1},
+                                            {1, 0, 0, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 0, 0, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                                                            
+                                            {1, 1, 1, 0, 1, 1, 1, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 0, 0, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 0, 0, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                                                            
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 0, 0, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 0, 0, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 1, 1},
+                                                                            
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                            {1, 0, 0, 0, 1, 1, 0, 1},
+                                            {1, 1, 1, 0, 0, 0, 1, 1},
+                                            {1, 1, 1, 0, 1, 1, 0, 1},
+                                         };
+                                
+int Gobal_GPIOA = 0x00;
+
+void Segment_Init();
+void Segment_PWM_Control();
+void pgain_Latch_pin(bool logic);
+void pgain_Clock_pin(bool logic);
+void pgain_data_pin(bool logic);
+void input_Latch_pin(bool logic);
+void input_Clock_pin(bool logic);
+void input_data_pin(bool logic);
+void Pgain_segment(int num1,int num2,int num3,int delay_time_us);
+void Input_segment(int num1,int num2,int delay_time_us);
+
+void Menual_Segment();
+
+void Segment_Init()
+{
+    Pgain_segment(0, 0, 0, SEG_DELAY_TIME);
+    Input_segment(0, 0, SEG_DELAY_TIME);
+    //output_enable_pin = 1;
+//    OE_pin.period(0.015);
+//    OE_pin.write(0.5f);
+}
+/*
+void Segment_PWM_Control()
+{
+    output_enable_pin = OE_state;
+    OE_state = !OE_state;
+}
+*/
+void pgain_Latch_pin(bool logic) //GPA2
+{
+    if(logic)
+        Gobal_GPIOA |= (1<<2);//LED를 켠다.
+    else
+        Gobal_GPIOA &= ~(1<<2);//LED를 끈다.
+        
+    MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA);
+}
+
+void pgain_Clock_pin(bool logic) //GPA3
+{
+    if(logic)
+        Gobal_GPIOA |= (1<<3);//LED를 켠다.
+    else
+        Gobal_GPIOA &= ~(1<<3);//LED를 끈다.
+        
+    MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA);
+}
+
+void pgain_data_pin(bool logic) //GPA0
+{
+    if(logic)
+        Gobal_GPIOA |= (1<<0);//LED를 켠다.
+    else
+        Gobal_GPIOA &= ~(1<<0);//LED를 끈다.
+        
+    MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA);
+}
+
+void input_Latch_pin(bool logic) //GPA6
+{
+    if(logic)
+        Gobal_GPIOA |= (1<<6);//LED를 켠다.
+    else
+        Gobal_GPIOA &= ~(1<<6);//LED를 끈다.
+        
+    MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA);
+}
+
+void input_Clock_pin(bool logic) //GPA7
+{
+    if(logic)
+        Gobal_GPIOA |= (1<<7);//LED를 켠다.
+    else
+        Gobal_GPIOA &= ~(1<<7);//LED를 끈다.
+        
+    MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA);
+}
+
+void input_data_pin(bool logic) //GPA4
+{
+    if(logic)
+        Gobal_GPIOA |= (1<<4);//LED를 켠다.
+    else
+        Gobal_GPIOA &= ~(1<<4);//LED를 끈다.
+        
+    MCP_Write(MCP_SEG_CS, MCP_GPIOA, Gobal_GPIOA);
+}
+
+void Pgain_segment(int num1,int num2,int num3,int delay_time_us)
+{
+    pgain_Latch_pin(0);
+    wait_us(delay_time_us);
+    
+    if(num1>9)
+        num1=9;
+    if(num1<0)
+        num1=0;
+        
+    if(num2>9)
+        num2=9;
+    if(num2<0)
+        num2=0;
+        
+    if(num3>9)
+        num3=9;
+    if(num3<0)
+        num3=0;
+        
+        
+    for(int i=0;i<8;i++)
+            {
+                pgain_Clock_pin(1);
+                wait_us(delay_time_us);
+                pgain_data_pin(num_data[num3][i]);
+                wait_us(delay_time_us);
+                pgain_Clock_pin(0);
+                wait_us(delay_time_us);
+            }
+    for(int i=0;i<8;i++)
+            {
+                pgain_Clock_pin(1);
+                wait_us(delay_time_us);
+                pgain_data_pin(num_data[num2][i]);
+                wait_us(delay_time_us);
+                pgain_Clock_pin(0);
+                wait_us(delay_time_us);
+            }
+    for(int i=0;i<8;i++)
+            {
+                pgain_Clock_pin(1);
+                wait_us(delay_time_us);
+                pgain_data_pin(num_data[num1][i]);
+                wait_us(delay_time_us);
+                pgain_Clock_pin(0);
+                wait_us(delay_time_us);
+            }
+    wait_us(delay_time_us);
+    pgain_Latch_pin(1);
+}
+
+void Input_segment(int num1,int num2,int delay_time_us)
+{
+    input_Latch_pin(0);
+    wait_us(delay_time_us);
+    
+    if(num1>9)
+        num1=9;
+    if(num1<0)
+        num1=0;
+        
+    if(num2>9)
+        num2=9;
+    if(num2<0)
+        num2=0;
+        
+    for(int i=0;i<8;i++)
+            {
+                input_Clock_pin(1);
+                wait_us(delay_time_us);
+                input_data_pin(num_data[num2][i]);
+                wait_us(delay_time_us);
+                input_Clock_pin(0);
+                wait_us(delay_time_us);
+            }
+    for(int i=0;i<8;i++)
+            {
+                input_Clock_pin(1);
+                wait_us(delay_time_us);
+                input_data_pin(num_data[num1][i]);
+                wait_us(delay_time_us);
+                input_Clock_pin(0);
+                wait_us(delay_time_us);
+            }
+    wait_us(delay_time_us);
+    input_Latch_pin(1);
+}
+
+void Menual_Segment()
+{
+    menual_delay++;
+    
+    if(menual_delay > 333)
+    {
+        pgain_Latch_pin(0);
+        wait_us(SEG_DELAY_TIME);
+            
+        for(int i=0;i<8;i++)
+                {
+                    pgain_Clock_pin(1);
+                    wait_us(SEG_DELAY_TIME);
+                    pgain_data_pin(menual_data[menual_step][i]);
+                    wait_us(SEG_DELAY_TIME);
+                    pgain_Clock_pin(0);
+                    wait_us(SEG_DELAY_TIME);
+                }
+        for(int i=0;i<8;i++)
+                {
+                    pgain_Clock_pin(1);
+                    wait_us(SEG_DELAY_TIME);
+                    pgain_data_pin(menual_data[menual_step + 1][i]);
+                    wait_us(SEG_DELAY_TIME);
+                    pgain_Clock_pin(0);
+                    wait_us(SEG_DELAY_TIME);
+                }
+        for(int i=0;i<8;i++)
+                {
+                    pgain_Clock_pin(1);
+                    wait_us(SEG_DELAY_TIME);
+                    pgain_data_pin(menual_data[menual_step + 2][i]);
+                    wait_us(SEG_DELAY_TIME);
+                    pgain_Clock_pin(0);
+                    wait_us(SEG_DELAY_TIME);
+                }
+        wait_us(SEG_DELAY_TIME);
+        pgain_Latch_pin(1);
+        
+        
+        input_Latch_pin(0);
+        wait_us(SEG_DELAY_TIME);
+        
+        for(int i=0;i<8;i++)
+                {
+                    input_Clock_pin(1);
+                    wait_us(SEG_DELAY_TIME);                
+                    input_data_pin(menual_data[menual_step + 3][i]);
+                    wait_us(SEG_DELAY_TIME);
+                    input_Clock_pin(0);
+                    wait_us(SEG_DELAY_TIME);
+                }
+                    
+        for(int i=0;i<8;i++)
+                {
+                    input_Clock_pin(1);
+                    wait_us(SEG_DELAY_TIME);                
+                    input_data_pin(menual_data[menual_step + 4][i]);
+                    wait_us(SEG_DELAY_TIME);
+                    input_Clock_pin(0);
+                    wait_us(SEG_DELAY_TIME);
+                }
+                
+        wait_us(SEG_DELAY_TIME);
+        input_Latch_pin(1);
+        
+        menual_step += 5;
+        
+        if(menual_step > 65) menual_step = 0;
+        menual_delay = 0;
+    }
+}
+
+#endif