51单片机数码管静态显示的问题
我是一个单片机初学者,现在的问题是:要控制8位数码管静态显示,通过74HC138控制数码管的位选(P2.0、P2.1、P2.2),74HC573控制数码管的段选(P0口)...
我是一个单片机初学者,现在的问题是:要控制8位数码管静态显示,通过74HC138控制数码管的位选(P2.0、P2.1、P2.2),74HC573控制数码管的段选(P0口),怎样控制位选才能使几个数码管同时显示从0到F变化的数字呢,我现在只能使其中一位实现以上变化,好几位同时显示就做不到了。想问一下如果可以实现具体的程序是怎样的,谢谢!
展开
5个回答
展开全部
应该是动态显示吧!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
东莞市友贸实业有限公司_
2023-11-22 广告
2023-11-22 广告
第五代双倍数据速率DDR5双列直插式内存模块是一种高速、高性能的内存模块,适用于需要高带宽和低延迟的应用场景。与前几代内存模块相比,DDR5双列直插式内存模块具有更高的数据传输速率和更低的功耗,同时提供了更大的内存容量和更高的可靠性。在数据...
点击进入详情页
本回答由东莞市友贸实业有限公司_提供
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <AT89X51.H>
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00};
unsigned char dispbitcode[]={0xf8,0xf9,0xfa,0xfb,
0xfc,0xfd,0xfe,0xff};
unsigned char dispbuf[8]={16,16,16,16,16,16,16,16};
unsigned char dispbitcnt;
unsigned int t02scnt;
unsigned char t5mscnt;
unsigned char u;
unsigned char i;
void main(void)
{
TMOD=0x02;
TH0=0x06;
TL0=0x06;
TR0=1;
ET0=1;
EA=1;
while(1);
}
void t0(void) interrupt 1 using 0
{
t5mscnt++;
if(t5mscnt==4)
{
t5mscnt=0;
P0=dispcode[dispbuf[dispbitcnt]];
P1=dispbitcode[dispbitcnt];
dispbitcnt++;
if(dispbitcnt==8)
{
dispbitcnt=0;
}
}
t02scnt++;
if(t02scnt==1600)
{
t02scnt=0;
u++;
if(u==9)
{
u=0;
}
for(i=0;i<4;i++)
{
dispbuf[i]=8;
}
for(i=0;i<u;i++)
{
dispbuf[i]=5;
}
}
}
这个是拉幕式的动态显示程序,(直接端口控制数码管的位未使用芯片,你只要把位的代码改下就可以使用了~~~~)
仿真时候了几次,我觉得,位控制和段控制的顺序很重要,一般要把位控制的程序写在段控制程序的前面,不然动态显示的时候数码管会显示不全,估计这是因为时间延时的关系吧~~~~~~
祝你早日弄懂
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00};
unsigned char dispbitcode[]={0xf8,0xf9,0xfa,0xfb,
0xfc,0xfd,0xfe,0xff};
unsigned char dispbuf[8]={16,16,16,16,16,16,16,16};
unsigned char dispbitcnt;
unsigned int t02scnt;
unsigned char t5mscnt;
unsigned char u;
unsigned char i;
void main(void)
{
TMOD=0x02;
TH0=0x06;
TL0=0x06;
TR0=1;
ET0=1;
EA=1;
while(1);
}
void t0(void) interrupt 1 using 0
{
t5mscnt++;
if(t5mscnt==4)
{
t5mscnt=0;
P0=dispcode[dispbuf[dispbitcnt]];
P1=dispbitcode[dispbitcnt];
dispbitcnt++;
if(dispbitcnt==8)
{
dispbitcnt=0;
}
}
t02scnt++;
if(t02scnt==1600)
{
t02scnt=0;
u++;
if(u==9)
{
u=0;
}
for(i=0;i<4;i++)
{
dispbuf[i]=8;
}
for(i=0;i<u;i++)
{
dispbuf[i]=5;
}
}
}
这个是拉幕式的动态显示程序,(直接端口控制数码管的位未使用芯片,你只要把位的代码改下就可以使用了~~~~)
仿真时候了几次,我觉得,位控制和段控制的顺序很重要,一般要把位控制的程序写在段控制程序的前面,不然动态显示的时候数码管会显示不全,估计这是因为时间延时的关系吧~~~~~~
祝你早日弄懂
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
无语,个个都答非所问,人家问静态显示问题你们都答成动态显示,可以告诉LZ你要用静态显示话,74HC138做不到,非要静态的话就把位选也换成74HC573吧.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得你应该把原来图发上来看一下。你是怎么连线的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询