⑴ 2个4位共阳数码管直接和51单片机IO口连接,亮度偏暗的原因
数码管直接与I/O连接,亮度肯定是很暗的,这是小事,重要的是单片机很容易被烧坏的。因为单片机I/O的驱动能力很小,是不能直接驱动数码管的,特别是驱动共阳数码管的公共端,这需要高电平有效驱动,需要单片机输出电流,而对于单片机高电平时的输出电源是极小的,因此不可能驱动公共端的,非要这么做后果就是因电流小而使数码管显示很暗,最坏的结果是烧坏单片机。而用I/O驱动数码管的七段还免强维持,因单片机低电平时的输出电流比高电平时大很多。但不提倡直接用I/O驱动数码管,不论是公共端还是七段的控制端,而都要用一片驱动电路来连接。用74LS244和74HC244(同相驱动),或74LS240,74HC240(反相驱动)等都可以。
⑵ 一个74hc573如何驱动两个四位数码管
74hc573驱动4位数码管
用74HC573驱动4位数码管的段选,
用74HC573驱动4位数码管的段选,如果数码管选用共阴的, 这个电路可行。
补充: 74HC573输出那里串接个小电阻, 再接到数码管的段码端。
我的数码管是共阴的,位选就是接地,那直接接单片机就可以了。
位选接单片机P2.7, P2.6, P2.5, P2.4 。
段选接74HC573 输出端Q0 ~ Q7 (中间最好是串个300欧左右电阻)。
74HC573 输入端D0 ~ D7接单片机P0口。
⑶ 使用单片机实现四位八段的数码管显示,显示出852.6如何实现,请写出实现流程
有两种方式,一种是动态扫描,假设你数码管有COM1,COM2,COM3,COM4,然后有8个段,常见的是7个控制数码管段还有一个小数点一共8个段
那么这里就描述单片机一次扫描4位的过程,首先,如果你的数码管是共阳,那么显示第一位就将COM1引脚拉到高电平,然后8个引脚接到单片机IO口上,你说你要显示852.6,那么第一位是8,7个段全亮,所以7个IO全部拉低电平就行,随后延迟差不多1ms左右
接下来就是显示第二个数码管,和之前一样,COM2拉高,然后你要显示5的话有两个段是不亮的,所以哪两个脚你不想让他亮,你直接把对应的IO拉高就行,你要让剩下哪5个段亮直接拉高电平即可,随后再延时1ms左右
接下来两位和上面一样,对应位的COM口拉高电平,对应的字段IO你要让哪个段亮就把哪个拉低电平,哪个段不想亮就拉高电平,最后延时1ms就行
最后程序外面套个while(1)就可以实现无限循环了
还有一种方式就是用74HC595和4个数码管连接起来,74HC595是一个串行锁存寄存器,只需要4个74HC595和4个数码管就行,最少只占用单片机2个IO
这里就说明一下74HC595的控制方式
首先74HC595应该有个EN口,拉低,然后时钟拉高,循环8次,再把时钟信号拉低,用一个AND运算,如你要传输一个0XAA,那么就是
void InputData(0XAA)
{
for(int i=0;i<8;i++)
{
if(dat&0x01==1)
{
digitalWrite(SCK,LOW);
digitalWrite(DAT,HIGH);
delayMicroseconds(10);
}
else
{
digitalWrite(SCK,LOW);
digitalWrite(DAT,LOW);
delayMicroseconds(10);
}
dat=dat>>1;
digitalWrite(SCK,HIGH);
}
}
这里我是直接复制我以前写的一个arino驱动74HC595的程序,SCK是时钟,DAT是数据
建议你把单片机和你数码管的电路图发出来,你说如何实现我不知道你是怎么接的数码管
⑷ 两个四位一体共阳数码管如何跟单片机连接
用单片机的两个I/O口,一个作段码驱动一个作位码驱动。如果想只用一个I/O口可用两片串并转换IC74LS164作为辅助驱动就可以了。这样只用4条I/O线就可以实现8位LED数码管的显示。
⑸ 如何利用单片机让4位数码管显示
利用动态扫描让四位数码管稳定的显示1234。
3.2子情境目标:
(1)掌握单片机控制四位数码管的动态扫描技术,包括程序设计和电
路设计,本任务的效果是让四位数码管稳定的显示1234。
(2)用PROTEUS进行电路设计和实时仿真
3.3知识点链接
(1)数码管动态扫描(动态扫描的定义以及与静态显示的区别)
动态显示的特点是将所有位数码管的段选线s一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
(2)总线的应用
元器件与总线的连线
P0口的接线采用总线方式,详细如图5-17所示。
① 选择总线按钮
② 绘制总线:与普通电线的绘制方法一样,选择合适的起点、终点单击。
如果终点在空白处,左键双击结束连线。
画总线的时候为了和一般的导线区分,我们一般喜欢画斜线来表示分支线。此时我们需要自己决定走线路径,只需在想要拐点处单击鼠标左键即可。在画斜线时,需要关闭线路自动路径功能才好绘制。
Proteus的线路自动路径功能简称WAR,当选中两个连接点后,WAR将选择一个合适的路径连线。WAR可通过使用标准工具栏里的“WAR”命令按钮来关闭或打开,也可以在菜单栏的“Tools”下找到这个图标。
③ 给与总线连接的导线贴标签PARTLABELS
与P0口相连的线标签名依次为P00—P06,本电路中的P0口的上拉电阻通过总线与P0口相连,数码管也是通过总线与P0口相连,这些都需要标注,以表明正确的电气连接。单击绘图工具栏中的导线标签按钮,使之处于选中状态。将鼠标置于图形编辑窗口的欲标标签的导线上,跟着鼠标的指针就会出现一个“×”号,表明找到了可以标注的导线,单击鼠标左键,弹出编辑导线标签窗口,如图5-16所示。
在“string”栏中,输入标签名称(如p00),单击“OK”按钮,结束对该导线的标签标定。同理,可以标注其它导线的标签,如图5-16所示。
注意,在标定导线标签的过程中,相互接通的导线必须标注相同的标签名。
图5-16编辑导线标签窗口
3.4任务步骤
3.4.1步骤一:PROTEUS电路设计,单片机控制四位共阴极数码管动态扫描显示的原理图如图5-17所示。
图5-17四位共阴极数码管动态扫描显示的原理图
1、选取元器件
①单片机:AT89C52
②带公共端的排阻:RESPACK-8
③四位共阴极数码管:7SEG-MPX4-CC
2、放置元器件、放置电源和地、连线、元器件属性设置
数码管动态扫描显示的原理图如图5-17所示,整个电路设计操作都在ISIS平台中进行。
(1)带公共端的排阻(RESPACK-8)如图5-18所示,在本电路中作为P0的
上拉电阻,在如图5-19所示ComponentValue一栏中可更改阻值,例如本例中将阻值更改为200欧姆。
图5-18排阻图5-19排阻属性框
至此,我们便完成了整个电路图的绘制。
3.4.2步骤二:源程序设计与目标代码文件生成
(1)程序流程图
图5-20数码管动态扫描的流程图
(2)源程序设计
#include<reg52.h>//52系列单片机头文件
#defineucharunsignedchar
#defineuintunsignedint
uintx,y;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//共阴极数码管编码
voiddisplay(uchar,uchar,uchar,uchar);//声明子函数
voiddelay(int);//声明子函数
voidmain()
{
while(1)
{
display(1,2,3,4);//主程序始终调用数码管显示子程序
}
}
voiddisplay(uchara,ucharb,ucharc,uchard)
{
P2=0xef;
P0=table[a];//给第一个数码管送"a"
delay(1);//延时1ms
P2=0xdf;
P0=table[b];//给第二个数码管送"b"
delay(1);//延时1ms
P2=0xbf;
P0=table[c];//给第三个数码管送"c"
delay(1);//延时1ms
P2=0x7f;
P0=table[d];//给第三个数码管送"d"
delay(1);//延时1ms
}
voiddelay(uintz)//延时子函数
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
⑹ 如何利用单片机让4位数码管显示
程序如下(用的是STC89C52芯片):
#include<reg52.h>//52系列单片机头文件
#defineucharunsignedchar
#defineuintunsignedint
uintx,y;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//共阴极数码管编码
voiddisplay(uchar,uchar,uchar,uchar);//声明子函数
voiddelay(int);//声明子函数
voidmain()
{
while(1)
{
display(1,2,3,4);//主程序始终调用数码管显示子程序
}
}
voiddisplay(uchara,ucharb,ucharc,uchard)
{
P2=0xef;
P0=table[a];//给第一个数码管送"a"
delay(1);//延时1ms
P2=0xdf;
P0=table[b];//给第二个数码管送"b"
delay(1);//延时1ms
P2=0xbf;
P0=table[c];//给第三个数码管送"c"
delay(1);//延时1ms
P2=0x7f;
P0=table[d];//给第三个数码管送"d"
delay(1);//延时1ms
}
voiddelay(uintz)//延时子函数
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
(6)单片机两个四位数码管扩展阅读
led数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。
位数有半位,1,2,3,4,5,6,8,10位等等,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
⑺ 单片机汇编语言 用两个四位数码管代替八位数码管
两个四位一体数码管,和一个8位一体数码管,其电路结构是相同的,显示方式也同样是动态扫显示的,如果输出段码和位码的电路不变,那程序是通用的,不用作什么修改的。你可以直接试一下就知道了,如果不行再找原因或再来提问。
⑻ 怎样用两个四位数码管代替一个八位数码管,主要是怎么接引脚 谢谢!
这是可以的,分别让两个四位数码管显示四位数,合在一起就是八位数。
原理:两个四位数码管的数据针脚分别相连后,与P0口相连;位选针脚分别与P3口相连,这样就实现了用两个四位数码管代替一个八位数码管。
方法:第1步、数码管1的A-H针脚分别与数码管2的A-H相连,即A-A(11),B-B(7),C-C(4),D-D(2),E-E(1),F-F(10),G-G(5),H-H(3)后;然后再A接P0.0,依次往下直到H接P0.7;这样就完成了数据口的连接。
第2步、四位一体数码管的位选针脚为12,9,8,6.让显示前四位的数码管的这四个针脚与P3.0-P3.3相连,显示后四位的数码管的这四个针脚与P3.4-P3.7相连,这样就完成了位选端的电路。
第3步、控制方法是P3口的P3.0控制八位数字的左边第一位,依次往右,P3.7控制八位数字的右边第一位。P0口控制所要显示的数据。
电路就是这样连接的,相信程序你会写好的。祝你好运!
⑼ 单片机同时控制两个数码管
实际上看作是四位数码管就可以了。
东西方向是两个,南北方向是两个
用一个595,加四个I/O口就可以实现
并联显示就相同的
⑽ 两个 四位七段LED数码管该如何连接
他们之间不是直接连在一起的,是通过单片机联系起来的,每一个数码管有4个位选信号。其他的一些口则连接在l\o口上。。