當前位置:首頁 » 編程語言 » c語言動態時鍾源代碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言動態時鍾源代碼

發布時間: 2023-07-02 13:19:05

1. c語言中怎樣調用系統時間並動態顯示!

得到系統時間:
1.使用CTime類

CTime tm=CTime::GetCurrentTime();

CString str=tm.Format(「現在時間是:%Y年%m月%d日 %X」);

MessageBox(str,NULL,MB_OK);

2: 得到系統時間日期(使用GetLocalTime)

SYSTEMTIME st;

CString strDate,strTime;

GetLocalTime(&st);

strDate.Format(「%4d-%2d-%2d」,st.wYear,st.wMonth,st.wDay);

strTime.Format(「%2d:%2d:%2d」,st.wHour,st.wMinute,st.wSecond);

3.使用GetTickCount//獲取程序運行時間

long t1=GetTickCount();//程序段開始前取得系統運行時間(ms)

……//程序段

long t2=GetTickCount();//程序段結束後取得系統運行時間(ms)

long t = t2-t1; //前後之差即 程序運行時間 (ms)

2. C語言模擬動態時鍾程序

#include "stdio.h"
#include "dos.h"
//#include <windows.h>
#include <time.h>

#define S2M_M2H 60

struct N
{
int hour;
int minute;
int second;
} mytime = {0,0,0};

int main()
{
time_t rt;
struct tm *t;
time ( &rt );
t = localtime ( &rt );
mytime.hour=t->tm_hour;
mytime.minute = t->tm_min;
mytime.second = t->tm_sec;
//1樓答得不錯,你不會自己合直來么,我幫你合起來了
//以後我白天不能上網,晚上來答一兩個就玩去了,這題如果可行,就採納1樓的,我沒功勞
for(; ; mytime.second++)
{
if(mytime.second==S2M_M2H)
{
mytime.minute++;
mytime.second=0;

if(mytime.minute==S2M_M2H)
{
mytime.hour++;
mytime.minute=0;
}
}
{
printf("\b\b\b\b\b\b\b\b%2d:%02d:%02d",mytime.hour,mytime.minute,mytime.second);
delay(1000);
}
}
return 0;
}

3. C語言程序設計題:模擬時鍾轉動的程序

