您的位置:

用c语言编时钟,c语言时钟代码数字时钟

本文目录一览:

时钟程序(C语言)怎么写

具体代码如下:

#includegraphics.h

#includemath.h

#includedos.h

#define PI 3.1415926

//屏幕中心的坐标(640X480模式下)

#define mid_x 320

#define mid_y 240

int main()

{ int graphdriver=DETECT,graphmode;

int end_x,end_y;

struct time curtime;

float th_hour,th_min,th_sec;

initgraph(graphdriver,graphmode,"C:\\TC2"); //初始化VGA屏幕模式

setbkcolor(BLACK); //使用黑色的背景色

while(!kbhit(0)) //若有键盘输入,则跳出,即是结束程序

{ setcolor(GREEN); //把画笔设为绿色

circle(mid_x,mid_y,180); //钟的外圆

circle(mid_x,mid_y,150); //钟的内圆

circle(mid_x,mid_y,1); //画出钟的圆心

gettime(curtime); //取得系统当前时间

th_sec=(float)curtime.ti_sec*0.1047197551; //把秒针的角度化为弧度,为以后绘制时方便,下同

th_min=(float)curtime.ti_min*0.1047197551+th_sec/60.0; //分针的弧度

th_hour=(float)curtime.ti_hour*0.5235987755+th_min/12.0; //时度的弧度,注意整时是12等分的,所时乘的是3.14/180*5

//计算出时针的尾的坐标(时针长70)

end_x=mid_x+70*sin(th_hour);

end_y=mid_y-70*cos(th_hour);

setcolor(RED);

line(mid_x,mid_y,end_x,end_y); //用红色线画出时针

//计算出分针坐标(分针长110)

end_x=mid_x+110*sin(th_min);

end_y=mid_y-110*cos(th_min);

setcolor(RED);

line(mid_x,mid_y,end_x,end_y); //用红色画出分针

end_x=mid_x+140*sin(th_sec);

end_y=mid_y-140*cos(th_sec);

setcolor(RED);

line(mid_x,mid_y,end_x,end_y); //同上,画出秒针,长为140

//画出钟盘上的刻度,刻度长20

line(140,240,160,240); //9点对应的大刻度

line(320,60,320,80); //12点对应的大刻度

line(500,240,480,240); //3点的刻度

line(320,420,320,400); //6点的刻度

line(410,395.7,400,378.4); //5点

line(475.7,330,458.4,320); //4点

line(475.7,150,458.4,160); //2点

line(410,84.3,400,101.6); //1点

line(230,84.3,240,101.6); //11点

line(164.3,150,181.6,160); //10点

line(164.3,330,181.6,320); //8点

line(230,395.7,240,378.4); //7点

sleep(BLUE); //这里应该是打错,停止一秒,应为sleep(1000)

cleardevice(); //清除屏幕上的显示

}

closegraph(); //关闭VGA屏幕,即返回文本方式

return 0;

}

c语言时钟代码

#includegraphics.h /* 引入graphic.h */

#includemath.h /* 引入math.h */

#includedos.h /* 引入dos.h */

#define pi 3.1415926 /*定义pi=3.14159*/

#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;i60;i++) /*循环(算时间)*/

{if(i%5==0) l=15;

else l=5;

x1=200*cos(i*6*pi/180)+300;

y1=200*sin(i*6*pi/180)+240;

x2=(200-l)*cos(i*6*pi/180)+300;

y2=(200-l)*sin(i*6*pi/180)+240;

line(x1,y1,x2,y2);

}

}

main()

{

int x,y;

int gd=VGA,gm=2;

unsigned char h,m,s; /*定义*/

struct time t[1];

initgraph(gd,gm,"d:\\tc");

init();

setwritemode(1);

gettime(t);

h=t[0].ti_hour;

m=t[0].ti_min;

s=t[0].ti_sec; /*定义时分秒*/

setcolor(7); /*设置颜色*/

d(150,h,30);

setcolor(14);

d(170,m,6);

setcolor(4);

d(190,s,6);

while(!kbhit()) /*获取键盘相应*/

{while(t[0].ti_sec==s)

gettime(t); /*C语言中得到时间的函数*/

sound(400); /*计算时间……*/

delay(70);

sound(200);

delay(30);

nosound();

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

}

}

