[急!]我用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();
}
}
望请高手指点,改正,小弟不胜感激。 展开
程序如下:
#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();
}
}
望请高手指点,改正,小弟不胜感激。 展开
4个回答
展开全部
亲,你用的P0口,上电是高阻态,要接上拉电阻,就是再放一个排阻respack,其中的1接电源,其它八个管脚分别接到P0口的管脚上
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有可能是你用的数码管共阳和共阴搞反了吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你接线都错了吧,至少我没见过数码显示屏两端都接P0口的
追问
我使用了锁存器就是为了节约引脚
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询