数码管显示

 .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/

 

你可能感兴趣的:(显示)