C語言課程設(shè)計(電子時鐘)_第1頁
C語言課程設(shè)計(電子時鐘)_第2頁
C語言課程設(shè)計(電子時鐘)_第3頁
C語言課程設(shè)計(電子時鐘)_第4頁
C語言課程設(shè)計(電子時鐘)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、摘 要就鐘表的演變歷史而言,它大致可以分為3個演變階段,第一,從大型鐘向小型鐘演變;第二,從小型鐘向袋表過渡;第三,從袋表象腕表發(fā)展。每一階段的發(fā)展都和當(dāng)時的技術(shù)發(fā)明有著十分緊密的聯(lián)系,同時它也是各個不同時期的科學(xué)家和鐘表工匠智慧的結(jié)晶。鐘和表通常是以內(nèi)機的大小來區(qū)別的。按國際慣例,機芯直徑超過50mm、厚度超過12mm的為鐘;直徑3750mm、厚度46mm者,稱為懷表;直徑37mm以下為手表;最堅固、最精密的機械之一?,F(xiàn)代鐘表的原動力有機械力和電力兩種。機械鐘表是一種用重錘或彈簧的釋放能量為動力,推動一系列齒輪運轉(zhuǎn),借助調(diào)速器調(diào)節(jié)輪系轉(zhuǎn)速,以指針指示時刻和計量時間的計算器。 在生活進(jìn)步的今天

2、,電子時鐘正成為人們生活的一部分,特別是應(yīng)用在如火車站之類的公共場所,其用途不言而喻。 關(guān)鍵詞: 模擬系統(tǒng); 電子時鐘; 時間修改.目 錄 一. 設(shè)計過程1. 程序功能 . 32 程序設(shè)計 . 3 1)設(shè)計思路 . 3 2)數(shù)據(jù)結(jié)構(gòu) . 3 3)主函數(shù) . 4 4)流程圖 . 4 3 程序運行及分析 . 8 4 運行結(jié)果 . 9二. 源代碼 . 10 1 程序預(yù)處理 . 112. 主函數(shù) . 113. 時鐘動畫處理模塊 . 144時鐘按鍵控制模塊 . 15 5數(shù)字時鐘處理模塊 . 19三. 設(shè)計總結(jié) . 22四. 參考文獻(xiàn) . 23 課程設(shè)計(電子時鐘)一.設(shè)計過程1. 程序功能隨著社會的進(jìn)步

3、和科技的發(fā)展,電子時鐘逐漸成為人們生活中不可缺少的一部分,下面介紹一種電子時鐘的設(shè)計和實現(xiàn)。其基本功能模塊圖如圖2程序設(shè)計電子時鐘 界面顯示模塊按鍵控制模塊時鐘動畫處理模式數(shù)字時鐘模塊 1) 設(shè)計思路程序設(shè)計一般由兩部分組成:算法和數(shù)據(jù)結(jié)構(gòu),合理地選擇和實現(xiàn)一個數(shù)據(jù)結(jié)構(gòu)和處理這些數(shù)據(jù)結(jié)構(gòu)具有同樣的重要性。在電子時鐘程序中,重點和難點在于時、分、秒針坐標(biāo)值得計算和時鐘指針的運行控制,旨在了解c語言圖形模式下的編程,了解系統(tǒng)的繪圖機數(shù)據(jù)結(jié)構(gòu)等方面的知識。利用幾個模塊現(xiàn)實時鐘的運轉(zhuǎn),并可在界面進(jìn)行時間的更改。 2)數(shù)據(jù)結(jié)構(gòu)此程序中,使用了c語言的time結(jié)構(gòu)體和幾個全局變量,結(jié)構(gòu)如下:1).time

4、結(jié)構(gòu)體struct time unsigned char ti_min;/*分鐘*/ unsigned char ti_hour;/*小時*/ unsigned char ti_hund;/*百分之一秒*/ unsigned char ti_sec;/*秒*/2).全局變量double h,m,s;double x,x1,x2,y,y1,y2;struct time t1; 3)主函數(shù)1) keyhandle()2)timeupchange()3) timedownchange()4) digitclock()5)drawcuesor()6) clearcursor()7) void cloc

