0 卖盘信息
BOM询价
您现在的位置: 首页 > 电子资讯 >业界动态 > 以从0开始做4位8段共阴数码管3461AS驱动

以从0开始做4位8段共阴数码管3461AS驱动

2017-01-17
类别:业界动态
eye 920
文章创建人 拍明


1)问题产生

在上一篇“ 以PWM控制直流电机为例建一个简单的51工程框架”中已向大家介绍了一个封装好的8位8段数码管的驱动(如下图中FUNC文件夹下led8.c文件)。


 

以从0开始做4位8段共阴数码管3461AS驱动1


但是该驱动电路是要有一定的硬件基础的(如下图):如2片74HC573。而我这里只有几个4位8段共阴数码管又没有74HC573,所以就得寻求用51直接驱动的方案了!

以从0开始做4位8段共阴数码管3461AS驱动2

 


  2)失败尝试


  失败操作:直接在相应的引脚间加5伏电压来测试该数码管是否正常


  结果:烧坏了2个3461AS


  分析:被第二张图骗了,以为3461AS可以承受01电平产生的压差,而真实情况如下图:在P0口有10K的排阻,然后测量一下电压终于恍然大悟!

以从0开始做4位8段共阴数码管3461AS驱动3

3)最终方案


在第二步到第三步之间还找到一个例子:他采用3-8译码器然后串联电阻进行保护。

以从0开始做4位8段共阴数码管3461AS驱动4

 因为有3-8译码器的例子我的直驱的想法得到进一步的验证,于是综合上面的分析给出了下面的方案:

以从0开始做4位8段共阴数码管3461AS驱动5

  4)使用方法


  同样的我把关于3461AS封装起来(如下)

以从0开始做4位8段共阴数码管3461AS驱动6

在要使用该功能的文件中首先包含头文件,然后引用DuanMa数组、TempData数组以及用于显示的Display函数。

   以从0开始做4位8段共阴数码管3461AS驱动7

然后在想要显示数据前把数据存储在TempData中(TempData[0]表示要显示的第一个数字,这里把共阴8段数码管显示从0~F的值存储在DuanMa数组中。因此要让第一个数字显示2则只要TempData[0]=DuanMa[2])。当在TempData中设置好要显示的信息后就可以调用Display函数进行刷新数码管显示(Display的第一个参数表示从第几个数码管开始显示,例如FirstBit=0表示从第一个数码管开始显示num位数据)

以从0开始做4位8段共阴数码管3461AS驱动8


注:要保证Display有比较快的刷新频率


[51单片机] 以从0开始做4位8段共阴数码管3461AS驱动谈细节决定高质量DIY 

 35 4X8_Display驱动/4X8_Display/1.Opt

@@ -0,0 +1,35 @@

+### uVision2 Project, (C) Keil Software

+### Do not modify !

+

+ cExt (*.c)

+ aExt (*.s*; *.src; *.a*)

+ oExt (*.obj)

+ lExt (*.lib)

+ tExt (*.txt; *.h; *.inc)

+ pExt (*.plm)

+ CppX (*.cpp)

+ DaveTm { 0,0,0,0,0,0,0,0 }

+

+Target (Target 1), 0x0000 // Tools: 'MCS-51'

+GRPOPT 1,(Source Group 1),0,0,0

+

+OPTFFF 1,1,1,0,0,0,0,0,<.main.c><main.c> 

+OPTFFF 1,2,1,0,0,0,0,0,<.display_4X8.c><display_4X8.c> 

+

+

+TARGOPT 1, (Target 1)

+ CLK51=24000000

+  OPTTT 0,1,1,0

+  OPTHX 0,65535,0,0,0

+  OPTLX 120,65,8,<.>

+  OPTOX 16

+  OPTLT 1,1,1,0,1,1,0,1,0,0,0,0

+  OPTXL 1,1,1,1,1,1,1,0,0

+  OPTFL 0,0,1

+  OPTDL (S8051.DLL)()(DP51.DLL)(-p52)(S8051.DLL)()(TP51.DLL)(-p52)

+  OPTDBG 44029,0,()()()()()()()()()() ()()()()

+  OPTDF 0x0

+  OPTLE <>

+  OPTLC <>

+EndOpt

+

115 4X8_Display驱动/4X8_Display/1.Uv2

@@ -0,0 +1,115 @@

+### uVision2 Project, (C) Keil Software

+### Do not modify !

+

+Target (Target 1), 0x0000 // Tools: 'MCS-51'

+

+Group (Source Group 1)

+

+File 1,1,<.main.c><main.c> 0x0 

+File 1,1,<.display_4X8.c><display_4X8.c> 0x0 

+

+

+Options 1,0,0  // Target 'Target 1'

+ Device (AT89C52)