getch(); /*设置空格后退出*/

closegraph();

}

具体的。。就是套用用几个函数算时间。。

不要对这种很长的东西害怕,其实大部分都是在画这个钟~

加油哦~

图形时钟用C语言怎么编?

#include graphics.h

#include conio.h

#include math.h

void Draw(int hour, int minute, int second)

{

     double a_hour, a_min, a_sec;       // 时、分、秒针的弧度值

     int x_hour, y_hour, x_min, y_min, x_sec, y_sec; // 时、分、秒针的末端位置

     int x_hour1,y_hour1,x_min1,y_min1,x_sec1,y_sec1;

     // 计算时、分、秒针的弧度值

     a_sec = second * 2 * PI / 60;

     a_min = minute * 2 * PI / 60 ;

     a_hour= hour * 2 * PI / 12 + a_min / 12;;

     // 计算时、分、秒针的首末端位置

     x_sec = 320 + (int)(120 * sin(a_sec));

     y_sec = 240 - (int)(120 * cos(a_sec));

     x_min = 320 + (int)(100 * sin(a_min));

     y_min = 240 - (int)(100 * cos(a_min));

     x_hour= 320 + (int)(70 * sin(a_hour));

     y_hour= 240 - (int)(70 * cos(a_hour));

     x_sec1= 320 - (int)(15   * sin(a_sec));

     y_sec1= 240 + (int)(15   * cos(a_sec));

     x_min1= 320 - (int)(10   * sin(a_min));

     y_min1= 240 + (int)(10   * cos(a_min));

     x_hour1= 320 - (int)(5 * sin(a_hour));

     y_hour1= 240 + (int)(5 * cos(a_hour));

     // 画时针

     setlinestyle(PS_SOLID, NULL, 7);

     setcolor(WHITE);

     line(x_hour1, y_hour1, x_hour, y_hour);

     // 画分针

     setlinestyle(PS_SOLID, NULL, 4);

     setcolor(LIGHTGRAY);

     line(x_min1, y_min1, x_min, y_min);

     // 画秒针

     setlinestyle(PS_SOLID, NULL, 2);

     setcolor(RED);

     line(x_sec1, y_sec1, x_sec, y_sec);

}

void main()

{

     initgraph(640, 480);    // 初始化 640 x 480 的绘图窗口

     // 绘制一个简单的表盘

     circle(320, 240, 2);

     circle(320, 240, 60);

     circle(320, 240, 160);

     outtextxy(296, 330, "   竹斌");

     int x,y;

     for(int i=0;i12;i++)

     {

         x=320+(int)(140*sin(30*i*2*PI/360));

         y=240-(int)(140*cos(30*i*2*PI/360));

switch(i)

         {

         case 0:outtextxy(x-5,y-5,"12");break;

         case 1:outtextxy(x-5,y-5,"1");break;

         case 2:outtextxy(x-5,y-5,"2");break;

         case 3:outtextxy(x-5,y-5,"3");break;

         case 4:outtextxy(x-5,y-5,"4");break;

         case 5:outtextxy(x-5,y-5,"5");break;

         case 6:outtextxy(x-5,y-5,"6");break;

         case 7:outtextxy(x-5,y-5,"7");break;

         case 8:outtextxy(x-5,y-5,"8");break;

         case 9:outtextxy(x-5,y-5,"9");break;

         case 10:outtextxy(x-5,y-5,"10");break;

         case 11:outtextxy(x-5,y-5,"11");break;

         }

     }

     // 设置 XOR 绘图模式

     setwritemode(R2_XORPEN); // 设置 XOR 绘图模式

     //画刻度

     int a,b,a1,b1,n=0;

     for(n=0;n60;n++)

     {

     a=320+(int)(160 * sin(n*2*PI/60));

     b=240-(int)(160 * cos(n*2*PI/60));

     a1=320+(int)(150 * sin(n*2*PI/60));

     b1=240-(int)(150 * cos(n*2*PI/60));

     if(n%5==0)

         setlinestyle(PS_SOLID,NULL,5);

     else

         setlinestyle(PS_SOLID,NULL,1);

     line(a1,b1,a,b);

     }

     // 绘制表针

     SYSTEMTIME ti;      // 定义变量保存当前时间

     while(!kbhit())      // 按任意键退出钟表程序

     {

          GetLocalTime(ti);         // 获取当前时间

          Draw(ti.wHour, ti.wMinute, ti.wSecond);    // 画表针

          Sleep(1000);          // 延时 1 秒

          Draw(ti.wHour, ti.wMinute, ti.wSecond);    // 擦表针(擦表针和画表针的过程是一样的)

     }

     closegraph();      // 关闭绘图窗口

}

