⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c51软件延时计算工具.cpp

📁 单片机延时计算程序源代码
💻 CPP
字号:
//*******************************************************
//包含头文件
#include<stdio.h>



//*******************************************************
//数据类型定义
int k,wck;
long int i,j,l;
long int n,n1;
long int tempx,tempy,tempz;



//*******************************************************
//函数声明
void for_loop(void);
void for2_loop(void);
void for3_loop(void);
void while_loop(void);
void while2_loop(void);
void while3_loop(void);



//*******************************************************
//主函数
void main(void)
{
    unsigned char select1;
    while(1)
    {
        printf("-------------------------------------------------------------------------------\n");
        printf("^_^欢迎使用C51软件延时计算工具(◆友情提示◆:延迟时间大于100ms请选择三层循环)\n");
zhu1:   printf("请选择:\n◆①----while两层循环(可传递参数)\n◆②----while三层循环(可传递参数)\n");
        printf("◆③----for两层循环(不可传递参数)\n◆④----for三层循环(不可传递参数)\n◆⑤----退出(Ctrl+C)\n");
        printf("-------------------------------------------------------------------------------\n→");
        scanf("%d",&select1);
        switch(select1)
        {
            case 1:  while2_loop();    break;
            case 2:  while3_loop();    break;
            case 3:  for2_loop();      break;
            case 4:  for3_loop();      break;
            case 5:  printf("\n谢谢使用!\n(本软件由@Alexi制作,源码开放,欢迎交流,E-mail:lein2006@126.com)\n");printf("按任意键退出→");getchar();getchar();exit(0);break;
            default: printf("选择有误!请重新选择→\n\a"); goto zhu1; break;
        }
    }
}




//*******************************************************
//主函数
/*
void main(void)
{
    unsigned char select1;
    while(1)
    {
zhu1:   printf("-------------------------------------------------------------------------------\n");
        printf("^_^欢迎使用C51软件延时计算工具(◆友情提示◆:延迟时间大于100ms请选择三层循环)\n");
        printf("请选择:\n◆①----while循环(可传递参数)\n◆②----for循环(不可传递参数)\n◆③----退出\n");
        printf("-------------------------------------------------------------------------------\n");
        scanf("%d",&select1);
        switch(select1)
        {
            case 1:  while_loop();    break;
            case 2:  for_loop();      break;
            case 3:  exit(0);         break;
            default: printf("选择有误!\n\a"); goto zhu1; break;
        }
    }
}
*/


//*******************************************************
//while循环函数选择
/*
void while_loop(void)
{
    while(1)
    {
            unsigned char select2;
zhu2:       printf("请选择循环层数:\n◆①----两层while\n◆②----三层while\n◆③----放弃\n");
            scanf("%d",&select2);
            switch(select2)
            {
                case 1:  while2_loop(); break;
                case 2:  while3_loop(); break;
                case 3:  exit(0);
                default: printf("选择有误!\n\a"); goto zhu2; break;
            }
    }
}
*/



//*******************************************************
//for循环函数选择
/*
void for_loop(void)
{
    while(1)
    {
            unsigned char select3;
zhu3:       printf("请选择循环层数:\n◆①----两层for\n◆②----三层for\n◆③----放弃\n");
            scanf("%d",&select3);
            switch(select3)
            {
                case 1:  for2_loop(); break;
                case 2:  for3_loop(); break;
                case 3:  exit(0);
                default: printf("选择有误!\n\a"); goto zhu3; break;
            }
    }
}
*/


