當前位置:首頁 » 編程語言 » C語言秒錶中如何實現顯示瞬間
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

C語言秒錶中如何實現顯示瞬間

發布時間: 2022-09-28 00:11:36

1. 51單片機的定時器程序,c語言編寫,使用內部定時器設計一個三位秒錶 (秒,十秒,分),顯示秒位的變動,

方法:首先:要學會數碼管的顯示程序
然後:按鍵的操作,注意軟體的消抖(具體的是延時,10ms左右)。
假設有k1~停表,k2~復位,k3~繼續運行
先說停表和繼續運行的
停表:如果k1按下,TR0=0;
繼續運行:如果k3按下,TR0=1;
復位:直接用硬體復位單片機或者k2按下,數據清零。
要實現數據的循環:只要定時器計數到最大值時,再把最小值賦給它!

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

}

3. 我想用C語言做一個計時器,也就是秒錶,按下一個鍵開始計時,可不可以顯示讀秒過程都行,可以的話最好,

如果對時間的精度要求是s的話,採用time()即可,該函數的返回值是自1970年1月1日0點0分之後的秒數。
採用getchar函數獲取輸入字元,然後獲取一個time值,等到在輸入一個字元後,在獲取一次time值,兩者相減就是經過的秒數。

4. 如何用c語言調用系統時鍾以數字形式顯示精確到秒並可以12 24小時轉換12小時有AMPM

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
////////////////////////////////////////////////////////
//按鍵功能定義
///////////////////////////////////////////////////////
sbit se=P2^0; //校表位選擇
sbit ad=P2^1; //加/清零
sbit dw=P2^2; //減/開始/暫停秒錶
sbit ch=P2^3; //秒錶和時鍾切換
//為了代碼的簡單,加多一個切換按鍵,校表鍵不復用
///////////////////////////////////////////////////////////
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
uchar buf[3]={15,4,19};//數據緩存
/////////////////////////////////////////////////////////////////////////////

uint sec=0; //秒錶
uchar n,count; //計算
uchar number; //調時選擇位
bit flag,flag1; //flag功能切換;flag1暫停/開始標志位
///////////////////////////////////////////////////////////////////

void delay(uchar i) //延時i*2ms
{
uchar j=240;
while(i--)
while(j--);
}

void display(bit t) //顯示子函數,形參位顯示標志,0位時鍾,1位秒錶
{
uchar i,flash;
static cn=0;
uchar tbuf[8];
uchar dbuf[8];
if(!t) //時鍾顯示
{
tbuf[0]=tab[buf[0]%10];
tbuf[1]=tab[buf[0]/10];
tbuf[2]=tab[10];
tbuf[3]=tab[buf[1]%10];
tbuf[4]=tab[buf[1]/10];
tbuf[5]=tab[10];
tbuf[6]=tab[buf[2]%10];
tbuf[7]=tab[buf[2]/10];

switch(number)
{
case 1: tbuf[0]=tbuf[0]|flash; tbuf[1]=tbuf[1]|flash; break;
case 2: tbuf[3]=tbuf[3]|flash; tbuf[4]=tbuf[4]|flash ;break;
case 3: tbuf[6]=tbuf[6]|flash; tbuf[7]=tbuf[7]|flash ;break;
}
for(i=0;i<8;i++)
{
P0=(0x01<<i);
P1=tbuf[i];
delay(1);
P1=0xff;
}
cn++;
if(cn==25)
{
cn=0;
flash=~flash;
}
}

else //秒錶顯示
{
dbuf[0]=n/10;
dbuf[1]=10;
dbuf[2]=sec%60%10;
dbuf[3]=sec%60/10;
dbuf[4]=10;
dbuf[5]=sec/60%10;
dbuf[6]=sec/60/10%10;
dbuf[7]=sec/60/100;

for(i=0;i<8;i++)
{
P0=(0x01<<i);
P1=tab[dbuf[i]];
delay(1);
P1=0xff;
}
}
}

void chang() //功能切換,時鍾和秒錶之間;並且暫停/開始,清零子函數
{
if(ch==0)
{
delay(15);
if(ch==0)
{
while(ch==0) display(flag); //鬆手檢測,調用顯示函數,防止顯示中斷,下同
flag=~flag;
if(flag)
{
number=0;
TR0=1;
TR1=0;
}
else
{
TR0=1;
TR1=0;
}
}
}
if(flag)
{
if(dw==0)
{
delay(15);
if(dw==0)
{
while(dw==0) display(1);
flag1=~flag1;
if(flag1)
{
TR1=1;
TR0=1;
}
else
{
TR1=0;
TR0=1;
}
}
}
if(ad==0)
{
delay(15);
if(ad==0)
{
while(ad==0) display(1);
sec=0;n=0;
TR1=0;flag1=0;
}
}
}
}

void ch_time() //時間調節子函數
{
if(!flag)
{
if(se==0)
{
delay(15);
if(se==0)
{
while(se==0) display(0);
TR0=0;
number++;
if(number==4)
{
number=0; //防止程序跑飛
TR0=1;
}
}
}
if(ad==0) //時鍾調節模式下,加
{
delay(15);
if(ad==0)
{
while(ad==0) display(0);
switch(number)
{
case 1: buf[0]++; if(buf[0]==60) buf[0]=1; break;
case 2: buf[1]++; if(buf[1]==60) buf[1]=1; break;
case 3: buf[2]++; if(buf[2]==24) buf[2]=1; break;
default: break;
}
}
}
if(dw==0) //時鍾調節模式下,減
{
delay(15);
if(dw==0)
{
while(dw==0) display(0);
switch(number)
{
case 1: buf[0]--; if(buf[0]==0) buf[0]=59; break;
case 2: buf[1]--; if(buf[1]==0) buf[1]=59; break;
case 3: buf[2]--; if(buf[2]==0) buf[2]=23; break;
default: break;
}
}
}
}
}