用C语言编一个数字电子时钟的程序

1.这是用windows api写的程序。所以要求是纯c的话就没有办法了

2.其中定时用了两种方法。一种是用取消息。另一种是延时队列。这里只使用了取消息的方法。延时队列由于我机器上是vc6.0,CreateTimerQueue在本人机器上无法使用,需要新的sdk,所以没有加以验证,但取消息的方式是可行的。

3.稍稍验证了下,基本满足要求。

-------------------------------------------

程序如下:

// DigitalClock.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include windows.h

#include winbase.h

typedef struct _st_time{

int hour;

int min;

int sec;

}ST_TIME;

ST_TIME g_Time; // The struct contain the hour,min and sec.

HANDLE g_hStdout; //

WORD g_cxCenter, g_cyCenter; // Center of the screen.

HANDLE g_DoneEvent; // The program could be over.

BOOL g_ThreadTerminated; // The Thread should be terminated.

#define SECOND_CIRCLE 60

#define MINUTE_CIRCLE 60

#define HOUR_CIRCLE 24

void TimeIncreaseSecond(ST_TIME st)

{

st.sec ++;

if (st.sec = SECOND_CIRCLE)

{

st.sec -= SECOND_CIRCLE;

st.min++;

if (st.min = MINUTE_CIRCLE)

{

st.min -= MINUTE_CIRCLE;

st.hour++;

if (st.hour = HOUR_CIRCLE)

{

st.hour -= HOUR_CIRCLE;

}

}

}

}

void PrintTimeToScreen(HANDLE hStdout, short cxCenter, short cyCenter, ST_TIME st)

{

char buf[64] = {0};

COORD crdPos;

// make it format to output.

sprintf (buf, "%02d:%02d:%02d", st.hour, st.min, st.sec);

crdPos.X = cxCenter - 4;

crdPos.Y = cyCenter;

SetConsoleCursorPosition(hStdout, crdPos);

printf(buf);

}

#ifdef USE_TIMERQUEUE

// if we use the timer queue function.

// Its procdure is in this.

void CALLBACK TimerRoutine (LPVOID lpParam, BOOL TimerOrWaitFired)

{

if (lpParam == NULL)

{

printf ("NULL parameters.\n");

}

else

{

ST_TIME *st = (ST_TIME *)lpParam;

TimeIncreaseSecond(st);

PrintTimeToScreen(g_hStdout, g_cxCenter, g_cyCenter, *st);

}

}

#else

DWORD WINAPI TimerThreadProc(LPVOID lpParam)

{

#define ID_TIMER_SECOND 1

MSG msg;

BOOL ret;

ST_TIME *st = (ST_TIME *)lpParam;

SetTimer(NULL, ID_TIMER_SECOND, 1000, NULL);

PeekMessage(msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);

while (!g_ThreadTerminated (ret = GetMessage (msg, NULL, 0, 0)) != 0)

{

if (ret == -1)

{

//process fatal event.

}

else if (msg.message == WM_TIMER)

{

TimeIncreaseSecond(*st);

PrintTimeToScreen(g_hStdout, g_cxCenter, g_cyCenter, *st);

}

else

{

TranslateMessage (msg);

DispatchMessage (msg);

}

}

return 1;

}

#endif

// If the ctrl+break combined key pressed. call this function.

// It set the g_DoneEvent. this terminate the program.

BOOL WINAPI CtrlHandler(DWORD fdwCtrlType)

{

switch (fdwCtrlType)

{

case CTRL_BREAK_EVENT:

// Terminate the program.

printf ("Terminate.\n");

SetEvent(g_DoneEvent);

return TRUE;

default:

return FALSE;

}

}

BOOL InitApplication()

