1. C語言秒錶程序
下面程序你試下,延時函數自己加一下,幾毫秒到幾十毫秒#include"reg51.h"unsignedchari,j,m,xa[4];unsignedchartable1[]={0x01,0x02,0x04,0x08};unsignedchartable2[]={0x3fev0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};main(){TMOD=0x01;TF0=1;TR0=1;IE=0x82;EX0=1;m=0;while(1){for(j=0;j<4;j++){P0=table1[j];x=a[j];P1=table2[x];delay();//這里加個幾毫秒的延時,函數體自己寫下}}}timer1()interrupt1{TH0=0x3C;TL0=0xB0;i++;if(i==20){i=0;m++;a[3]=m/1000;a[2]=m/100%10;a[1]=m/10%10;a[0]=m%10;}}
2. 秒錶計時程序要求(需要用C語言實現)
這里的分段計時,我使用空格鍵實現的,F2比較麻煩。程序開始,輸入回車開始計時,中途輸入空格可以開始新的計時,最後輸入回車完成計時。
文件存在程序目錄下的timeout.txt
真麻煩,下次這種求助才給10分,絕對不做。。。
//////////////////////////
我的代碼就是在VS2010下寫的。。。怎麼會無法編譯。。。你要建一個空工程,然後加入C++源文件。
/////////////////////////////
請新建一個空工程,不要新建Win32Console那個工程!
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#include<stdlib.h>
structtm//定義時間結構體,包括時分秒和10毫秒
{
inthours,minutes,seconds;
inthscd;
}time,tmp,total;//time用以計時顯示,tmp用以存儲上一階段時間,total記總時間
intcnt;
FILE*fout;
//每次調用update函數,相當於時間過了10ms
voipdate(structtm*t)
{
(*t).hscd++;//10ms單位時間加1
cnt++;
if((*t).hscd==100)//計時滿1s,進位
{
(*t).hscd=0;
(*t).seconds++;
}
if((*t).seconds==60)//計時滿一分,進位
{
(*t).seconds=0;
(*t).minutes++;
}
if((*t).minutes==60)//計時滿一小時,進位
{
(*t).minutes=0;
(*t).hours++;
}
if((*t).hours==24)(*t).hours=0;
//delay();
Sleep(10);//Sleep是windows提供的函數,作用是暫停程序,單位毫秒,所以此處暫停10ms
}
voiddisplay(structtm*t)
{
//此處輸出計時結果, 為回車不換行,既一直在同一行更新時間
printf("%d:",(*t).hours);
printf("%d:",(*t).minutes);
printf("%d:",(*t).seconds);
printf("%d ",(*t).hscd);
//printf("Now,press'e'keytostoptheclock...");
}
voidtime_init()//初始化時間
{
time.hours=time.minutes=time.seconds=time.hscd=0;
}
voidget_total()//計算總時間
{
total.hscd=cnt%100;
cnt/=100;
total.seconds=cnt%60;
cnt/=60;
total.minutes=cnt%60;
cnt/=60;
total.hours=cnt;
}
intmain()
{
charm;
time_init();
cnt=0;
fout=fopen("timeout.txt","w");
printf("Now,pressEnterkeytobegintheclock... ");
while(1)
{
m=getch();
if(m!=' ')//讀入一個輸入,如果是回車,那麼跳出次循環
printf("InputError! ");
else
break;
}
printf("Whilecounting,! ");
while(1)
{
if(kbhit())//此處檢查是否有鍵盤輸入
{
m=getch();
if(m==' ')//如果等於回車,那麼計時結束,跳出循環
break;
elseif(m=='')//如果等於空格,顯示此次計時,初始化計時器
{
tmp=time;//記錄上一段計時器結果
fprintf(fout,"%d:%d:%d:%d ",tmp.hours,tmp.minutes,tmp.seconds,tmp.hscd);//寫入文件
time_init();
printf(" ");
}
else
{
printf("InputError! ");
}
}
update(&time);//更新計時器
display(&time);//顯示計時器時間
}
tmp=time;//輸出最後一次即使結果,寫入文件
fprintf(fout,"%d:%d:%d:%d ",tmp.hours,tmp.minutes,tmp.seconds,tmp.hscd);
get_total();//計算總的時間,顯示,並寫入文件
printf(" totaltime:%d:%d:%d:%d ",total.hours,total.minutes,total.seconds,total.hscd);
fprintf(fout,"totaltime:%d:%d:%d:%d ",total.hours,total.minutes,total.seconds,total.hscd);
fclose(fout);
getch();
}