void main()
{
IE=0x8a; //打開總中斷,定時器T1和T0中斷
TMOD=0x11; //設定T1,T0位工作方式1
TH0=0xD8;
TL0=0xF0; //T0轉裝初值

TH1=0xD8;
TL1=0xF0; //T1轉裝初值
TR0=1; //開始時鍾開始工作
while(1)
{
ch_time(); //時間設置
chang(); //模式切換
display(flag); //顯示函數
}
}

void time_T0() interrupt 1 //定時器0,工作方式1,時鍾中斷
{
TH0=0xD8;
TL0=0xF0;
count++;
if(count==90)
{
count=0;
buf[0]++;
if(buf[0]==60)
{
buf[0]=0;
buf[1]++;
if(buf[1]==60)
{
buf[1]=0;
buf[2]++;
if(buf[2]==60) buf[2]=0;
}
}
}
}

void sec_T1() interrupt 3 //定時器1,工作方式1,秒錶中斷
{
TH1=0Xd8;
TL1=0Xf0;
count++;
n++;
if(n==90)
{
n=0;
sec++;
if(sec==65000) //最大計時到650分鍾
sec=0;
}
if(count==90)
{
count=0;
buf[0]++;
if(buf[0]==60)
{
buf[0]=0;
buf[1]++;
if(buf[1]==60)
{
buf[1]=0;
buf[2]++;
if(buf[2]==60) buf[2]=0;
}
}
}
}

5. 用C語言編寫秒錶的程序(單片機控制的時鍾設計)

這個程序可以實現秒的計時,按鍵控制開始、暫停、清零功能,更多功能自己在看清程序的基礎上進行改進。
#include <reg51.H>
sbit P3_5 =P3^5;
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};
unsigned char second;
unsigned char keycnt;
unsigned int tcnt;
void main(void)
{
unsigned char i,j;
TMOD=0x02;
ET0=1;
EA=1;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
while(1)
{
if(P3_5==0)
{
for(i=20;i>0;i--)
for(j=248;j>0;j--);
if(P3_5==0)
{
keycnt++;
switch(keycnt)
{
case 1:
TH0=0x06;
TL0=0x06;
TR0=1;
break;
case 2:
TR0=0;
break;
case 3:
keycnt=0;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
break;
}
while(P3_5==0);
}
}
}
}
void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second++;
if(second==100)
{
second=0;
}
P1=dispcode[second/10];
P2=dispcode[second%10];
}
}

6. 單片機:麻煩寫個程序,用C語言編寫,實現秒錶功能,如圖

#include <reg51.H>
#define uc unsigned char
uc code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰極0到9
uc ms50,s;//定義變數:50毫秒,秒

void timer0(void) interrupt 1 using 0
{
TH0 = 0x3c;//定時器賦予初值,定時0.05秒
TL0 = 0xb0;
ms50++;
if(ms50==20)//定時1秒
{
ms50=0;s++;
P0=table[s/10];//分解出十位
P2=table[s%10];//分解出個?
}
if(s==60)s=0;//超過1分鍾,恢復為0秒
}

void main(void)
{
ms50=0;
s=0;
TMOD = 1;//0000 0001,也就是T0(低四位有效),定時(第三位),方式1(最低位01)
TH0 = 0x3c;//定時器賦予初值,定時0.05秒
TL0 = 0xb0;
EA = 1; //總中斷允許
ET0 = 1;//定時中斷0,允許
TR0 = 1; //啟動定時器
while(1);
}

7. C# 如何製作一個百米秒錶計時器能夠記錄動態瞬間時間。

按鈕按下的時候隨時可以利用datetime.now和計時器啟動時的時間進行差值計算得到一個timespan對象。

8. 51單片機簡易秒錶的實現,用C語言編寫

程序我能寫,但是硬體電路圖啥的不太懂。

9. 用C語言設計秒錶程序

int main()
{ char m;
struct tm time;
time.hours=time.minutes=time.seconds=0;
printf("Now, press 's' key to begin the clock...\n");
m=getch();
if(m=='s'||m=='S')
while(1)
{
while(!kbhit()) {
update(&time);
display(&time);}
m=getch();
if(m=='s'||m=='S')break;
else{ printf("Only 's' or 'S' can be inputed!!");}
}
}
把main函數改成這樣看看行不行

10. C語言怎麼寫一個簡易秒錶

用到time.h文件
裡面有個clock();函數,返回一個clock_t類型的數字,表示從程序運行開始,CPU的"滴答"數
而在time.h里有個常量CLOCKS_PER_SEC表示每秒鍾有多少個"滴答".
這樣,(((float)clock())/CLOCKS_PER_SEC)*1000這樣的表達式就能得到從程序運行開始到現在的經過的時間.
程序的大致思路是這樣的,程序按下1的時候記下當時的程序運行時間.
從這時起,每時刻撿取程序運行時間,然後減去先前的值,就可以得到已經計時的時間了.
只要讓用戶按下0結束計時就好了
在conio.h文件里,有個函數kbhit()是個非阻塞函數,用來檢查鍵盤緩沖里有沒有按鍵按下,若有,則返回1,若沒有,則返回0,以此來作為判斷,若返回1,則撿取按鍵,測試它是不是0或者1,若返回0,則表示用戶沒有動作,繼續原來的工作,即繼續計時或等待命令.