微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 新手问一个51单片机控制数码管的问题,大神求解

新手问一个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=0x01<<i;         //位选  高电平有效
                P2=(P2&0x1f)|0xc0;           //位选开
                _nop_();
                _nop_();
                P2=P2&0x1f;                 //位选关

                _nop_();
                _nop_();  这里延时时间太短了  大约1ms左右就可以

delay(10); //10ms  这个延时时间太长了  大约1ms左右就可以

数码管显示其实就是一位一位的点亮,速度快了,利用人眼的视觉暂留,看上去就是一个数字了。
你的问题就是位与位之间的时间太长。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top