新手问一个51单片机控制数码管的问题,大神求解
时间:10-02
整理:3721RD
点击:
void smug(int i) //段选
{
P0=array[tem]; //数字数组
P2=(P2&0x1f)|0xe0; //段选开
_nop_();
_nop_();
P2=P2&0x1f; //段选关
}
void display1()
{
char i;
tem[0]=hour/10;
tem[1]=hour%10;
tem[2]=11; //显示-
tem[3]=min/10;
tem[4]=min%10;
tem[5]=10; //熄灭
tem[6]=[qq]hum[/qq]/10;
tem[7]=hum%10;
for(i=0;i<8;i++)
{
smug(i);
P0=0x01<<i; //位选 高电平有效
P2=(P2&0x1f)|0xc0; //位选开
_nop_();
_nop_();
P2=P2&0x1f; //位选关
P0=0x00; //消隐
P2=(P2&0x1f)|0xc0;
P2=P2&0x1f;
delay(10); //10ms
}
}
我把display1函数写在主函数的while(1)循环中了,但为什么数码管非常暗,而且还能看出扫描的闪烁,是频率什么的不对吗
{
P0=array[tem]; //数字数组
P2=(P2&0x1f)|0xe0; //段选开
_nop_();
_nop_();
P2=P2&0x1f; //段选关
}
void display1()
{
char i;
tem[0]=hour/10;
tem[1]=hour%10;
tem[2]=11; //显示-
tem[3]=min/10;
tem[4]=min%10;
tem[5]=10; //熄灭
tem[6]=[qq]hum[/qq]/10;
tem[7]=hum%10;
for(i=0;i<8;i++)
{
smug(i);
P0=0x01<<i; //位选 高电平有效
P2=(P2&0x1f)|0xc0; //位选开
_nop_();
_nop_();
P2=P2&0x1f; //位选关
P0=0x00; //消隐
P2=(P2&0x1f)|0xc0;
P2=P2&0x1f;
delay(10); //10ms
}
}
我把display1函数写在主函数的while(1)循环中了,但为什么数码管非常暗,而且还能看出扫描的闪烁,是频率什么的不对吗
P0=0x01<<i; //位选 高电平有效
P2=(P2&0x1f)|0xc0; //位选开
_nop_();
_nop_();
P2=P2&0x1f; //位选关
_nop_();
_nop_(); 这里延时时间太短了 大约1ms左右就可以
delay(10); //10ms 这个延时时间太长了 大约1ms左右就可以
数码管显示其实就是一位一位的点亮,速度快了,利用人眼的视觉暂留,看上去就是一个数字了。
你的问题就是位与位之间的时间太长。
