数码管显示

 .NET MF系列目录: http://www.cnblogs.com/lscy/archive/2012/08/23/2651768.html

LG3641BH

一、设备介绍

    LG3641BH数码管的资不好找,在网上找到一些,跟大家分享一下。

引脚定义:

1-E

2-D

3-H

4-C

5-G

6-COM1

7-B

8-COM2

9-COM3

10-F

11-A

12-COM4

LG3641BH是共阳数码管,关于共阳数码管和共阴数码管:

clip_image002

3614A是共阴级,3641B是共阳级。共阴极数据码是为ABCDEFGH输出高电平,COM1~4输出低电平,共阳极正好相反。

更多资料,请大家查到后,共同分享。

 

二、数码管显示原理

数码管原理如图:

clip_image004

    每一个8字,分为ABCDEFG7段和右下角一个点H,共8段。每一段对应于探索者上一个引脚。然后,COM1~4是对应于显示第几个数字,顺序从右往左。

    看到这里,可能会比较奇怪,为什么数码管是四个数字共用一个组ABCDEFGH?嘿嘿,自己查相关资料,不作过多描述。

    那么程序中应该如何控制呢?

    举例说明:比如要让最后边的数字显示数字7。

1. 确定7对应哪几个引脚:A B C

2. 使COM1输出高电平 (取决于数码管共阳极)

3. 使ABC三个引脚输出低电平

4. 让COM1和ABC恢复原样,重复2,3两步。

5. 由于人眼识别有视频暂留的影响,所以当在进行步骤4时,中间停留时间应该尽可能的短。

 

三、演示

  • 接线

clip_image006

与数码管对应关系:

clip_image008

  • 引脚初始化

clip_image010

View Code
OutputPort com1 = new OutputPort((Cpu.Pin)COMS.COM1, false); com1.Dispose();
            OutputPort com2 = new OutputPort((Cpu.Pin)COMS.COM2, false); com2.Dispose();
            OutputPort com3 = new OutputPort((Cpu.Pin)COMS.COM3, false); com3.Dispose();
            OutputPort com4 = new OutputPort((Cpu.Pin)COMS.COM4, false); com4.Dispose();
            OutputPort A = new OutputPort((Cpu.Pin)DataPin.A, true); A.Dispose();
            OutputPort B = new OutputPort((Cpu.Pin)DataPin.B, true); B.Dispose();
            OutputPort C = new OutputPort((Cpu.Pin)DataPin.C, true); C.Dispose();
            OutputPort D = new OutputPort((Cpu.Pin)DataPin.D, true); D.Dispose();
            OutputPort E = new OutputPort((Cpu.Pin)DataPin.E, true); E.Dispose();
            OutputPort F = new OutputPort((Cpu.Pin)DataPin.F, true); F.Dispose();
            OutputPort G = new OutputPort((Cpu.Pin)DataPin.G, true); G.Dispose();
            OutputPort H = new OutputPort((Cpu.Pin)DataPin.H, true); H.Dispose();

 

        注意:当Port不再使用时,请记得Dispose,底层代码并未做此操作,否则会导致其它地方再为此pin实例化Port时,抛出异常。.Net MF抛出异常是一件相当杯具的事情,当你发生时再来找我吧。clip_image011

  • 数码管测试

clip_image013

View Code
            Test数码管的每段区域(COMS.COM1, true);
            Debug.Print("COM1");

            Test数码管的每段区域(COMS.COM2, true);
            Debug.Print("COM2");

            Test数码管的每段区域(COMS.COM3, true);
            Debug.Print("COM3");

            Test数码管的每段区域(COMS.COM4, true);
            Debug.Print("COM4");
View Code
        /// <summary>
        /// 测试某一个数字数码管
        /// </summary>
        /// <param name="index"></param>
        /// <param name="dot"></param>
        private static void Test数码管的每段区域(COMS index, Boolean dot)
        {
            OutputPort op = new OutputPort((Cpu.Pin)index, false);
            op.Write(true);
            Debug.Print("COM" + index.ToString());

            OutputPort A = new OutputPort((Cpu.Pin)DataPin.A, false);
            Debug.Print("A");
            A.Write(false);
            OutputPort B = new OutputPort((Cpu.Pin)DataPin.B, false);
            Debug.Print("B");
            B.Write(false);
            OutputPort C = new OutputPort((Cpu.Pin)DataPin.C, false);
            Debug.Print("C");
            C.Write(false);
            OutputPort D = new OutputPort((Cpu.Pin)DataPin.D, false);
            Debug.Print("D");
            D.Write(false);
            OutputPort E = new OutputPort((Cpu.Pin)DataPin.E, false);
            Debug.Print("E");
            E.Write(false);
            OutputPort F = new OutputPort((Cpu.Pin)DataPin.F, false);
            Debug.Print("F");
            F.Write(false);
            OutputPort G = new OutputPort((Cpu.Pin)DataPin.G, false);
            Debug.Print("G");
            G.Write(false);

            if (dot)
            {
                OutputPort dotPort = new OutputPort((Cpu.Pin)DataPin.H, false);
                dotPort.Write(false);
                Thread.Sleep(100);
                dotPort.Write(true);
                dotPort.Dispose();
            }

            Thread.Sleep(1000);

            A.Write(true);
            B.Write(true);
            C.Write(true);
            D.Write(true);
            E.Write(true);
            F.Write(true);
            G.Write(true);

            A.Dispose(); Debug.Print(" A Dispose");
            B.Dispose(); Debug.Print(" B Dispose");
            C.Dispose(); Debug.Print(" C Dispose");
            D.Dispose(); Debug.Print(" D Dispose");
            E.Dispose(); Debug.Print(" E Dispose");
            F.Dispose(); Debug.Print(" F Dispose");
            G.Dispose(); Debug.Print(" G Dispose");
            op.Write(false);
            op.Dispose();

        }

 

  • 开始干活啦