//*******************************************************
//while三层循环函数
void while3_loop(void)
{
    unsigned char error;
        printf("-------------------------------------------------------------------------------\n");
		printf("☆请输入☆\nwhile三层循环最大延时为:33 423 880us\t最小延时为:17us\t最小步进为:2us\n");
		printf("-------------------------------------------------------------------------------\n");
yanshi3:printf("--------------------------------\n");
        printf("延迟时间us(单位:微秒):");
		error=scanf("%ld",&n);
		if(error)
		{
		if(n>33423880||n<17)
		{
			printf("\n输入错误!超出延迟时间范围...\a\n");
            goto yanshi3;
		}
wucha3:	printf("允许误差us(单位:微秒):");
		scanf("%d",&k);
		printf("--------------------------------\n");
        if(k>30)
		   {
			     printf("\n呵呵~大哥,这误差也未免太大了吧!\a\n");
			     goto wucha3;
            }   	
         printf("Calculating....\n");
         for(l=1;l<255;l++)
            for(j=1;j<255;j++)
                for(i=1;i<255;i++)
                    for(wck=1;wck<=k+1;wck++)
				        {
                            if((long int)((2*i*j*l+4*j*l+4*l+7)/wck)==(long int)(n/wck))
					           {
						          tempx=i;tempy=j;tempz=l;
                                  n1=(2*tempx*tempy*tempz+4*tempy*tempz+4*tempz+7);			
				                  printf("x=%ld\ty=%ld\tz=%ld\tDelay_Time=%ld\n",tempx,tempy,tempz,n1);	
					           }
				        }               	
		printf("\n【C51代码:】\n");
		printf("--------------------------------------------------------------\n");
		printf("//函数定义\n");
		printf("void delay(unsigned char x, unsigned char y, unsigned char z)\n");
		printf("{\n");		
		printf("    unsigned char tempx,tempy,tempz=z;\n");
		printf("    do{tempy=y;do{tempx=x;while(--tempx);}while(--tempy);}while(--tempz);\n");
		printf("}\n\n");
		printf("//调用延时函数\n");
		printf("delay(%d, %d, %d);  //%ld%+d us\n",tempx,tempy,tempz,n,(n1-n));
		printf("\n--------------------------------------------------------------\n");
		printf("使用技巧:\n");
		printf("①Alt+空格→E→K 用鼠标选择代码(背景为白色);\n②Alt+空格→E→Y OK!复制完成.(化繁为简,祝你马到成功!)\n");
		printf("③如果要退出,方法很多:◆Alt+空格→C\t◆鼠标双击左上角\t◆Ctrl+C\n");
        }
        else {printf("Error!\a\n"); exit(0);}       		
}



//*******************************************************
//for三层循环函数
void for3_loop(void)
{
    unsigned char error;
        printf("-------------------------------------------------------------------------------\n");
		printf("☆请输入☆\nfor三层循环最大延时为:33 358 595us\t最小延时为:13us\t最小步进为:3us\n");
		printf("-------------------------------------------------------------------------------\n");
yanshi4:printf("--------------------------------\n");
        printf("延迟时间us(单位:微秒):");
		error=scanf("%ld",&n);
		if(error)
		{
		if(n>33358595||n<13)
		{
			printf("\n输入错误!超出延迟时间范围...\a\n");
            goto yanshi4;
		}
wucha4:	printf("允许误差us(单位:微秒):");
		scanf("%d",&k);
		printf("--------------------------------\n");
        if(k>5)
		   {
			     printf("\n呵呵~大哥,这误差也未免太大了吧!呵呵,是不是不相信我的计算能力啊!\a\n");
			     goto wucha4;
            }   	
         printf("Calculating....\n");
         for(l=1;l<256;l++)
            for(j=1;j<256;j++)
                for(i=1;i<256;i++)
                    for(wck=1;wck<=k+1;wck++)
				        {
                            if((long int)((((2*i+3)*j+3)*l+5)/wck)==(long int)(n/wck))
					           {
						          tempx=l;tempy=j;tempz=i;//最内
                                  n1=(((2*tempz+3)*tempy+3)*tempx+5);			
				                  printf("i=%ld\tj=%ld\tk=%ld\tDelay_Time=%ld\n",tempx,tempy,tempz,n1);	
					           }
				        }               	
		printf("\n【C51代码:】\n");
		printf("--------------------------------------------------------------\n");
		printf("//延时%ld%+dus 函数定义\n",n,(n1-n));
		printf("void delay%ldms(void)\n",(n/1000));
		printf("{\n");		
		printf("    unsigned char i,j,k;\n");
		printf("    for(i=%d;i>0;i--)\n",tempx);
		printf("    for(j=%d;j>0;j--)\n",tempy);
		printf("    for(k=%d;k>0;k--);\n",tempz);
		printf("}");
		printf("\n--------------------------------------------------------------\n");
		printf("使用技巧:\n");
		printf("①Alt+空格→E→K 用鼠标选择代码(背景为白色);\n②Alt+空格→E→Y OK!复制完成.(化繁为简,祝你马到成功!)\n");
		printf("③如果要退出,方法很多:◆Alt+空格→C\t◆鼠标双击左上角\t◆Ctrl+C\n");
        }
        else {printf("Error!\a\n"); exit(0);}
}
		


