为什么四个共阴数码管管输出的数字是一样的,都是1?

需要确认注册邮箱后才能开通博客,
>>>单个数码管显示1到9
4年会员勋章目前未领取。领取条件:&凡是注册时间四年以上的活跃用户即可领取该勋章。
lu18887的博客&&lu18887's Blog
博主:&&&&
文章(6)&&&&
访问(12477)&&&&
评论(9)&&&&
投票(1)&&&&
订阅本博&&
博文列表查看方式:
需要确认注册邮箱后才能下载,
& 转自我的博客: 数码管,其实就是8个发光二极管按顺序排列而成的,所以让数码管显示特定的数字,只需要将该亮的二极管点亮,不该亮的灭了就好了。为了达到这个目的,就得参考电路图了,51HEI开发板的电路图在我的相册里有,但是整张贴出来就太大了,所以这里只显示部分。电路图如下:乍一看这张图比较明显的就是最左边的单片机和两个锁存器U1和U2的引脚信息了,从D00到D07,两个锁存器是共用的,D00对应输出Y1和X1,D07对应输出Y8和X8。锁存器,从它的名字大概就可以知道它的用途了!其作用就是有的引脚输入改变的时候输出保持之前的状态,达到锁和存的效果(我目前的理解是这样的,不理解的可以上网搜官方解释)。查查74HC573是怎么用的,表格如下:图中引脚1代表输出使能,11引脚代表锁存使能。锁存器嘛,打开锁存,让输出使能引脚处于低电平,锁存使能引脚输入高电平,传入对应的D,然后再使锁存使能引脚处于低电平,这样就能让输出保持不变。使用的过程就是打开锁,传数据,关锁保持。说完了锁存器,回到第一张电路图,途中的锁存器1号引脚都接地,自然是低电平,11号引脚分别对应单片机的D26和D27,所以控制U1和U2就靠这2个引脚啦!按道理说,8个数码管,应该有8*8=64根线才对啊,而第一张图中只有24个引脚,里面肯定有复用的引脚,所以不知道内部电路是没办法写滴,还好51HEI给的资料比较全。2个LED管的内部电路如下:& & & & &ABCDEFG &DP总共8个二极管,分别由11、7、4、2、1、10、5、3引脚控制,而1这8个引脚对应第一个图中的Y1到Y8,12、9、8、6呢则有两组,一组是共阴极的数码管,一组是共阳极的数码管。12、9、8、6呢则对应X1到X8,有2个,一组是X1到X4,一组是X4到X8,X1到X4是共阴极的,X5到X8是共阳极的。本实验只让共阴极的DIG1那个数码管显示数据,把别的都关掉。那只要12(X1)引脚输入低电平,986输入高电平,其他的都不会亮了,让DIG1显示什么数字,就由Y1到Y7来决定了。经计算,让DIG1显示0到9还有小数点的表格如下:& uint8
table[11]={ 0x3f, 0x30, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x80
};&那么有了这个表格,只要一秒钟让P0换一个表格中的数值,就可以动态更新数码管的数值啦!那怎样才能1秒换一次呢,有两种方法,一种是些代码,让单片机执行一些操作,直到一秒钟过去,就更新P0,这种方法呢缺点是需要计算,要计算每个操作的指令周期和操作的执行总次数,假设有i种操作(i=1,2…n),对应的指令周期Ti,这个操作执行的总次数Si,那么总的时间间隔的计算公式是:单位是秒。各种操作的指令周期在数据手册上都可以查的到。不过一般的也没上面的公式那么复杂,一般都是一个循环,里面进行自增或者自减 操作。& & & & 第二种方法呢就是用单片机内部的定时器,STC89C52内部有3个定时器,这里只用到一个,先看看定时器SFR的结构。图片如下:& & & 要用到4个寄存器,TCON,和TMOD,TH0,TL0。TCON的各个位包含了计时器T0和T1的开关和计时,尾数带1的表示和T1相关,尾数带0的表示和T0相关,TF位表示溢出位,就是计时器达到最大值,TF位就为1,TF位为1之后要么软件手动清零,或者时间中断自动硬件清零;TR呢表示计时器的运行控制,TR位置1则计时器运行,置0则停止运行。 & & & 第二个寄存器TMOD,这个寄存器的值不能单位操作,主要功能是设置计时器的工作模式,T1和T0分别代表单片机两个计数器GATE:该位被置位时为门控位。仅当TR1被置位并且INT1脚为高,定时器开始计数。当该位被清零时,只要TR1被置位,定时器1马上开始计数。C/T:该位为0的时候,用作定时器,该位为1的时候,用做计数器。00 & & & &01 & & & 10 & & & & &11模式0 模式1 模式2 模式3模式1:16位的计数器。(TH0,TL0)模式2:自动装载8位计数器。主要应用在串口波特率发生器。模式0&模式3:几乎不用。TCON和TMOD复位后都会自动变成0×00.TH0和TL0呢分别代表计数器的高8位和低8位,加起来刚好16位,可以最大值是0~65535,总共65536个数,当TH0和TL0组成16位数等于65535时TF0就会被置1,也就是溢出,这种方法的计时公式是:12*X/晶振频率=y; & &X=65536- & &y代表计时器溢出一次的时间,z表示设置TH0和TL0组成的16位数的值,而X则代表从z到65536总共有多少个数,一般的晶振频率有:6MHz,11.059MHz,12MHz,20MHz, & & & &令X取极值,将上述晶振频率代入式中,得出从计时开始到溢出最多能记录的时间分别为130ms,71.1ms,65.5ms,39.3ms,明显这些时间都比较短(相对1s),而且不规则,1s=1000ms=20*50ms=1000*1ms=40*25ms这种整数我们比较容易接受,也更容易计算,所以应该令y为50等整数,然后再去计算出z的值,让TH0为z的高八位,TL0为z的第八位。假设晶振频率是12MHz,让y=50ms,计算得出z=CB0,则将TH0设为0x3C,TL0设为0xB0,TR0设为1,TMOD设为0×01,则到了50ms之后TF0就会变为1,通过判断TF0溢出知道过了50ms,判断完了之后要软件(也就是代码)对TF0清零,溢出之后TH0和TL0都会被清零,所以再将TH0和TL0设成0x3C和0xB0,每次溢出都记录一次,记录二十次之后就是过了1秒啦!1秒的定时就是这么来!额,估计被我绕晕了吧·····这个表达可能是有点问题,想看原版的,去看金沙滩工作室的视频吧,我也是从那学的。计时器的使用步骤总结如下:一、设置TMOD二、 & & 设置TH0和TL1(事先计算好值。)三、设置TR0最终代码如下:#include &reg52.h&typedef unsigned char uint8;
typedef unsigned int
D24 = P2^4;
D25 = P2^5;
U1 = P2^6;
//U1锁存器的开关
U2 = P2^7;
//U2锁存器的开关
table[11]={ 0x3f, 0x30, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x80
void main(void)
uint8 counter = 0;
uint8 offset = 0;
TH0 = 0x3C;
TL0 = 0xB0;
TMOD = 0x01;
//计时模式选01模式
P0 = 0xfe;
P0 = 0xff;
//关闭8X8点阵LED
if(TF0==1)
//每次计时是50ms,达到50ms后计时器0的溢出位位1,进行软件清零和计时器初始化.
counter++;
TH0 = 0x3C;
//12MHZ的晶振算出来是从15536开始计时,十六进制就是 0x3CB0
TL0 = 0xB0;
//高位取0x3C,低位取0xB0
if(counter==20)
//20*50ms=1000ms=1s
counter=0;
P0 = table[offset++];
if(offset==11)
offset = 0;
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
&&&&&&有[ 0 ]名读者喜欢此文
阅读(2976)&&
评论是对思考最好的总结…
你还可以输入1000字
转发到我的博客
评论&&的“单个数码管显示1到9”
转自我的博客:javascript:void(0);/*1*/数码管,其实就是8个发光二极管按顺序排列而成的,所以让数码管显示特定的数字,只需要将该亮的二极管点亮,不该亮的灭了就好了。为了达到这个目的,就得参考电路图了,51HEI开发板的电路图在我的相册里有,但是整张贴出来就...
你还可以输入30000字
同时评论给&lu18887
zcz2004&&20:38 03-06
wlianmin&&08:35 09-22
lu18887&&23:51 09-08
ytfdhb&&13:14 09-08
akuei2&&12:54 09-08
成员4860名创建者:
-- Use of this website is subject to its terms of use.
京ICP备号-4 |
京公网安备37 |
新版社区已上线,旧版论坛、博客将停用
1、为防数据丢失,旧版论坛、博客不再接受发帖;
2、老用户只需重设密码,即可直接登录新平台;
3、新版博客将于8月底完美归来,敬请期待;
4、全新论坛、问答,体验升级、手机阅读更方便。第3章 数码管显示输出_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
第3章 数码管显示输出
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩8页未读,继续阅读
你可能喜欢查看: 29777|回复: 29
注册时间最后登录阅读权限150积分4767精华2帖子
好久没写教程了,在网上找到一个好用的数码管的驱动库,这样就能比较轻松惬意的玩数码管了,所以将数码管翻出来玩一玩,简单介绍数码管的库,和在里学会的一个新函数
首先介绍下库文件,需要解压缩后放到arduinoIDE目录的libraries内,然后重启arduinoIDE就能加载这个库了
库作者的发布页面:
(147.21 KB, 下载次数: 1316)
16:49 上传
点击文件名下载附件
简单介绍一下,这个库,可以驱动四位数码管,支持显示数字与小数点,使用简单方便。具体请自己参悟研究
我们用这个库驱动我们的一位共阳数码管电路图如下:
15:31 上传
arduino 教程
连线很简单,所以我们来插接出电路,以下就是我接的电路照片
15:31 上传
arduino 教程
然后我写了一个小程序,主要用到了函数将A0口的0-1023数值映射到数码管的0-9这十个数字上,起到的效果就是我转动电位器,数码管显示对应位置的数字。
/*&&&作者:极客工坊-迷你强&时间:日&IDE版本号:1.0.1&发布地址:www.&作用:arduino驱动数码管使用电位器旋转调整数值&&&7段数码管具体表现方法如下&& &&&&& && && & A&& && && &____&& && &&&|& & |&& &&&F&&|____|&&B&& && &&&| G&&|&& &&&E&&|____|&&C && && && && && &o DP&& && && & D&& && && & && &&&引脚分布情况是这样滴&& &&&&& &&&10 9 8 7 6 && && &________&& &&&|& &__& &|&& &&&|&&|__|&&|&& &&&|&&|__|o |&& &&&|________| && &&&&& &&&1 2 3 4 5&&&& &&&&& &&&* 怎么接到arduino上呢?&& &&&* 首先看3和8这两个管脚,一般是共级,套件是共阳数码管,所以这两个是+极,两个引脚其实是接在一起的,所以我们使用其中一个即可&& &&&* 1 (E) 接到arduino的 10号引脚&& &&&* 2 (D) 接到arduino的 9号引脚&& &&&* 3 因为我们只使用1位数码管,所以请将本引脚或者8号引脚的任意一个接到arduino的5号数字口即可&& &&&* 4 (C) 接到arduino的 8号引脚&& &&&* 5 (DP) 接到arduino的13号引脚&& &&&* 6 (B) 接到arduino的7号引脚&& &&&* 7 (A) 接到arduino的6号引脚&& &&&* 8 因为我们只使用1位数码管,所以请将本引脚或者3号引脚的任意一个接到arduino的5号数字口即可&& &&&* 9 (F) 接到arduino的11号引脚&& &&&* 10 (G) 接到arduino的12号引脚&& &&&*/&#include &SevSeg.h&SevSvoid setup() {//定义需要使用的引脚&&sevseg.Begin(1,2,3,4,5,6,7,8,9,10,11,12,13);&}&void loop() {&&//激活输出功能&&sevseg.PrintOutput(); int val = analogRead(A0); val = map(val,0,1023,0,9);& & //使用map函数来做数值映射&& & sevseg.NewNum(val, 4);& &&&//数码管函数输出数字,其中数值为小数点所在位置,我放在第四格所以效果就是不显示小数点&&}
&作者:极客工坊-迷你强
&IDE版本号:1.0.1
&发布地址:www.
&作用:arduino驱动数码管使用电位器旋转调整数值
7段数码管具体表现方法如下
&& && && & A
&& && && &____
&& && &&&|& & |
&& &&&F&&|____|&&B
&& && &&&| G&&|
&& &&&E&&|____|&&C
&& && && && && &o DP
&& && && & D
&& && && &
&& &&&引脚分布情况是这样滴
&& &&&10 9 8 7 6
&& && &________
&& &&&|& &__& &|
&& &&&|&&|__|&&|
&& &&&|&&|__|o |
&& &&&|________|
&& &&&1 2 3 4 5&&
&& &&&* 怎么接到arduino上呢?
&& &&&* 首先看3和8这两个管脚,一般是共级,套件是共阳数码管,所以这两个是+极,两个引脚其实是接在一起的,所以我们使用其中一个即可
&& &&&* 1 (E) 接到arduino的 10号引脚
&& &&&* 2 (D) 接到arduino的 9号引脚
&& &&&* 3 因为我们只使用1位数码管,所以请将本引脚或者8号引脚的任意一个接到arduino的5号数字口即可
&& &&&* 4 (C) 接到arduino的 8号引脚
&& &&&* 5 (DP) 接到arduino的13号引脚
&& &&&* 6 (B) 接到arduino的7号引脚
&& &&&* 7 (A) 接到arduino的6号引脚
&& &&&* 8 因为我们只使用1位数码管,所以请将本引脚或者3号引脚的任意一个接到arduino的5号数字口即可
&& &&&* 9 (F) 接到arduino的11号引脚
&& &&&* 10 (G) 接到arduino的12号引脚
#include &SevSeg.h&
void setup() {
//定义需要使用的引脚
&&sevseg.Begin(1,2,3,4,5,6,7,8,9,10,11,12,13);
void loop() {
&&//激活输出功能
&&sevseg.PrintOutput();
int val = analogRead(A0);
val = map(val,0,1023,0,9);& & //使用map函数来做数值映射
& & sevseg.NewNum(val, 4);& &&&//数码管函数输出数字,其中数值为小数点所在位置,我放在第四格所以效果就是不显示小数点
简单的介绍一下MAP函数
map(value, fromLow, fromHigh, toLow, toHigh)
value:需要映射的值
fromLow:当前范围值的下限
fromHigh:当前范围值的上限
toLow:目标范围值的下限
toHigh:目标范围值的上限
返回结果:
返回:被映射的值。
在程序中我们使用了map(val,0,),这段代码代表的是。判断val值在0-1023内的范围,然后输出0-9范围内对应的数值。
例如val为200,0-9为十等分,所以每一份为102.4。200刚好没有超出204.8的范围,所以输出数值是1.
最后老规矩,附上演示视频
的确好久没更新教程了
总评分:&威望 + 1&
注册时间最后登录阅读权限70积分1160精华0帖子
金牌会员, 积分 1160, 距离下一级还需 1840 积分
4位数码管放很久没玩了,准备用最小版做时钟的,感谢LZ分享
注册时间最后登录阅读权限30积分208精华0帖子
中级会员, 积分 208, 距离下一级还需 292 积分
那个map函数是arduino原先库里的还是那个数码管库里的呢?
注册时间最后登录阅读权限150积分4767精华2帖子
<font color="#。 发表于
那个map函数是arduino原先库里的还是那个数码管库里的呢?
是arduino标准库的语法。具体使用参考语法手册
注册时间最后登录阅读权限10积分20精华0帖子
新手上路, 积分 20, 距离下一级还需 30 积分
是什么库文件啊
注册时间最后登录阅读权限20积分187精华0帖子
注册会员, 积分 187, 距离下一级还需 13 积分
问下,这个库怎么连接四位数码管,有没有具体说明的文件
注册时间最后登录阅读权限30积分336精华0帖子
中级会员, 积分 336, 距离下一级还需 164 积分
想咨询一下,看到把那个变位器拿下来后。数字递减的。我想知道map()这个函数是怎么读取的 。一秒读一次。。还是怎么的。不涉及到原子操作么。。我本来想拿下来后直接是0
注册时间最后登录阅读权限150积分4767精华2帖子
玄冰之神 发表于
想咨询一下,看到把那个变位器拿下来后。数字递减的。我想知道map()这个函数是怎么读取的 。一秒读一次。。 ...
模拟口悬空后会有干扰信号的
注册时间最后登录阅读权限150积分4767精华2帖子
Safari◢ 发表于
问下,这个库怎么连接四位数码管,有没有具体说明的文件
库具体使用方法,请参考作者页面
注册时间最后登录阅读权限20积分112精华0帖子
注册会员, 积分 112, 距离下一级还需 88 积分
本帖最后由 zhiqing 于
13:20 编辑
楼主使用了数码管驱动的库:SevSeg,我帮楼主介绍她的使用方法吧。
/*&#160;&#160;
&#160;作者:极客工坊-zhiqing
&#160;时间:日
&#160;IDE版本号:1.0.5
&#160;发布地址:
&#160;&#160;
#include&#160;&SevSeg.h&
void setup()
&#160;&#160;sevseg.Begin(0,2,3,4,5,6,7,8,9,10,11,12,13);
&#160;Serial.begin(9600);
void loop()
&#160;while(Serial.available()&0)
&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;ch&#160;=Serial.read();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;sevseg.NewNum(ch, 0);& &&&
&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;sevseg.PrintOutput();
这是我的代码,接收PC端的数据,显示出来,当然显示的是字符的ASCII码。
使用方法:①包含数码管驱动库:#include &SevSeg.h&
②生成实例对象:SevS
③在setup中设置接线方式:sevseg.Begin(type,digit pins1-4,segment pins a-g,dp);
第1位type:0表示使用的是共阴数码管;1表示共阳数码管。作者使用的是共阴数码管。
第2到5位:digit pins1-4:从左到右,4个数码管的公共端所连arduino板子的引脚号。如果使用数码管不到4个,则左侧的引脚号没有意义。作者使用了3位数码管,分别接在3、4、5号引脚上,左侧的2没有意义。
第6到13位:segment pins a-g,dp:数码管a-g,dp依次连接在arduino上的引脚号。
④在loop中,printoutput函数用于循环扫描显示,调用一次,显示一次。
⑤要显示的数字,NewNum(val,dec),如果是4位数码管,则val的范围-999~9999,超出此范围将显示”----“,dec表示小数点位置(0-3),如果要显示3.141,那么val=3141,dec=3.
NewNum()函数使用在任何位置都行,程序运行过NewNum之后,下次运行printoutput()显示才更新。
编者注:把SevSeg库拷贝到library文件夹下之后,要重启arduino软件或者在sketch中使用Import Library命令。不然编译会出错,提示找不到SevSeg库。
&赞一个。。。。。&
&在CPP中有详细介绍的。翻译的很好啊!~&
&强,又让我对SevSeg库有了更深的了解!!!&
&好,赞一个&
总评分:&威望 + 3&
Powered by四位数码管如何显示不同数字?
&&&四位数码管如何显示不同数字?控制数码管驱动级的控制电路(也称驱动电路)有静态式和动态式两类,四位数码管显示不同数字就是采用动态式的控制电路。具体见文章:,其中相关部分摘录如下:
控制数码管驱动级的控制电路(也称驱动电路)有静态式和动态式两类。
静态驱动:静态驱动也称直流驱动。静态驱动是指每个数码管各用一个笔画译码器(如BCD码二-十进制译码器)译码驱动。图15是一位数码管的静态驱动之例。图集成电路TC5002BP内含有射极输出驱动级,所以采用共阴极数码管。A、B、C、D端为BCD码(二-十进制的8421码)输入端,BL为数码管熄灭及显示状态控制端,R为外接电阻。
图16为N位数字静态驱动显示电路。
动态驱动:动态驱动是将所有数码管使用一个专门的译码驱动器,使各位数码管逐个轮流受控显示,这就是动态驱动。由于扫描速度极快。显示效果与静态驱动相同。图17是一种四位数字动态驱动(脉搏冲驱动)方法的线路。图中只用了一个译码驱动电路TC5002BP。
TC4508BP内含两个锁存器,每个锁存器可锁存四位二进BCD码,对应于四位十进制数的四组BCD码分别输入到四个锁存器,四个锁存器,四组BCD码由四个锁存器分时轮流输出进入译码器,译码后进入数码管驱动级集成电路TD62505P(输入端I1~I7与输出端Q1~Q7一一对应)。Q1~Q7分别加到四个数码管的a~g七个阳极上。数字驱动电路TD62003P是由达林顿构成的阵列电路,Q1~Q4中哪一端接地,由输入端I1~I4的四师长“使能”信号DS1~DS4控制。由于四个锁存器的轮换输出也是受“使能”信号DS1~DS4控制。所以四个数码管轮流通电显示。由于轮流显示频率较高,故显示的数字不呈闪烁现象。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。后使用快捷导航没有帐号?
查看: 5100|回复: 5
求教怎么画数码管上面的数字和小数点,还有就是怎么在一个集成库里画多个封装
在线时间4 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
如题&&新人问题好多不懂的&&求教怎么画数码管上面的数字和小数点,还有就是怎么在一个集成库里画多个封装 我画的一个在画第二个就画不了了
在线时间3796 小时
威望25382 分
芯币111593 枚
E金币1145 枚
TA的帖子TA的资源
估计楼主没有说清楚
这个是原理图中的元件库
介个是PCB中的封装库
无论哪个,在库中编辑里都有的工具可以画滴
另外,建议,像这些元件都是标准的,EE的下载资源里面有很多,下载使用就可以,,自己画的,如果是PCB库,尺寸测量不好,做出来回有很多装配的问题。
参考这里:
本帖子中包含更多资源
才可以下载或查看,没有帐号?
在线时间4 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
恩恩&&谢谢 真是好人
在线时间15 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
有四位一体的吗楼主??
在线时间3 小时
TA的帖子TA的资源
宇宙尘埃, 积分 -2, 距离下一级还需 2 积分
宇宙尘埃, 积分 -2, 距离下一级还需 2 积分
涨知识了。& && && && && && && &
封装库资源平台
在线时间3 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
Powered by
逛了这许久,何不进去瞧瞧?

我要回帖

更多关于 共阴数码管 的文章

 

随机推荐