5、khandle()8) main()4)流程圖 :電子時鐘執(zhí)行主流程圖:進(jìn)入圖形模式繪制主窗體界面繪制電子時鐘界面繪制幫主界面調(diào)用clockhandle()時鐘處理程序 退出程序結(jié)束開始進(jìn)入圖形模式main()函數(shù)定義變量driver,mode=0,i,j;j=431i=470定義圓心坐標(biāo)(0,0,3)i+=39設(shè)置顏色setcolor(15); i=0,m=0,h=0;開始i=11n x=100*sin(h*60+m)y i+;h+; i=0;m=0;i=59nx=100*sin(m/30*pi)+451y m+;j+; setcolor(4); return0; 結(jié)束clockhandle

6、()函數(shù)開始keyhandle()函數(shù):定義變量k=0,count;count=2k!=escti_0 sec.&multiplex定義顏色setcolor(12)setcolor(15)mutiplerkey=upnkey=downy時間上移設(shè)置nkey=tab break時間下移設(shè)置ny setcolor(15)breakbreak調(diào)用時間函數(shù)結(jié)束digitclock函數(shù):char buffer l10clock=60 是否 clock=0sprintf(buffer,”%d”,clock)3程序運行及分析: 1) main()函數(shù)主要實現(xiàn)了對電子時鐘的初始化工作,及clockhandle

7、()函數(shù)的調(diào)用。 main() int driver,mode=0,i,j; driver=detect;/*自動檢測顯示設(shè)備*/ initgraph(&driver,&mode,);/*初始化圖形系統(tǒng)*/ setlinestyle(0,0,3);/*設(shè)置當(dāng)前畫線寬度和類型:設(shè)置三點寬度實線*/ setbkcolor(0);/*用調(diào)色板設(shè)置當(dāng)前背景顏色*/ setcolor(9);/*設(shè)置當(dāng)前畫線顏色*/2) 時鐘的處理模塊主要由clockhndle()函數(shù)來實現(xiàn),借助setwritemode(mode)函數(shù)設(shè)置畫線的方式來實現(xiàn)的。setwritemode(1); for(count=2;k!

8、=esc;) /*開始循環(huán),直至用戶按下esc鍵結(jié)束循環(huán)*/3) 此程序?qū)Π存I進(jìn)行處理、判斷,調(diào)用函數(shù)來實現(xiàn)。void clockhandle() int k=0,count; setcolor(15); gettime(t);/*取得系統(tǒng)時間,保護(hù)在time結(jié)構(gòu)類型的數(shù)組變量中*/int keyhandle(int key,int count) switch(key) case up:timeupchange(count-1); break;4) 調(diào)用下面函數(shù),處理時分秒的位置。修改時間。 void digitclock(int x,int y,int clock)char buffer11

9、0;int digithour(double h)int digitmin(double m)int digitsec(double s) void drawcursor(int count) switch(count)void clearcursor(int count) switch(count)4.運行結(jié)果 運行初始狀態(tài):運行修改后:二. 源碼分析:1 程序預(yù)處理#include#include#include#include#define pi 3.1415926/*定義變量*/#define up 18432/*上移鍵:修改時間*/#define down 20480/*下移鍵:修改

10、時間*/#define esc 283/*esc鍵:退出系統(tǒng)*/#define tab 3849/*tab鍵:移動光標(biāo)*/*函數(shù)聲明*/int keyhandle(int,int); /*鍵盤按鍵判斷,并調(diào)用相關(guān)函數(shù)處理*/int timeupchange(int); /*處理上移按鍵*/ int timedownchange(int);/*處理下移按鍵*/int digithour(double); /*將double型小時數(shù)轉(zhuǎn)換成int型 */ int digitmin(double);/*將double型分鐘數(shù)轉(zhuǎn)換成int型*/int digitsec(double);/*將double