//*******************************************************
//for两层循环函数
void for2_loop(void)
{
    unsigned char error;
        printf("-------------------------------------------------------------------------------\n");
		printf("☆请输入☆\nfor两层循环最大延时为:130 820us\t最小延时为:10us\t最小步进为:2us\n");
		printf("-------------------------------------------------------------------------------\n");
yanshi2:printf("--------------------------------\n");
        printf("延迟时间us(单位:微秒):");
		error=scanf("%ld",&n);
		if(error)
		{
        if(n>130820||n<10)
		{
			printf("\n输入错误!超出延迟时间范围...\a\n");
            goto yanshi2;
		}
wucha2:	printf("允许误差us(单位:微秒):");
		scanf("%d",&k);
		printf("--------------------------------\n");
        if(k>50)
		   {
			     printf("\n呵呵~大哥,这误差也未免太大了吧!呵呵,是不是不相信我的计算能力啊!\a\n");
			     goto wucha2;
            }   	
         printf("Calculating....\n");
            for(j=1;j<256;j++)
                for(i=1;i<256;i++)
                    for(wck=1;wck<=k+1;wck++)
				        {
                            if((long int)(((2*i+3)*j+5)/wck)==(long int)(n/wck))
					           {
						          tempx=j;tempy=i;//最内
                                  n1=((2*tempy+3)*tempx+5);			
				                  printf("i=%ld\tj=%ld\tDelay_Time=%ld\n",tempx,tempy,n1);	
					           }
				        }               	
		printf("\n【C51代码:】\n");
		printf("--------------------------------------------------------------\n");
		printf("//延时%ld%+dus 函数定义\n",n,(n1-n));
		printf("void delay%ldms(void)\n",(n/1000));
		printf("{\n");		
		printf("    unsigned char i,j;\n");
		printf("    for(i=%d;i>0;i--)\n",tempx);
		printf("    for(j=%d;j>0;j--);\n",tempy);
		printf("}");
		printf("\n--------------------------------------------------------------\n");
		printf("使用技巧:\n");
		printf("①Alt+空格→E→K 用鼠标选择代码(背景为白色);\n②Alt+空格→E→Y OK!复制完成.(化繁为简,祝你马到成功!)\n");
		printf("③如果要退出,方法很多:◆Alt+空格→C\t◆鼠标双击左上角\t◆Ctrl+C\n");
        }
        else {printf("Error!\a\n"); exit(0);}
}



//*******************************************************
//while两层循环函数
void while2_loop(void)
{
    unsigned char error;
        printf("-------------------------------------------------------------------------------\n");
		printf("☆请输入☆\nwhile两层循环最大延迟时间为:130 812us\t最小延迟时间为:12us\t最小步进为:2us\n");
		printf("-------------------------------------------------------------------------------\n");
yanshi1:printf("--------------------------------\n");
        printf("延迟时间us(单位:微秒):");
		error=scanf("%ld",&n);
		if(error)
		{if(n>=130812||n<12)
		{
			printf("\n输入错误!超出延迟时间范围...\a\n");
            goto yanshi1;
		}

wucha1:	printf("允许误差us(单位:微秒):");
		scanf("%d",&k);
		printf("--------------------------------\n");
		if(k>50)
		{
			printf("\n呵呵~大哥,这误差也未免太大了吧!\a\n");
			goto wucha1;	
		}

		for(i=1;i<256;i++)
            for(j=1;j<256;j++)
				for(wck=1;wck<=k+1;wck++)
				{
					if((long int)((2*i*j+4*i+6)/wck)==(long int)(n/wck))
					{
						 tempx=i;tempy=j;
                         n1=(2*tempx*tempy+4*tempx+6);			
						 printf("m=%ld\tn=%ld\tDelay_Time=%ld\n",tempy,tempx,n1);	
					}
				}	
		printf("\n【C51代码:】\n");
		printf("--------------------------------------------------------------\n");
		printf("//函数定义\n");
		printf("void delay(unsigned char m, unsigned char n)\n");
		printf("{\n");		
		printf("	unsigned char tempm,tempn=n;\n");
		printf("	do{tempm=m;while(--tempm);}while(--tempn);\n");
		printf("}\n\n");
		printf("//调用延时函数\n");
		printf("delay(%d, %d);  //%ld%+d us \n",tempy,tempx,n,(n1-n));
		printf("\n--------------------------------------------------------------\n");
		printf("使用技巧:\n");
		printf("①Alt+空格→E→K 用鼠标选择代码(背景为白色);\n②Alt+空格→E→Y OK!复制完成.(化繁为简,祝你马到成功!)\n");
		printf("③如果要退出,方法很多:◆Alt+空格→C\t◆鼠标双击左上角\t◆Ctrl+C\n");
		}
		else {printf("Error!\a\n"); exit(0);}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -