本文目錄一覽:
時鐘程序(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;
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/205990.html