微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 下面这两种延时函数有哪些区别?

下面这两种延时函数有哪些区别?

时间:10-02 整理:3721RD 点击:
第一种:
void delay(uint x)
{
        uint i,j;
        for(i=x;i>0;i++)
                for(j=110;j>0;j++);       //还有,这边的j一定要等于110吗?
}
第二种:
void delay(u16 i)
{
        while(i--);       
}
我在写下面动态数码管显示实验的时候,使用第二种函数,可以显示0-7,但是使用第一种的时候,只有第一个数码管亮,为什么?
/**************************************************************************************
*                              动态数码管显示实验                                                                                                  *
实现现象:下载程序后数码管从右至左显示0-7。                                                                                                                                                          
***************************************************************************************/
#include "reg52.h"                         
typedef unsigned int u16;          
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
void delay(u16 i)
{
        while(i--);       
}
void DigDisplay()
{
        u8 i;
        for(i=0;i<8;i++)
        {
                switch(i)         //位选,选择点亮的数码管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;//显示第0位
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;//显示第1位
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;//显示第2位
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;//显示第3位
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;//显示第4位
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;//显示第5位
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;//显示第6位
                        case(7):
                                LSA=1;LSB=1;LSC=1; break;//显示第7位       
                }
                P0=smgduan[i];//发送段码
                delay(100); //间隔一段时间扫描       
                P0=0x00;//消隐
        }
}
void main()
{       
        while(1)
        {       
                DigDisplay();  //数码管显示函数       
        }               
}

延时函数本质都一样

第一种,你的for应该用 i-- 与 j--

第一个是错的

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

网站地图

Top