/*開發環境:turbo c 2.0模擬時鍾轉動程序代碼*/
#include"graphics.h"
#include"math.h"
#include"dos.h"
#define pi 3.1415926
#define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300
#define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240
#define d(a,b,c) X(a,b,c);Y(a,b,c);line(300,240,x,y)
void init() /*劃時鍾邊框函數*/
{
int i,l,x1,x2,y1,y2;
setbkcolor(1);
circle(300,240,200);
circle(300,240,205);
circle(300,240,5);
for(i=0;i<60;i++) /*劃鍾點上的短線*/
{
if(i%5==0)
l=15;
else
l=5;
x1=200*sin(i*6*pi/180)+300;
y1=200*cos(i*6*pi/180)+240;
x2=(200-l)*sin(i*6*pi/180)+300;
y2=(200-l)*cos(i*6*pi/180)+240;
line(x1,y1,x2,y2);
}
}
main()
{
int x,y,i,k=1;
int gdriver=9,gmode=2;
unsigned char h,m,s;
int o,p,q;
float n;
struct time t[1];
struct date d[1];
initgraph(&gdriver,&gmode,"c:\\tc");
initgraph(&gdriver,&gmode,"c:\\tc");
for(i=0;i<=6;i++)
{
settextstyle(TRIPLEX_FONT,HORIZ_DIR,i); /*控制輸出字元的字體,方向,大小*/
cleardevice();
settextjustify(1,1); /*在指定坐標上輸出字元串*/
outtextxy(300,80,"12") ;
outtextxy(300,390,"6");
outtextxy(140,230,"9");
outtextxy(460,230,"3");
outtextxy(380,100,"1");
outtextxy(220,100,"11");
outtextxy(430,160,"2");
outtextxy(430,310,"4");
outtextxy(380,370,"5");
outtextxy(220,370,"7");
outtextxy(160,160,"10");
outtextxy(160,310,"8");
}
init();
setwritemode(1); /*設置畫線的輸出模式*/
if(k!=0)
{
getdate(d); /*獲得系統日期函數*/
o=d[0].da_year;
p=d[0].da_mon;
q=d[0].da_day;
gettime(t); /*獲得系統時間函數*/
h=t[0].ti_hour;
m=t[0].ti_min;
s=t[0].ti_sec;
}
setcolor(7); /*設置時針顏色*/
n=(float)h+(float)m/60;
d(150,n,30); /*畫出時針*/
setcolor(14); /*設置分針顏色*/
d(170,m,6); /*畫出分針*/
setcolor(4); /*設置秒針顏色*/
d(190,s,6); /*畫出秒針*/
while(!kbhit()) /*控製程序按下任意鍵退出*/
{
while(t[0].ti_sec==s)
gettime(t);
gotoxy(44,18); /*使游標移動到指定坐標*/
printf("\b\b\b\b\b\b\b\b\b"); /*退格,使表示時間的字元串不斷變化*/
sound(400); /*按給定的頻率打開PC揚聲器*/
delay(70); /*中斷程序的執行,時間為70毫秒*/
sound(200);
delay(30);
nosound(); /*按給定的頻率關閉PC揚聲器*/
setcolor(4);
d(190,s,6);
s=t[0].ti_sec;
d(190,s,6);
if(t[0].ti_min!=m)
{
setcolor(14);
d(170,m,6);
m=t[0].ti_min;
d(170,m,6);
}
if(t[0].ti_hour!=h)
{

setcolor(7);
d(150,h,30);
h=t[0].ti_hour;
d(150,h,30);
sound(1000);
delay(240);
nosound();
delay(140);
sound(2000);
delay(240);
nosound();
}
if(s<10) /*用字元的形式輸出時間*/
{ if(m<10)
printf("%u:0%u:0%u",h,m,s);
else
printf("%u:%u:0%u",h,m,s);
}
else
{ if(m<10)
printf("%u:0%u:%u",h,m,s);
else
printf("%u:%u:%u",h,m,s);
}
gotoxy(34,19); /*在指定坐標上輸出日期*/
printf("%d年%d月%d日",o,p,q);
printf("\b\b\b\b\b\b\b\b\b");
}
getch();
closegraph();
}

4. 求用單片機c語言做一個電子時鍾,實現調時、顯示、整點報時等功能。

(1)用數字邏輯集成塊實現;
(2)時間以24小時為一個周期,顯示時、分、秒;
(3)計時過程具有報時功能,當時間到達整點前5秒進行蜂鳴報時;
(4)為了保證計時的穩定及准確須由晶體振盪器提供表針時間基準信號。

c51單片機 晶振為11.0592MHz

