怎么使用C语言制作一个时钟?

怎么使用C语言制作一个时钟?如果限定使用的是turboc,怎么制作。有可视化的麻烦给我完整的程序,没有的话只要是时钟就行,有几步要几步。

第1个回答  2008-10-26
这个也是我在别的地方找到的
很好的
#include "stdio.h"
#include "graphics.h"
#include "math.h"
#include "time.h"
#include "dos.h"
#define r 200
#define pi 3.1415926
#define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300; /*遇到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; /*遇到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) /*宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换*/
/*
那么就是当执行d(200,12,6)时 相当于写了3句话
首先X(a,b,c) 也就是X(200,12,6) 这时计算x=200*cos(12*6*pi/180-pi/2)+300
也就是计算出了 以半径为200,度数为12 步长为6 (实际上就是72度 但是这里又减去了pi/2 也就是72-45=27度)
的那点的横坐标 也就是x的数值
然后执行Y(a,b,c)也就是Y(200,12,6)这时计算y=200*sin(12*6*pi/180-pi/2)+240
也就是计算出了 以半径为200,度数为12 步长为6 (实际上就是72度 但是这里又减去了pi/2 也就是72-45=27度)
的那点的纵坐标 也就是y的数值
最后是 line(300,240,x,y) 也就是 画线 这样指针就出来了
那么这里第一个参数是设置半径长度 第二个参数是设置度数 第三个参数是设置步长(度数)
*/
main()
{
int x=300,y=240,bx,by,bx1,by1,bx2,by2,bx3,by3,jd,i,j,k,h1,m1,hc=0,l,ax,ay,n,p=0;
char b[]={'I',' ',' ',' ',' ','L','o','v','e',' ',' ',' ',' ','Y','o','u'};
int driver=VGA,mode=VGAHI; /*定义图形驱动器*/
int h,m,s; /*定义时针hour 分针minute 秒针second*/
struct time t[1]; /*定义一个结构体名为time的数组,只有一个成员t[0]*/
initgraph(&driver,&mode,""); /*设置图形驱动器*/
setbkcolor(0); /*设置背景色为黑色*/
for(n=0;n<=27;n++)

printf("\n");
for(n=0;n<=29;n++)
printf(" ");
setcolor(14); /*设置前景色为黄色*/
circle(x,y,r); /*以300,240,半径为200画大圆*/
setcolor(12); /*设置前景色为洋红色*/
circle(x,y,190); /* 内部小圆*/
/*设置填充样式及颜色*/
setfillstyle(SOLID_FILL,14); /*实心填充*/
floodfill(x,y,12); /* 填充表盘 填充色为洋红(12) */
setfillstyle(SOLID_FILL,13); /*实心填充*/
floodfill(1,1,14);
setcolor(2); /*设置为绿色*/
/*画表心*/
circle(x,y,2); /*表心小圆*/
circle(x,y,5); /*表心大圆*/
/*眼睛*/
ellipse(x-80,y-70,0,360,23,65); /*左 外面的椭圆*/
ellipse(x+80,y-70,0,360,23,65); /*右 外面的椭圆*/
ellipse(x-80,y-60,0,180,23,23); /*左 里面的椭圆*/
setfillstyle(SOLID_FILL,0); /*实型填充 填充颜色为黑色*/
floodfill(x-80,y-60,2); /*填充颜色 绿色*/
ellipse(x+80,y-60,0,180,23,23); /*右 里面的椭圆*/
setfillstyle(SOLID_FILL,0); /*实型填充 填充颜色为黑色*/
floodfill(x+80,y-70,2); /*填充颜色 绿色*/
/* outtextxy(225,380,"EmBEdDed 06241 ShiwU");
outtextxy(245,400,"MaDE In HuaXiA"); */

/*六个胡子*/
setcolor(5); /* 粉红色 */
line(x-120,y+70,x-250,y+90);
line(x-120,y+90,x-250,y+110);
line(x-120,y+110,x-250,y+130);
line(x+120,y+70,x+250,y+90);
line(x+120,y+90,x+250,y+110);
line(x+120,y+110,x+250,y+130);
/*画耳朵*/
arc(150,80,0,360,60); /*画圆弧(此处完全可以用圆来代替)*/
setfillstyle(SOLID_FILL,14); /*填充色黄色*/
floodfill(150,80,5);
arc(450,80,0,360,60);
setfillstyle(SOLID_FILL,14);
floodfill(450,80,5);
setcolor(14); /*擦除内部圆弧痕迹*/
arc(150,80,0,360,60);
arc(450,80,0,360,60);
/*画嘴*/
setcolor(0);
ellipse(x,y+60,160,340,23,23); /*用圆弧画嘴*/
/*画侧脸*/
circle(x+120,y+10,23); /*前景色为0 侧面的圆圈*/
setfillstyle( SOLID_FILL,12); /*实型填充 颜色为12 淡洋红*/
floodfill(x+120,y+10,0); /*以侧面的圆心为中心 边缘颜色为0 白色 进行对封闭图形的填充*/
setcolor(14); /*设置前景色为黄色 清除内部圆弧痕迹*/
circle(x+120,y+10,23); /*重新画小圈*/
setcolor(0); /*前景色为0 侧面的圆圈*/
circle(x-120,y+10,23); /*以下同上*/
setfillstyle( SOLID_FILL,12);
floodfill(x-120,y+10,0);
setcolor(14);
circle(x-120,y+10,23);

ellipse(x,y+60,0,180,23,23);
for(i=0;i<60;i++)
{if(i%5==0) l=15;
else l=5;
ax=200*cos(i*6*pi/180)+300;
ay=200*sin(i*6*pi/180)+240;
bx=(200-l)*cos(i*6*pi/180)+300;
by=(200-l)*sin(i*6*pi/180)+240;
line(ax,ay,bx,by);

}
setwritemode(1); /*这句无敌了*/

gettime(t); /*得到系统时间给数组t实际上就是给了t[0]*/
h=t[0].ti_hour; /*时针数值给h*/
m=t[0].ti_min; /*分针数值给m*/
s=t[0].ti_sec;
/*秒针数值给s*/
setcolor(7); /*设置前景色为7 淡灰色*/
/*第一个参数是设置半径长度 第二个参数是设置起始度数 第三个参数是设置步长(度数)*/
d(150,h,30); /*以半径为150,h为起始度数,步长为30度,时针总共一圈才走12下*/
setcolor(14); /*设置分针颜色 1 蓝色*/
d(170,m,6); /*以半径170,m为起始度数,步长为6度,分针一圈走60下*/
setcolor(4); /*设置秒针颜色 4 红色*/
d(190,s,6); /*以半径190,s为起始度数,步长为6度,秒针一圈走60下*/
while(!kbhit()) /*当不敲击键盘时候一直循环*/
{

while(t[0].ti_sec==s) /*判断当前系统时间是否与刚才得到的秒时间相等,一定相等,没有刷新系统时间*/
gettime(t);
setcolor(4);
d(190,s,6); /*所以重新刷新系统时间*/
s=t[0].ti_sec;
setfillstyle(SOLID_FILL,13); /*实心填充*/
floodfill(1,380,14);
if(p<=15)
{ setbkcolor(hc); printf("%c",b[p]); }
else
setbkcolor(0);
p++;
setcolor(4); /*设置秒针颜色为2 绿色*/
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);
}
setcolor(hc++);
if(hc==12)
hc=0;
ellipse(300,300,160,340,23,23);