{

// Get the stdin and stdout handle.

HANDLE hStdIn;

hStdIn = GetStdHandle(STD_INPUT_HANDLE);

if (hStdIn == INVALID_HANDLE_VALUE)

return FALSE;

g_hStdout = GetStdHandle(STD_OUTPUT_HANDLE);

// Set the mode, make the input echo.

DWORD fOldMode;

GetConsoleMode(hStdIn, fOldMode);

fOldMode |= ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT;

SetConsoleMode(hStdIn, fOldMode);

// Set the window buffer.

// make a line 40 columns.

CONSOLE_SCREEN_BUFFER_INFO csbiInfo;

GetConsoleScreenBufferInfo(g_hStdout, csbiInfo);

csbiInfo.srWindow.Right = 40;

// get the center point.

g_cxCenter = csbiInfo.srWindow.Right / 2;

g_cyCenter = csbiInfo.srWindow.Bottom / 2;

// Set the window.

SetConsoleWindowInfo(g_hStdout, TRUE, csbiInfo.srWindow);

return TRUE;

}

BOOL PrintTheInitalStateAndGetInput(HANDLE hStdout, WORD cxCenter, WORD cyCenter, ST_TIME time)

{

#define GAPS_LEFT_COLON (-2)

#define GAPS_RIGHT_COLON (1)

#define GAPS_LEFT_UNDERLINE_START (-4)

#define GAPS_MIDDLE_UNDERLINE_START (-1)

#define GAPS_RIGHT_UNDERLINE_START (2)

// __:__:__

// So the left ":" center -2

// so the right ":" center + 1

// so the left "_" center - 4;

// so the lfet "_" center - 1;

// so the right "_" center + 2;

COORD crdPos;

crdPos.X = cxCenter + GAPS_LEFT_COLON;

crdPos.Y = cyCenter;

SetConsoleCursorPosition(hStdout, crdPos);

printf (":");

crdPos.X = cxCenter + GAPS_RIGHT_COLON;

SetConsoleCursorPosition(hStdout, crdPos);

printf (":");

crdPos.X = cxCenter + GAPS_LEFT_UNDERLINE_START;

SetConsoleCursorPosition(hStdout, crdPos);

scanf ("%d", time.hour);

crdPos.X = cxCenter + GAPS_MIDDLE_UNDERLINE_START;

SetConsoleCursorPosition(hStdout, crdPos);

scanf ("%d", time.min);

crdPos.X = cxCenter + GAPS_RIGHT_UNDERLINE_START;

SetConsoleCursorPosition(hStdout, crdPos);

scanf ("%d", time.sec);

if (time.hour 0 || time.hour HOUR_CIRCLE ||

time.min 0 || time.min MINUTE_CIRCLE ||

time.sec 0 || time.sec SECOND_CIRCLE)

return FALSE;

return TRUE;

}

int main(int argc, char* argv[])

{

InitApplication();

PrintTheInitalStateAndGetInput(g_hStdout, g_cxCenter, g_cyCenter, g_Time);

// create a event to tell the program to terminate.

g_DoneEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

#ifdef USE_TIMERQUEUE

HANDLE hTimerQueue, hTimer;

hTimerQueue = CreateTimerQueue();

if (!CreateTimerQueueTimer(hTimer,

hTimerQueue, TimerRoutine, g_Time, 1000, 0, 0))

{

printf("CreateTimerQueueTimer failed (%d)\\n", GetLastError());

return 3;

}

#else

// create the thread.

HANDLE hThreadTimer;

DWORD dwThreadId;

g_ThreadTerminated = FALSE;

hThreadTimer = CreateThread(NULL, 0,

TimerThreadProc, g_Time, 0, dwThreadId);

if (hThreadTimer == NULL)

{

}

#endif

SetConsoleCtrlHandler(CtrlHandler, TRUE);

if (WaitForSingleObject(g_DoneEvent, INFINITE) != WAIT_OBJECT_0)

printf("WaitForSingleObject failed (%d)\\n", GetLastError());

#ifdef USE_TIMERQUEUE

if (!DeleteTimerQueue(hTimerQueue))

printf("DeleteTimerQueue failed(%d) \\n", GetLastError());

#else

g_ThreadTerminated = TRUE;

if (WaitForSingleObject(hThreadTimer, INFINITE) != WAIT_OBJECT_0)

printf("WaitForSingleObject failed (%d)\\n", GetLastError());

#endif

return 0;

}

