鐘錶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語言編寫數字時鐘

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

}

}

51單片機求這個時鐘的c語言程序

以下是四位數碼管可調時帶秒閃爍的c51單片機電子鐘程序(c語言)。

/**** 本程序中,晶振為12MHz, ****/

/**** 時間控制採用定時中斷控制方式。 ****/

/**** 模式和時間調整採用查詢方式。 ****/

#includereg52.h

sbit P20=P2^0; //分個位控制端

sbit P21=P2^1; //分十位控制端

sbit P22=P2^2; //時個位控制端

sbit P23=P2^3; //時十位控制端

sbit led=P2^7; //second display led

sbit key0=P3^0; //模式設置

sbit key1=P3^1; //加

sbit key2=P3^2; //減

unsigned char hour,min,sec,T50ms;

unsigned char modstate; //模式狀態

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//段碼

void init(); //初始化子程序聲明

void delay500us(unsigned char X); //延時子程序聲明

void display(); //顯示子程序聲明

void display001(); //顯示子程序聲明

void display002(); //顯示子程序聲明

void keyscan(); //按鍵識別子程序聲明

void main()

{

init();

while(1)

{

keyscan();

}

}

void init() //初始化子程序

{

TMOD=0x01;

TH0=(65536-49990)/256;

TL0=(65536-49990)%256;

ET0=1;

EA=1;

TR0=1;

}

void delay500us(unsigned char X)

{

unsigned char i,j;

for(i=X;i0;i–)

for(j=248;j0;j–);

}

void timer0() interrupt 1 //timer0中斷服務子程序,定時時間為50ms,本程序加了10us的時間修正量

{

TMOD=0x01;

TH0=(65536-49990)/256;

TL0=(65536-49990)%256;

T50ms++;

if(T50ms=20)

{

T50ms=0;

sec++;

if(sec=60)

{

sec=0;

min++;

if(min=60)

{

min=0;

hour++;

if(hour=24)hour=0;

}

}

}

}

void display()

{

P20=1;

P21=1;

P22=1;

P23=1;

P0=table[hour/10];

P23=0;

delay500us(5);

P20=1;

P21=1;

P22=1;

P23=1;

P0=table[hour%10];

P22=0;

delay500us(5);

P20=1;

P21=1;

P22=1;

P23=1;

P0=table[min/10];

P21=0;

delay500us(5);

P20=1;

P21=1;

P22=1;

P23=1;

P0=table[min%10];

P20=0;

delay500us(5);

if(T50ms=10)led=0;

if(T50ms10)led=1;

}

void display001()

{

P20=1;

P21=1;

P22=1;

P23=1;

P0=table[hour/10];

P23=0;

delay500us(10);

P20=1;

P21=1;

P22=1;

P23=1;

P0=table[hour%10];

P22=0;

delay500us(10);

}

void display002()

{

P20=1;

P21=1;

P22=1;

P23=1;

P0=table[min/10];

P21=0;

delay500us(10);

P20=1;

P21=1;

P22=1;

P23=1;

P0=table[min%10];

P20=0;

delay500us(10);

}

void keyscan() //按鍵識別鍾程序

{

while(modstate==0)

{

display();

if(key0==0)

{

display();

if(key0==0)modstate++; //這兩句加在一起為延時10ms軟體防抖設計。

while(key0==0)display001(); //等待按鍵釋放。

}

}

//****************************************************************************//

while(modstate==1)

{

display001();

if(key0==0)

{

display001();

if(key0==0)modstate++; //這兩句加在一起為延時10ms軟體防抖設計。

while(key0==0)display002(); //等待按鍵釋放。

}

if(key1==0)

{

display001();

if(key1==0)

{

hour++;

if(hour=24)hour=0;

while(key1==0)display001();

}

}

if(key2==0)

{

display001();

if(key2==0)

{

hour–;

if(hour=24)hour=0;

while(key2==0)display001();

}

}

}

//****************************************************************************//

while(modstate==2)

{

display002();

if(key0==0)

{

display002();

if(key0==0)modstate=0; //這兩句加在一起為延時10ms軟體防抖設計。

while(key0==0)display(); //等待按鍵釋放。

}

if(key1==0)

{

display002();

if(key1==0)

{

min++;

if(min=60)min=0;

while(key1==0)display002();

}

}

if(key2==0)

{

display002();

if(key2==0)

{

min–;

if(min=60)min=0;

while(key2==0)display002();

}

}

}

}