#include<reg52.h>
#define HOUR1 1
#define HOUR0 0
#define MIN1 2
#define MIN0 8
#define SEC1 2
#define SEC0 0
#define uint unsigned int
#define ulint unsigned long int
#define uchar unsigned char
sbit la=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
int i;
ulint
sharp,second,count=0,sec0=SEC0,sec1=SEC1,min0=MIN0,min1=MIN1,hour0=HOUR0,hour1=HOUR1;//秒計數全局變數
uchar code segment[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
uchar code time[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void delay(uint);//程序毫秒延時
void beeper(uchar);//開蜂鳴器毫秒
void init();//初始化函數
void display();//從數碼管上顯示
void counter();//計算進行過程中的時、分、秒值
void scan();//掃描鍵盤
void main()
{
init();
while(1)
{
scan();//掃描鍵盤看是否有鍵按下
for(i=6;i>0;i--)//動態掃描6位數碼管
{
display();//顯示時、分、秒
}
}
}

void init()
{
second=hour1*36000+hour0*3600+min1*600+min0*60+sec1*10+sec0;
TMOD=0x01;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
EA=1;
ET0=1;
TR0=1;
}

void delay(uint z)//程序毫秒延時
{
uint x=0,y=0;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void timer0() interrupt 1
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
count++;
if(count==20)//判斷是否到1秒
{
counter();//計算進行過程中的時、分、秒值
if(sharp!=hour0) beeper(1000);//判斷小時的值是否改變,變則啟動蜂鳴器
}
}

void beeper(uchar tt)
{
uchar t=tt;
count=0;
beep=0;//開蜂鳴器
delay(t);
beep=1;//關蜂鳴器
}

void display()
{
P0=0xff;//位消影(低電平選擇位)

//送位選信號
wela=1;
P0=segment[i-1];
wela=0;

P0=0x00;//段消影(高電平選擇段)

//送段選信號
la=1;
switch(i)
{
case 6 : P0=time[sec0]; break;
case 5 : P0=time[sec1]; break;
case 4 : P0=time[min0]; break;
case 3 : P0=time[min1]; break;
case 2 : P0=time[hour0]; break;
case 1 : P0=time[hour1]; break;
}
delay(1);
P0=0x00; //配合上面用於消隱
la=0;
}

void counter()
{
second++;
if(second==86400) second=0;
count=0;
sharp=hour0;//設置報時檢測KEY
sec0=second%10;
sec1=(second%60-sec0)/10;
min0=((second%3600-sec1*10-sec0)/60)%10;
min1=((second%3600-sec1*10-sec0)/60-min0)/10;
hour0=(second%36000-min1*600-min0*60-sec1*10-sec0)/3600;
hour1=second/36000;
}

void scan()
{

}

5. 以51單片機為基體 用C語言設計一個計數器 要求顯示數據8位 有復位功能 時間間隔1秒 動態顯示

void dis_cnter(void) 顯示計數器值子程序開始
{uchar i; 定義字元型局部變數i
P3_7=1;P3_6=1; 消隱有效,允許顯示
for(i=0;i8;i++) 循環8次
{SBUF=SEG7[cnt];while(!TI);TI=0;} 根據8個單元的計數值查表發送顯示
P3_7=0; 關閉消隱,正常顯示
} 顯示計數器值子程序結束

void cnter(void) 計數轉換子程序開始
{uchar i; 定義字元型局部變數i
for(i=0;i7;i++) 循環8次
{if(cnt9){cnt=0;cnt[i+1]++;}}若計數器某位值大於9,則該位回0,
而高位被進位加1
------------------------------------
if(cnt[7]9){for(i=0;i8;i++)cnt=0;} 若計數器最高位值大於9,則計數器全清0
} 計數轉換子程序結束

void pt_cnt(void) 輸出控制子程序開始
{
if((cnt[0]==pre_cnt[0])&&(cnt[1]==pre_cnt[1])&&
(cnt[2]==pre_cnt[2])&&(cnt[3]==pre_cnt[3])&&
(cnt[4]==pre_cnt[4])&&(cnt[5]==pre_cnt[5])&&
(cnt[6]==pre_cnt[6])&&(cnt[7]==pre_cnt[7])) 若計數值等於預置值
out_flag=1; 輸出標志置1
else out_flag=0; 否則輸出標志置0
=================================================
if(out_flag)drv=0; 若輸出標志為1,輸出端(P3.4)置0,驅動光耦U2
else drv=1; 否則輸出端(P3.4)置1
} 輸出控制子程序結束

void main(void) 主程序開始
{ IE=0x84; 開放CPU中斷,開放外中斷1的中斷
IT1=1; 置外中斷1為邊沿觸發
while(1) 無限循環
{P3_6=0;P3_7=1; 禁止發送給顯示器,消隱有效
SBUF=0x00;while(!TI);TI=0; 向IC2發送0x00,使IC2輸出為全0
if((P3&0x24)!=0x24)keydown_flag=1; 檢測P3.2、P3.5是否為高電平。
若不為高電平,說明有鍵按下,鍵被按下標志置1
else keydown_flag=0; 否則,鍵被按下標志置0
-------------------------------------------------------------------------------
SBUF=0xfe;while(!TI);TI=0; 向IC2發送0xfe
if(!P3_2)set_flag=!set_flag; 若P3.2為0,說明S9鍵按下,標志set_flag取反
==================================================
if(!set_flag){cnter();dis_cnter();pt_cnt();delay(100);}
若標志set_flag為0,調用計數、顯示計數、輸出控制的子程序
else {scan_key();dis_pre_cnter();delay(10);}
否則標志set_flag為1,調用掃描S1~S8鍵、顯示預置值的子程序
=====================================================
if(keydown_flag)delay(300); 因有鍵按下,調用延時300mS子程序,
以免調整鍵值的速度過快
}
} 主程序結束

void extern_int1(void) interrupt 2 using 1 外中斷1服務子程序
{
cnt[0]++; 計數器的最低位加1
}