急急急!!数码管闪烁

[复制链接]
4090|10
 楼主| yuezhaoxu 发表于 2010-3-13 20:59 | 显示全部楼层 |阅读模式
//很简单,P0显示段码,P2为位选,要P2.0控制数码管个位闪烁,但是在PROTEUSS上仿真并不闪烁,这到底是为什么啊???


#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code seg7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit d1=P2^0;
sbit d2=P2^1;
uchar t;
void delaynms(uchar i)
{
uchar j,m;
for(j=0;j<i;j++)
{
  for(m=0;m<121;m++);
  }

}
void ininttime0(void)
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;

}
void timer_int0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
if(t=20){t=0;d1=~d1;}//个位闪烁

}
void displayled(void)
{
P0=seg7[0];//个位显示0
d1=0;
delaynms(20);
d1=1;
P0=seg7[1];//十位显示1
d2=0;
delaynms(20);
d2=1;
}
void main(void)
{
ininttime0();
while(1)
  displayled();
}
chunyang 发表于 2010-3-13 21:06 | 显示全部楼层
提高刷新率,同时注意驱动电流要够。
liushiming82 发表于 2010-3-13 21:19 | 显示全部楼层
刷新前有没有关要显示的位选了
clleady 发表于 2010-3-13 21:21 | 显示全部楼层
if(t=20){t=0;d1=~d1;}//个位闪烁
改成if(t==20){t=0;d1=~d1;}//个位闪烁
zsuqing 发表于 2010-3-13 21:21 | 显示全部楼层
if(t=20){t=0;d1=~d1;}//个位闪烁
这句错了 if(t==20)){t=0;d1=~d1;}//个位闪烁
程序写得要严禁 按标准方式写 查找错误 方便些 关键部位 要用解释
 楼主| yuezhaoxu 发表于 2010-3-13 21:25 | 显示全部楼层
谢谢各位改过后还是不行,应该还有别的原因:3楼说的能详细点么
zsuqing 发表于 2010-3-13 21:42 | 显示全部楼层
图 源程序 传上来
ccxlslr 发表于 2010-3-13 21:55 | 显示全部楼层
还有人真以为Proteus什么都能呢!
我诉你,在单频执行时,proteus仍然全亮,并且它基本不表现那个,只要达到基本要求,它就全亮
hufa123 发表于 2010-3-14 12:17 | 显示全部楼层
每次你都D1=0;D1=1;中断后什么情况很难把握
hufa123 发表于 2010-3-14 12:19 | 显示全部楼层
:$看错了 。。
lirunze 发表于 2010-3-14 19:48 | 显示全部楼层
循环刷新时间要快,但是每一位刷新完之后要有一定得时间间隔。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

66

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部