퇴근5분전

사용자 삽입 이미지

<< FND >>


FND는 LED를 위와같이 배열하여 하나의 디스플레이 소자로써 숫자나 영문 표시를 한다.

실제 부품 핀 번호를 위에 A~ G까지 써놓았고 여기에 Com 단자와 Dot표시 Led가 존재한다.

다만 프로그래밍에서 제외시켰음.


이 프로그래밍은 C#을 막 시작해서 5달째쯤 되어 시간이 좀 되던중에 디지탈 숫자 표시에 관련된
얘기를 듣고 마침 객체지향에 대해 막 궁금해 하던 시절에 이걸 만들었었다. 아 ~ 옛날이여~~

 내가 전자과라서 전자 부품은 거의 모두 알고 있었던 시절이었으니 부품에 대해 그리 사전조사가 필요없었고. 당시 객체 지향에 맞는 코드를 만들어보고자 위 FND를 설계후 디지탈 시계를 만들었었음.


    /// <summary>
    /// fillup: 채우다,
    /// BackColor : 바탕색,
    /// UserColor : 사용자 정의색
    /// </summary>
    enum FillUp {BacKColor,UserColor};
    enum SegmentArray {a,b,c,d,e,f,g};


//핀 번호와 Led 표시상태를 구분짓는 값이다. Led가 On, Off되면서 숫자가 표시되므로
이 값을 위처럼 구분짓는다.

        /// <summary>
        /// 모서리 옵셋값
        /// </summary>
        float angleoffsetvalue = 9f;
        public float AngleOffsetValue
        {
            get { return angleoffsetvalue;  }
            set { angleoffsetvalue = value;
            CVPointSegments.Calculat(this.Size, angleoffsetvalue, thinkness);
            }
        }

// 이것은 Led 하나의 다각형 그림을 그릴때 그 모서리를 뽀족하게 할것인지 말것인지를 결정하는 값이다.

  /// <summary>
        /// 세그먼트 두께 값.
        /// </summary>
        float thinkness = 7f;
        public float SegmentThinkness
        {
            get { return thinkness;  }
            set { thinkness = value;
            CVPointSegments.Calculat(this.Size, angleoffsetvalue, thinkness);
            }
        }

// 이것은 세그먼트 표시되는 Led표시부의 두께 값이다.

        /// <summary>
        /// 외곽선 유무 기본값 : true
        /// </summary>
        Boolean  displayouterwall = true;
        public Boolean DisplayOuterWall
        {
            get {return displayouterwall;  }
            set {displayouterwall = value; }
        }
// 이것은 표시될때 Led의 외곽선 표시임.

        /// <summary>
        /// 디스플레이~~!! 될 번호... 숫자 0~ 9 가운데...
        /// </summary>
        int displayIndex = 0;
        public int DisplayNumber
        {
            get { return displayIndex;  }
            set {
                    displayIndex = value % 10;
                }
        }
// 표시될 숫자

        /// <summary>
        /// Segment 컬러.
        /// </summary>
        Color   usercolor = Color.Red;
        public Color UserColor{
            get {return usercolor;}
            set {usercolor  = value;}
        }
// Led 색상이 되겠다.

        string[][] DisplayNumbers = new string[10][]
            {
                 new string[] {"a","b","c","d","e","f"}, // 0
                 new string[] {"b","c"}, // 1
                 new string[] {"a","b","g","d","e"}, // 2
                 new string[] {"a","b","c","d","g"}, // 3
                 new string[] {"b","c","g","f"}, // 4
                 new string[] {"a","f","g","c","d"}, // 5
                 new string[] {"a","f","g","c","d","e"}, // 6
                 new string[] {"a","b","c"}, // 7
                 new string[] {"a","b","c","d","e","f","g"}, // 8
                 new string[] {"a","b","c","d","g","f"} // 9
            };

위 표시는 숫자값에 따른 켜질 Led다!

위에만 봐도 FND의 실제 동작을 가늠할 수 있지 아니한가?

위에는 동작관련된것이고.

아래는 세그먼트 표시관련된 것.


            //                                                      |offset|
            //                  sp2******************sp3
            //         sp1******************************sp4         <== 세그먼트 1개
            //                  sp6******************sp5
            //    halfhinkness : 두께의 절반.
            //
이것이 기본 컨셉이었다!!
오~~ 그땐 그래도 머리가 잘 돌았나부다. 하하하!!

사용자 삽입 이미지

<< 외곽선 사용여부 >>


사용자 삽입 이미지

<< FND 색 변경 >>



사용자 삽입 이미지

<< AngleOffSet 값 변경 >>

실제 존재하는 부품 동작 그대로를 프로그래밍 해보았음.



 

'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글

HTML 자동 정렬 프로그램  (0) 2009.05.02
FND를 이용한 디지탈 시계  (0) 2009.05.02
데이타베이스 브라우져 ver2  (0) 2009.05.02
처음 만든 이미지 뷰어  (0) 2009.05.02
폼간 데이타 전달  (0) 2009.05.02