数码管显示
.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是共阳数码管,关于共阳数码管和共阴数码管:
3614A是共阴级,3641B是共阳级。共阴极数据码是为ABCDEFGH输出高电平,COM1~4输出低电平,共阳极正好相反。
更多资料,请大家查到后,共同分享。
二、数码管显示原理
数码管原理如图:
每一个8字,分为ABCDEFG7段和右下角一个点H,共8段。每一段对应于探索者上一个引脚。然后,COM1~4是对应于显示第几个数字,顺序从右往左。
看到这里,可能会比较奇怪,为什么数码管是四个数字共用一个组ABCDEFGH?嘿嘿,自己查相关资料,不作过多描述。
那么程序中应该如何控制呢?
举例说明:比如要让最后边的数字显示数字7。
1. 确定7对应哪几个引脚:A B C
2. 使COM1输出高电平 (取决于数码管共阳极)
3. 使ABC三个引脚输出低电平
4. 让COM1和ABC恢复原样,重复2,3两步。
5. 由于人眼识别有视频暂留的影响,所以当在进行步骤4时,中间停留时间应该尽可能的短。
三、演示
- 接线
与数码管对应关系:
- 引脚初始化
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抛出异常是一件相当杯具的事情,当你发生时再来找我吧。
- 数码管测试
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(); }
- 开始干活啦
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(); }
- 编译、布署,显示效果如下:
相关资源:
1.QQ群:1600838
2.博客:http://www.cnblogs.com/nnhy/
3.论坛:http://www.53wb.com/