11、型秒鐘數(shù)轉(zhuǎn)換成int型*/ void digitclock(int,int,int);/*在指定位置顯示時鐘或分鐘或秒鐘數(shù)*/void drawcursor(int);/*繪制一個光標(biāo)*/void clearcursor(int);/*消除前一個光標(biāo)*/void clockhandle();/*時鐘處理*/double h,m,s;/*全局變量:小時,分,秒*/double x,x1,x2,y,y1,y2;/*全局變量:坐標(biāo)值*/struct time t1; /*定義一個time結(jié)構(gòu)類型的數(shù)組*/2. 主函數(shù)main()main() int driver,mode=0,i,j; driver

12、=detect;/*自動檢測顯示設(shè)備*/ initgraph(&driver,&mode,);/*初始化圖形系統(tǒng)*/ setlinestyle(0,0,3);/*設(shè)置當(dāng)前畫線寬度和類型:設(shè)置三點寬度實線*/ setbkcolor(0);/*用調(diào)色板設(shè)置當(dāng)前背景顏色*/ setcolor(9);/*設(shè)置當(dāng)前畫線顏色*/ line (82,430,558,430); line (70,62,70,418); line (82,50,558,50); line (570,62,570,418); line (70,62,570,62); line (76,56,297,56); line (340,

13、56,564,56);/*畫主體框架的邊直線*/ /* arc(int x,int y,int stangle,int endangle,int radius */ arc (82,62,90,180,12); arc (558,62,0,90,12); setlinestyle(0,0,3); arc(82,418,180,279,12); setlinestyle(0,0,3); arc(558,418,270,360,12); /*畫主體框架的邊角弧線*/ setcolor (15); outtextxy (300,53,clock);/*顯示標(biāo)題*/ setcolor(7); rect

14、angle(342,72,560,360);/*畫一個矩形,作為時鐘的框架*/ setwritemode(0);/*規(guī)定畫線的方式.mode=0,則表示畫線時將所畫位置的原來信息覆蓋*/ setcolor(15); outtextxy(433,75,clock);/*時鐘的標(biāo)題*/ setcolor(7); line (392,310,510,310); line (392,330,510,330); arc (392,320,90,270,10); arc (510,320,270,90,10);/*繪制電子動畫時鐘下的數(shù)字時鐘的邊框架*/ /*繪制數(shù)字時鐘的時分秒的分隔符*/ setcol

15、or(5); for(i=431;i=470;i+=39) for(j=317;j=324;j+=7) setlinestyle (0,0,3); circle (i,j,1);/*以(x,y)為圓心,1為半徑畫圓*/ setcolor(15);line (424,315,424,325);/*在運行電子時鐘前先畫一個光標(biāo)*/ /*繪制表示小時的圓點*/ for(i=0,m=0,h=0;i=11;i+,h+) x=100*sin(h*60+m)/360*pi)+451; y=200-100*cos(h*60+m)/360*pi); setlinestyle(0,0,3); circle (x,

16、y,1); /*繪制表示分鐘或秒鐘的圓點*/ for(i=0,m=0;i=59;m+,i+) x=100*sin(m/30*pi)+451; y=200-100*cos(m/30*pi); setlinestyle(0,0,1); circle(x,y,1); /*在電子表的左邊打印幫助提示信息*/ setcolor(4); outtextxy(184,125,help); setcolor(15); outtextxy(182,125,help); setcolor(5); outtextxy(140,185,tab:cursor move); outtextxy(140,225,up:ti

17、me+); outtextxy(140,265,down:time-); outtextxy(140,305,esc:quit system!); outtextxy(140,345,version:2.0); setcolor(12); outtextxy(150,400,nothing is more important than time!); clockhandle();/*開始調(diào)用時中處理程序*/ closegraph();/*關(guān)閉圖形系統(tǒng)*/ return 0;/*表示程序正常結(jié)束,向操作系統(tǒng)返回一個0值*/ 3 時鐘動畫處理模塊 void clockhandle() int k=

