?? 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 + -