/*眼睛*/
ellipse(220,170,0,360,23,65);
ellipse(380,170,0,360,23,65);
ellipse(220,180,0,180,23,23);
ellipse(380,180,0,180,23,23);

arc(150,80,20,250,59);
arc(450,80,-70,165,59);

}

getch();
}本回答被提问者采纳

c语言怎么样编写一个时钟程序
RotatePoint(pt,1,iAngle);pt[2].x=pt[2].y=iAngle%5?33:100;pt[0].x-=pt[2].x\/2;pt[0].y-=pt[2].y\/2;pt[1].x=pt[0].x+pt[2].x;pt[1].y=pt[0].y+pt[2].y;SelectObject(hdc,GetStockObject(BLACK_BRUSH));Ellipse(hdc,pt[0].x,pt[0].y,pt[1].x,pt[1...

求一个关于用C语言编写的电子时钟的程序,内容要有闹钟,可以调整时间...
sbit key1=P0^1; \/\/ 小时调整 sbit P2_0=P2^7; \/\/秒 指示灯 sbit MN_RXD=P3^6;sbit MN_TXD=P3^7;uchar data CLOCK[4]={0,0,0,12};\/\/存放时钟时间(百分秒,秒,分,和时位)\/\/数码管显示表0-f 灭 uchar code TABLE[]={0xBE,0x06,0xEA,0x6E,0x56,0x7C,0xFC,0x...

用c语言模拟一个数字时钟,要求延时一秒运行
1、用sleep延时刷新并获取系统时间来显示。2、例程:include<graphics.h> #include<math.h> #include<dos.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 ...

用C语言编一个数字电子时钟的程序
1.textmode函数在turboc中没有办法使用,不知道是什么问题,而borland c就可以。2.无论怎么设置,自己的ctrlbreak函数在上述两个环境中都不能被调用,非常遗憾。所以不能够优雅的退出。只能按两次ctrlbreak。下面是程序。---#include <stdio.h>#include <stdlib.h>#include <stdio.h>#include <conio.h>#include ...

用c语言循环语句怎么写一个51单片机的时钟啊,用8个数码管显示时间...
6]=hour%10;disdat[7]=hour\/10; }void flash(){switch(flashbit){case 0:break;case 1:disdat[6]=0x10;disdat[7]=0x10;delay(50);dischg();delay(80);break;case 2:disdat[3]=0x10;disdat[4]=0x10;delay(50);dischg();delay(80);break;case 3:disdat[0]=0x10;disdat[1]...

用C语言做数字时钟每走一秒响一次,求大神告诉源代码
数字时钟的实现很简单,运用time.h相关函数即可 include<stdio.h>#include<stdlib.h>#includetime_t oldt=-1;struct tm *p;bool Printdate(){time_t t=time(NULL);if(t!=oldt){oldt=t;p=localtime(&t);system("cls");printf("%d\/%d\/%d 周",1900+p->tm_year,1+p->tm_mon,p->t...

单片机C语言该怎么编写时钟程序?
这个是简单的数码管时钟显示如果有需要,我写过比较完善的1602显示时钟.显示控制年月日等等.#include<reg51.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,0x...

c语言如何用字符拚一个时钟
+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)...

用c语言编一个时钟程序实现时分秒计时功能
int main(){ time_t t1,t2;struct tm *ptm;char timestr[128]={'\\0'};time(&t1);while(1){ time(&t2);if(difftime(t2,t1)>=1){ system("cls");ptm=localtime(&t2);strftime(timestr,128,"%H:%M:%S",ptm);printf("%s\\n",timestr);t1=t2;} } system("PAUSE");return 0...

c语言 时钟模拟
\/\/画出钟的外圆(即是轮廓)setcolor(11);circle(300,200,152);setcolor(3);circle(300,200,157);\/\/画出60个分钟刻度 for(i=0;i<60;i+=1){ if(i%5==0) l=140;else l=145;line(300+150*sin(i*PI\/30),200-150*cos(i*PI\/30),300+l*sin(i*PI\/30),200-l*cos(i*PI\/30...

相似回答