18、0,count; setcolor(15); gettime(t);/*取得系統(tǒng)時間,保護(hù)在time結(jié)構(gòu)類型的數(shù)組變量中*/ h=t0.ti_hour; m=t0.ti_min; x=50*sin(h*60+m)/360*pi)+451;/*時針x的坐標(biāo)值*/ y=200-50*cos(h*60+m)/360*pi);/*時針y的坐標(biāo)值*/ line(451,200,x,y);/*在電子表中繪制時針*/ x1=80*sin(m/30*pi)+451;/*分針x的坐標(biāo)值*/ y1=200-80*cos(m/30*pi);/*分針y的坐標(biāo)值*/ line(451,200,x1,y1);/*在電子表

19、繪制分針*/ digitclock(408,318,digithour(h);/*在數(shù)字時鐘中,顯示當(dāng)前的小時值*/ digitclock(446,318,digitmin(m);/*在數(shù)字時鐘中,顯示當(dāng)前的分鐘值*/ setwritemode(1); for(count=2;k!=esc;) /*開始循環(huán),直至用戶按下esc鍵結(jié)束循環(huán)*/ setcolor(12);/*淡紅色*/ sound(500);/*以指定頻率打開pc揚聲器,這里頻率為500*/ delay(700);發(fā)一個頻率為hz的音調(diào) sound(200); delay(300); nosound(); s=t0.ti_sec;

20、 m=t0.ti_min; h=t0.ti_hour; x2=98*sin(s/30*pi)+451; y2=200-98*cos(s/30*pi); line(451,200,x2,y2); while(t0.ti_sec=s&t0.ti_min=m&t0.ti_hour=h) gettime(t); if(bioskey(1)!=0) k=bioskey(0); count=keyhandle(k,count); if(count=5) count=1; setcolor(15);digitclock(485,318,digitsec(s)+1);setcolor(12);x2=98*si

21、n(s/30*pi)+451;y2=200-98*cos(s/30*pi);line(451,200,x2,y2);if(t0.ti_min!=m) setcolor(15); x1=80*sin(m/30*pi)+451; y1=200-80*cos(m/30*pi); line(451,200,x1,y1); m=t0.ti_min; digitclock(446,318,digitmin(m); x1=80*sin(m/30*pi)+451; y1=200-80*cos(m/30*pi); line(451,200,x1,y1);if(t0.ti_hour*60+t0.ti_min)!=

22、(h*60+m) setcolor(15); x=50*sin(h*60+m)/360*pi)+451; y=200-50*cos(h*60+m)/360*pi); line(451,200,x,y); h=t0.ti_hour; digitclock(408,318,digithour(h); x=50*sin(h*60+m)/360*pi)+451; y=200-50*cos(h*60+m)/360*pi); line(451,200,x,y); 4 時鐘按鍵控制模塊int keyhandle(int key,int count) switch(key) case up:timeupcha

23、nge(count-1); break; case down:timedownchange(count-1); break; case tab:setcolor(15); clearcursor(count); drawcursor(count); count+; break; return count;int timeupchange(int count) if(count=1) t0.ti_hour+; if(t0.ti_hour=24) t0.ti_hour=0; settime(t); if(count=2) t0.ti_min+; if(t0.ti_min=60) t0.ti_min

24、=0; settime(t); if(count=3) t0.ti_sec+; if(t0.ti_sec=60) t0.ti_sec=0; settime(t); int timedownchange(int count) if(count=1) t0.ti_hour-; if(t0.ti_hour=0) t0.ti_hour=23; settime(t); if(count=2) t0.ti_min-; if(t0.ti_min=0) t0.ti_min=59; settime(t); if(count=3) t0.ti_sec-; if(t0.ti_sec=0) t0.ti_sec=59;

25、 settime(t); 5 數(shù)字時鐘處理模塊void digitclock(int x,int y,int clock)char buffer110; setfillstyle(0,2); bar(x,y,x+15,328); if(clock=60) clock=0; sprintf(buffer1,%d,clock); outtextxy(x,y,buffer1); int digithour(double h) int i; for(i=0;i=23;i+) if(h=i) return i; int digitmin(double m) int i; for(i=0;i=59;i+) if(m=i) return i; int digitsec(double s) int i; for(i=0;i=59;i+) if(s=i) return i; void drawcursor(int count) switch(count) case 1:line(424,315,424,325

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論