[急!]我用proteus仿真单片机通过锁存器控制数码管进行动态显示,但数码管却没任何反应。程序在实验板已验

仿真图如下:程序如下:#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharsbitWei=P2^... 仿真图如下:

程序如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit Wei=P2^7; //位操作,位选:控制选择第几个数码管
sbit Duan=P2^6; //段选:控制选择的数码管的那几段亮,从而达到预期的显示目的
//(数码管一般7段,加1个点依次为A~G共8个LED组成)
uchar code Wtab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //定义选择各个数码管时,单片机分别需要提供的位选参数
uchar code Dtab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; //定义数码管依次显示0~F时,单片机分别需要提供的段选参数
//延时函数
void Delay_Ms(uint it)
{
uint it1,it2;
for(it1=0;it1<it;it1++)
{
it2=107;
while(it2--);
}
}
/*最基本的数码管静态显示(六个数码管均显示0)*/
void Base_Show()
{
Wei=1; //控制一个锁存器,给它使能打开锁存器进行位选
P0=0x00; //六个数码管全部选通
Wei=0; //位选结束,关掉锁存器
Duan=1; //控制另一个锁存器,进行段选
P0=0x3f; //让数码管显示0
Duan=0; //段选结束,关掉锁存器(此句也可不写)
}
/*数码管动态显示*/
void Move_Show()
{
uchar ci,cj,cWei,cDuan;
for(ci=0;ci<6;ci++) //进行位选的循环
{
cWei=Wtab[ci];
Wei=1;
P0=cWei;
Wei=0;
for(cj=0;cj<16;cj++) //进行段选的循环
{
cDuan=Dtab[cj];
Duan=1;
P0=cDuan;
Duan=0;
Delay_Ms(300);
}
}
}
void main()
{
while(1)
{
Base_Show();
Delay_Ms(1000); //调用延时函数使其静态显示1s
Move_Show();
}
}
望请高手指点,改正,小弟不胜感激。
展开
 我来答
士心甬力xzy
2012-11-24
知道答主
回答量:26
采纳率:0%
帮助的人:9.9万
展开全部
亲,你用的P0口,上电是高阻态,要接上拉电阻,就是再放一个排阻respack,其中的1接电源,其它八个管脚分别接到P0口的管脚上
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小粒子ex877
2012-11-23 · TA获得超过127个赞
知道小有建树答主
回答量:1607
采纳率:0%
帮助的人:508万
展开全部
有可能是你用的数码管共阳和共阴搞反了吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
you0zhi
2012-11-22
知道答主
回答量:57
采纳率:0%
帮助的人:21万
展开全部
加个电阻!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
erilking
2012-11-21 · TA获得超过191个赞
知道小有建树答主
回答量:425
采纳率:85%
帮助的人:95万
展开全部
你接线都错了吧,至少我没见过数码显示屏两端都接P0口的
追问
我使用了锁存器就是为了节约引脚
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式