zoukankan      html  css  js  c++  java
  • 数码管显示

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

  • 相关阅读:
    hibernate怎么做分页
    JS+CSS带数字和左右按钮可控制切换的图片幻灯
    AOP下的权限控制实现
    Hibernate3和MyBatis(iBatis)的执行效率比较
    CKEditor/FCKEditor 使用-CKeditor 3.0.1 快速教程(含插入图片)
    用JS写CSS
    spring aop实现权限控制,路径控制
    sql server 同步复制要点
    千万别把自己当人才
    web.xml元素介绍
  • 原文地址:https://www.cnblogs.com/lscy/p/2651776.html
Copyright © 2011-2022 走看看