clip_image015

View Code
Debug.Print("Test is over, wait form 3 seconds, then start showing datas");

            Thread.Sleep(3000);
            while (true)
            {
                //Thread.Sleep(50);
                Show(COMS.COM1, 7, false); //显示7
                Show(COMS.COM2, 8, true); //显示8
                Show(COMS.COM3, 4, false);//显示4
                Show(COMS.COM4, 2, false);//显示2
            }
View Code
static Int32 delay = 5;
        static void Show(COMS index, Int32 value, Boolean dot)
        {
            OutputPort op = new OutputPort((Cpu.Pin)index, false);
            op.Write(true);
            //Debug.Print("COM" + index.ToString());

            OutputPort A = new OutputPort((Cpu.Pin)DataPin.A, true);
            OutputPort B = new OutputPort((Cpu.Pin)DataPin.B, true);
            OutputPort C = new OutputPort((Cpu.Pin)DataPin.C, true);
            OutputPort D = new OutputPort((Cpu.Pin)DataPin.D, true);
            OutputPort E = new OutputPort((Cpu.Pin)DataPin.E, true);
            OutputPort F = new OutputPort((Cpu.Pin)DataPin.F, true);
            OutputPort G = new OutputPort((Cpu.Pin)DataPin.G, true);
            OutputPort H = new OutputPort((Cpu.Pin)DataPin.H, true);

            switch (value)
            {
                case 0:
                    //PortShow( DataPin.A);
                    //PortShow(DataPin.B);
                    //PortShow(DataPin.C);
                    //PortShow(DataPin.D);
                    //PortShow(DataPin.E);
                    //PortShow(DataPin.F);
                    A.Write(false);
                    B.Write(false);
                    C.Write(false);
                    D.Write(false);
                    E.Write(false);
                    F.Write(false);
                    break;
                case 1:
                    //PortShow(DataPin.B);
                    //PortShow(DataPin.C);
                    B.Write(false);
                    C.Write(false);
                    break;
                case 2:
                    //PortShow(DataPin.A);
                    //PortShow(DataPin.B);
                    //PortShow(DataPin.D);
                    //PortShow(DataPin.E);
                    //PortShow(DataPin.G);
                    A.Write(false);
                    B.Write(false);
                    D.Write(false);
                    E.Write(false);
                    G.Write(false);
                    break;
                case 3:
                    //PortShow(DataPin.A);
                    //PortShow(DataPin.B);
                    //PortShow(DataPin.C);
                    //PortShow(DataPin.D);
                    //PortShow(DataPin.G);
                    A.Write(false);
                    B.Write(false);
                    C.Write(false);
                    D.Write(false);
                    G.Write(false);
                    break;
                case 4:
                    //PortShow(DataPin.B);
                    //PortShow(DataPin.C);
                    //PortShow(DataPin.F);
                    //PortShow(DataPin.G);
                    B.Write(false);
                    C.Write(false);
                    F.Write(false);
                    G.Write(false);
                    break;
                case 5:
                    //PortShow(DataPin.A);
                    //PortShow(DataPin.C);
                    //PortShow(DataPin.D);
                    //PortShow(DataPin.F);
                    //PortShow(DataPin.G);
                    A.Write(false);
                    C.Write(false);
                    D.Write(false);
                    F.Write(false);
                    G.Write(false);
                    break;
                case 6:
                    //PortShow(DataPin.A);
                    //PortShow(DataPin.C);
                    //PortShow(DataPin.D);
                    //PortShow(DataPin.E);
                    //PortShow(DataPin.F);
                    //PortShow(DataPin.G);
                    A.Write(false);
                    C.Write(false);
                    D.Write(false);
                    E.Write(false);
                    F.Write(false);
                    G.Write(false);
                    break;
                case 7:
                    //PortShow(DataPin.A);
                    //PortShow(DataPin.B);
                    //PortShow(DataPin.C);
                    A.Write(false);
                    B.Write(false);
                    C.Write(false);
                    break;
                case 8:
                    //PortShow(DataPin.A);
                    //PortShow(DataPin.B);
                    //PortShow(DataPin.C);
                    //PortShow(DataPin.D);
                    //PortShow(DataPin.E);
                    //PortShow(DataPin.F);
                    //PortShow(DataPin.G);
                    A.Write(false);
                    B.Write(false);
                    C.Write(false);
                    D.Write(false);
                    E.Write(false);
                    F.Write(false);
                    G.Write(false);
                    break;
                case 9:
                    //PortShow(DataPin.A);
                    //PortShow(DataPin.B);
                    //PortShow(DataPin.C);
                    //PortShow(DataPin.D);
                    //PortShow(DataPin.F);
                    //PortShow(DataPin.G);
                    A.Write(false);
                    B.Write(false);
                    C.Write(false);
                    D.Write(false);
                    F.Write(false);
                    G.Write(false);
                    break;
            }

            if (dot) //点显示
            {
                //PortShow(DataPin.H);
                H.Write(false);
            }

            A.Dispose();
            B.Dispose();
            C.Dispose();
            D.Dispose();
            E.Dispose();
            F.Dispose();
            G.Dispose();
            H.Dispose();

            op.Write(false);
            op.Dispose();
        }

 

  •  编译、布署,显示效果如下:

clip_image017

 

 相关资源:

1.QQ群:1600838

2.博客:http://www.cnblogs.com/nnhy/  

3.论坛:http://www.53wb.com/

 

posted @ 2012-08-23 01:05  哑吧湖大水怪  阅读(2548)  评论(4编辑  收藏  举报