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();
}