+ Vendor (Atmel)

+ Cpu (IRAM(0 - 0xFF) IROM(0 - 0x1FFF) CLOCK(24000000))

+ FlashUt ()

+ StupF ("LIBSTARTUP.A51" ("Standard 8051 Startup Code"))

+ FlashDR ()

+ Rgf (AT89X52.H)

+ Mem ()

+ C ()

+ A ()

+ RL ()

+ OH ()

+ UseEnv=0

+ EnvBin ()

+ EnvInc ()

+ EnvLib ()

+ EnvReg (Atmel)

+ OrgReg (Atmel)

+ TgStat=0

+ OutDir (.)

+ OutName (1)

+ GenApp=1

+ GenLib=0

+ GenHex=1

+ Debug=1

+ Browse=1

+ LstDir (.)

+ HexSel=0

+ MG32K=0

+ TGMORE=0

+ RunUsr 0 0 <>

+ RunUsr 1 0 <>

+ BrunUsr 0 0 <>

+ BrunUsr 1 0 <>

+ SVCSID <>

+ MODEL5=0

+ RTOS5=0

+ ROMSZ5=2

+ DHOLD5=0

+ XHOLD5=0

+ T51FL=80

+ CBANKS5=0

+ XBANKS5=0

+ RCB51 { 0,0,0,0,0,0,0,1,0 }

+ RXB51 { 0,0,0,0,0,0,0,0,0 }

+ OCM51 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }

+ OCR51 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }

+ IRO51 { 1,0,0,0,0,0,32,0,0 }

+ IRA51 { 0,0,0,0,0,0,1,0,0 }

+ XRA51 { 0,0,0,0,0,0,0,0,0 }

+ XRA512 { 0,0,0,0,0,0,0,0,0 }

+ C51FL=21630224

+ C51VA=0

+ C51MSC ()

+ C51DEF ()

+ C51UDF ()

+ INCC5 ()

+ AX51FL=4

+ AX51MSC ()

+ AX51SET ()

+ AX51RST ()

+ INCA5 ()

+ PropFld { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }

+ IncBld=1

+ AlwaysBuild=0

+ GenAsm=0

+ AsmAsm=0

+ PublicsOnly=0

+ StopCode=3

+ CustArgs ()

+ LibMods ()

+ BankNo=65535

+ LX51FL=292

+ LX51OVL ()

+ LX51MSC ()

+ LX51DWN ()

+ LX51LFI ()

+ LX51ASN ()

+ LX51RES ()

+ LX51CCL ()

+ LX51UCL ()

+ LX51CSC ()

+ LX51UCS ()

+ LX51COB ()

+ LX51XDB ()

+ LX51PDB ()

+ LX51BIB ()

+ LX51DAB ()

+ LX51IDB ()

+ LX51PRC ()

+ LX51STK ()

+ LX51COS ()

+ LX51XDS ()

+ LX51BIS ()

+ LX51DAS ()

+ LX51IDS ()

+  OPTDL (S8051.DLL)()(DP51.DLL)(-p52)(S8051.DLL)()(TP51.DLL)(-p52)

+  OPTDBG 44029,0,()()()()()()()()()() ()()()()

+ FLASH1 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }

+ FLASH2 ()

+ FLASH3 ()

+EndOpt

+

12 4X8_Display驱动/4X8_Display/1.plg

@@ -0,0 +1,12 @@

+<html>

+<body>

+<pre>

+<h1>Vision2 Build Log</h1>

+<h2>Project:</h2>

+C:UsersLiTaoDesktop514X8_Display1.uv2

+Project File Date:  04/24/2015

+

+<h2>Output:</h2>

+</pre>

+</body>

+</html>

25 4X8_Display驱动/4X8_Display/display_4X8.c

@@ -0,0 +1,25 @@

+#include"display_4X8.h"

+

+unsigned char code DuanMa[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~F

+unsigned char code WeiMa[]={0xbf,0xdf,0xef,0xf7};//分别对应相应的数码管点亮,即位码

+unsigned char TempData[4]; //存储显示值的全局变量

+

+//------------------------------------------------

+//4位8段共阴数码管显示函数

+//第一个参数为0表示从第一个数码管开始显示num个数

+//提前要显示的数要存在TempData中(TempData[0]表示要显示的第一个数)

+//------------------------------------------------

+void Display(unsigned char FirstBit,unsigned char Num)

+{

+ static unsigned char i=0;

+

+ DataPort=0x00;   //清空数据,防止有交替重影

+ DataControl=0x00;

+

+ DataPort=TempData[i]; //取显示数据,段码

+ DataControl=WeiMa[i+FirstBit];

+

+ i++;

+ if(i==Num)

+ i=0;

+} 




责任编辑:Davia

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

标签: 数码管

相关资讯