📄 c51软件延时计算工具.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 + -