--------------------------------------------

下面是纯c的。

有几个问题:

1.textmode函数在turboc中没有办法使用,不知道是什么问题,而borland c就可以。

2.无论怎么设置,自己的ctrlbreak函数在上述两个环境中都不能被调用,非常遗憾。所以不能够优雅的退出。只能按两次ctrlbreak。

下面是程序。

------------------------------------------

#include stdio.h

#include stdlib.h

#include stdio.h

#include conio.h

#include dos.h

#define ABORT 0

int jump_out_loop = -1;

int jump_out(void)

{

jump_out_loop = 1;

printf("Abort ..\n");

return ABORT;

}

int main(void)

{

struct text_info ti;

int center_x, center_y;

int hour, min, sec;

char str_out[64] = {0};

clrscr();

/*textmode(BW40);*/

/*textmode在turbo c下设置会出问题*/

gettextinfo(ti);

center_x = ti.winright / 2;

center_y = ti.winbottom / 2;

gotoxy(center_x - 4, center_y);

cprintf(" : : ");

gotoxy(center_x - 4, center_y);

cscanf("%d", hour);

gotoxy(center_x - 1, center_y);

cscanf("%d", min);

gotoxy(center_x + 2, center_y);

cscanf("%d", sec);

/* check input valid or not */

{}

setcbrk(1);

ctrlbrk(jump_out);

/*jump_out没有起到作用,实在不好意思.*/

/*

if (getcbrk())

printf("crtl break is on\n");

else

printf("is off\n");

*/

while (1)

{

delay(1000);

sec++;

if (sec = 60)

{

sec -= 60;

min++;

if (min = 60)

{

min -= 60;

hour++;

if (hour = 24)

{

hour -= 24;

}

}

}

sprintf(str_out, "%02d:%02d:%02d", hour, min, sec);

gotoxy(center_x - 4, center_y);

cprintf(str_out);

}

/* getch();*/

return 0;

}

c语言编写数字时钟

#includestdio.h

#includewindows.h

int main()

{

for(int i=0;i24;i++)

for(int j=0;j60;j++)

for(int k=0;k5;k++)

{

system("cls");

printf("%0.2d:%0.2d:%0.2d",i,j,k);

Sleep(1000);

}

}

单片机C语言该怎么编写时钟程序?

这个是简单的数码管时钟显示如果有需要,我写过比较完善的1602显示时钟.显示控制年月日等等.#includereg51.h

sbit Begin=P2^0;

sbit Hour=P2^1;

sbit Mus=P2^2;

sbit End=P2^3;

unsigned char code Tab[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};

unsigned char code num[]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned char Time[]={0,0,16,0,0,16,0,0};

unsigned char a;

unsigned int x,m,th;

void init()

{

TMOD=0x01;

TH0=(65535/50000)/256;

TL0=(65535/50000)%256;

EA=1;

ET0=1;

TR0=1;

}

void delay(unsigned int z)

{

unsigned int x,y;

for(x=z;x0;x--)

for(y=110;y0;y--);

}

unsigned char keyboard()

{

if(Begin==0){

delay(5);

if(Begin==0)

return 1;

}

if(Hour==0){

delay(30);

if(Hour==0)

return 2;

}

if(Mus==0)

return 3;

if(End==0)

return 4;

}

void display()

{

unsigned char i; for(i=0;i8;i++)

{

P3=num[i];

P0=Tab[Time[i]];

delay(5);

}

}

void main()

{

unsigned char Key;

init();

Key=keyboard();

if(Key==1)

{

while(1){

Key=keyboard();

display();

if(Key==2)

x+=3600;

if(Key==3)

x+=1;

if(Key==4)

return;

}

}}

void holes() interrupt 1 using 2

{

TH0=(65535/50000)/256;

TL0=(65535/50000)%256;

a++;

if(a=20)

{

x++;

m=x;

th=m/3600; //设置小时

Time[0]=th/10;

Time[1]=th%10;

m=m%3600; Time[2]=16; th=m/60; //设置分钟

Time[3]=th/10;

Time[4]=th%10;

m=m%60; Time[5]=16; th=m; //设置秒

Time[6]=th/10;

Time[7]=th%10; a=0;

}

}