用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語言編寫桌面鐘錶啊!

#includemath.h

#includedos.h

#includegraphics.h

#define

CENTERX

320

/*錶盤中心位置*/

#define

CENTERY

175

#define

CLICK

100

/*喀嗒聲頻率*/

#define

CLICKDELAY

30

/*喀嗒聲延時*/

#define

HEBEEP

10000

/*高聲頻率*/

#define

LOWBEEP

500

/*低聲頻率*/

#define

BEEPDELAY

200

/*報時聲延時*/

/*錶盤刻度形狀*/

int

Mrk_1[8]={-5,-160,5,-160,5,-130,-5,-130,

};

int

Mrk_2[8]={-5,-160,5,-160,2,-130,-2-130,

};

/*時針形狀*/

int

HourHand[8]={-3,-100,3,-120,4,

10,-4,10};

/*分針形狀*/

int

MiHand[8]={-3,-120,3,-120,4,

10,-4,10};

/*秒針形狀*/

int

SecHand[8]={-2,-150,2,-150,3,

10,-3,10};

/*發出喀嗒聲*/

void

Click()

{

sound(CLICK);

delay(CLICKDELAY);

nosound();

}

/*高聲報時*/

void

HighBeep()

{

sound(HEBEEP);

delay(BEEPDELAY);

nosound;

}

/*低聲報時*/

void

LowBeep()

{

sound(LOWBEEP);

}

/*按任意角度畫多邊形*/

void

DrawPoly(int

*data,int

angle,int

color)

{

int

usedata[8];

float

sinang,cosang;

int

i;

sinang=sin((float)angle/180*3.14);

cosang=cos((float)angle/180*3.14);

for(i=0;i8;i+=2)

{

usedata[i]

=CENTERX+

cosang*data[i]-sinang*data[i+1]+.5;

usedata[i+1]=CENTERY+sinang*data[i]+cosang*data[i+1]+.5;

}

setfillstyle(SOLID_FILL,color);

fillpoly(4,usedata);

}

/*畫錶盤*/

void

DrawClock(struct

time

*cutime)

{

int

ang;

float

hourrate,minrate,secrate;

setbkcolor(BLUE);

cleardevice();

setcolor(WHITE);

/*

畫刻度*/

for(ang=0;ang360;ang+=90)

{

DrawPoly(Mrk_1,ang,WHITE);

DrawPoly(Mrk_2,ang+30,WHITE);

DrawPoly(Mrk_2,ang+60,WHITE);

}

secrate=(float)cutime-ti_sec/60;

minrate=((float)cutime-ti_min+secrate)/60;

hourrate=(((float)cutime-ti_hour/12)+minrate)/12;

ang=hourrate*360;

DrawPoly(HourHand,ang,YELLOW);/*畫時針*/

ang=minrate*360;

DrawPoly(MiHand,ang,

GREEN);/*畫分針*/

ang=secrate*360;

DrawPoly(SecHand,ang,

RED);/*畫秒針*/

}

main()

{

int

gdriver=EGA,

gmode=EGAHI;

int

curpage;

struct

time

curtime

,newtime

;

initgraph(gdriver,gmode,”c:\\tc”);

setbkcolor(BLUE);

cleardevice();

gettime(curtime);

curpage=0;

DrawClock(curtime);

while(1)

{

if(kbhit())

break;

/*按任意鍵退出*/

gettime(newtime);

/*檢測系統時間*/

if(newtime.ti_sec!=curtime.ti_sec)/*每1秒更新一次時間*/

{

if(curpage==0)

curpage=1;

else

curpage=0;

curtime=newtime;

/*設置繪圖頁*/

setactivepage(curpage);

/*在圖頁上畫錶盤*/

DrawClock(curtime);

/*設置繪圖頁為當前可見頁*/

setvisualpage(curpage);

/*0分0秒高聲報時*/

if(newtime.ti_min==0newtime.ti_sec==0)

HighBeep();

/*

59分55至秒時低聲報時*/

else

if(newtime.ti_min==59

newtime.ti_sec=59)

LowBeep();/*其他時間只發出喀嗒聲*/

else

Click();

}

}

closegraph();

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/288895.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-24 03:01
下一篇 2024-12-24 03:01

相關推薦

  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論