當前位置:首頁 » 編程軟體 » 編程時鍾秒

編程時鍾秒

發布時間: 2022-10-17 12:08:24

A. 用c語言做數字時鍾每走一秒響一次,求大神告訴源代碼

「響一次」需要牽涉到圖形編程中的音樂播放問題,需要自己下載圖形編程相關庫文件,具體實現請自己在TODO里添加播放音樂的代碼

數字時鍾的實現很簡單,運用time.h相關函數即可

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
time_toldt=-1;
structtm*p;
boolPrintdate()
{
time_tt=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->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);
switch(p->tm_wday)
{
case1:printf("一");break;
case2:printf("二");break;
case3:printf("三");break;
case4:printf("四");break;
case5:printf("五");break;
case6:printf("六");break;
case7:printf("日");break;
}
printf("%d:%02d:%02d",p->tm_hour,p->tm_min,p->tm_sec);
return1;
}
return0;
}
main()
{
while(1)
if(Printdate())
{
/*************TODO*************/
/**Forexample:printf("a");**/
}
return0;
}

B. c++編程 製作一個時鍾,可以顯示小時 分 秒

類自己寫吧,很累,不想寫了

boolsetTime1(inth,intm,ints)//倒計時
{
if((h<0)||(m<0||m>=60)||(s<0||s>=60))
{
printf("Timeseterror! ");
returnfalse;
}

while(h>0||m>0||s>0)
{
printf("%02d:%02d:%02d",h,m,s);

--s;
if(s<0)
{
s=59;
--m;
if(m<0)
{
m=59;
--h;
}
}
Sleep(200);
system("cls");
}
returntrue;
}

boolsetTime2(inth,intm,ints)//正計時
{
inthour=0,min=0,sec=0;

if((h<0)||(m<0||m>=60)||(s<0||s>=60))
{
printf("Timeseterror! ");
returnfalse;
}

while(h!=hour||m!=min||s!=sec)
{
printf("%02d:%02d:%02d",hour,min,sec);

++sec;
if(sec==60)
{
sec=0;
++min;
if(min==60)
{
min=0;
++hour;
}
}
Sleep(1000);
system("cls");
}
returntrue;
}

C. 用plc編程24小時時鍾程序

沒有分沒有寫程序動力,告訴你思路吧
1、OB35
設定1000ms循環
2、在ob35中個累加,並且安分鍾和小時寄存
3、比較,當分鍾的寄存器=30時,繼電器輸出1s
4、分鍾繼存器=0時,寫一段循環程序:當當前小時大於臨時寄存器
進行下面的程序,繼電器的輸出1s和一個臨時寄存器的累加,
當臨時寄存器的累加值大於當前小時,就不進行循環,
5、秒閃爍這個就是500ms輸出,然後弄一個500ms定時器進行不輸出。
就這么多了,很簡單的程序,

D. 單片機編程 秒錶 時鍾計數器的設計

我給你三篇可以做參考,基本內容跟你的差不多,完全一樣就談不上了。
發過去了,請注意查收!

E. c語言怎麼樣編寫一個時鍾程序

c語言時鍾程序代碼如下:

#include<windows.h>

#include<math.h>

#define ID_TIMER 1//計時器ID

#define TWOPI (2*3.14159)

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)

{

static TCHAR szAppName[]=TEXT("Clock");

HWND hwnd;

MSG msg;

WNDCLASS wndclass;

wndclass.cbClsExtra=0;

wndclass.cbWndExtra=0;

wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);

wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);

wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);

wndclass.hInstance=hInstance;

wndclass.lpfnWndProc=WndProc;

wndclass.lpszClassName=szAppName;

wndclass.lpszMenuName=NULL;

wndclass.style=CS_HREDRAW|CS_VREDRAW;

if(!RegisterClass(&wndclass))

{

MessageBox(NULL,TEXT("This program requires Windows

T"),szAppName,MB_ICONERROR);

return 0;

}

hwnd=CreateWindow(szAppName,TEXT("Analog Clock"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);

ShowWindow(hwnd,iCmdShow);

UpdateWindow(hwnd);

while(GetMessage(&msg,NULL,0,0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

void Setsotropic(HDC hdc,int cxClient,int cyClient)

{

SetMapMode(hdc,MM_ISOTROPIC);

SetWindowExtEx(hdc,1000,1000,NULL);

SetViewportExtEx(hdc,cxClient/2,-cyClient/2,NULL);

SetViewportOrgEx(hdc,cxClient/2,cyClient/2,NULL);

}

void RotatePoint(POINT pt[],int iNum,int iAngle)

{

int i;

POINT ptTemp;

for(i=0;i<iNum;i++)

{

ptTemp.x=(int)(pt[i].x*cos(TWOPI*iAngle/360)+pt[i].y*sin(TWOPI*iAngle/360));

ptTemp.y=(int)(pt[i].y*cos(TWOPI*iAngle/360)+pt[i].x*sin(TWOPI*iAngle/360));

pt[i]=ptTemp;

}

}

void DrawClock(HDC hdc)

{

int iAngle;

POINT pt[3];

for(iAngle=0;iAngle<360;iAngle+=6)

{

pt[0].x=0;

pt[0].y=900;

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].y );

}

}

void DrawHands(HDC hdc,SYSTEMTIME *pst,BOOL fChange)

{

static POINT pt[3][5]={0,-150,100,0,0,600,-100,0,0,-150, 0,-200,50,0,0,800,-50,0,0,-200, 0,0,0,0,0,0,0,0,0,800 };

int i,iAngle[3];

POINT ptTemp[3][5];

iAngle[0]=(pst->wHour*30)%360+pst->wMinute/2;

iAngle[1]=pst->wMinute*6;

iAngle[2]=pst->wSecond*6;

memcpy(ptTemp,pt,sizeof(pt));

for(i=fChange?0:2;i<3;i++)

{

RotatePoint(ptTemp[i],5,iAngle[i]);

Polyline(hdc,ptTemp[i],5);

}

}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)

{

static int cxClient,cyClient;

static SYSTEMTIME stPrevious;

BOOL fChange;

HDC hdc;

PAINTSTRUCT ps;

SYSTEMTIME st;

switch(message)

{

case WM_CREATE:

SetTimer(hwnd,ID_TIMER,1000,NULL);

GetLocalTime(&st);

stPrevious=st;

return 0;

case WM_SIZE:

cxClient=LOWORD(lParam);

cyClient=HIWORD(lParam);

return 0;

case WM_TIMER:

GetLocalTime(&st);

fChange=st.wHour!=stPrevious.wHour||st.wMinute!=stPrevious.wMinute;

hdc=GetDC(hwnd);

Setsotropic(hdc,cxClient,cyClient);

SelectObject(hdc,GetStockObject(WHITE_PEN));

DrawHands(hdc,&stPrevious,fChange);

SelectObject(hdc,GetStockObject(BLACK_PEN));

DrawHands(hdc,&st,TRUE);

stPrevious=st;

return 0;

case WM_PAINT:

hdc=BeginPaint(hwnd,&ps);

Setsotropic(hdc,cxClient,cyClient);

DrawClock(hdc);

DrawHands(hdc,&stPrevious,TRUE);

EndPaint(hwnd,&ps);

return 0;

case WM_DESTROY:

KillTimer(hwnd,ID_TIMER);

PostQuitMessage(0);

return 0;

}

return DefWindowProc(hwnd,message,wParam,lParam);

}

F. 用java編程逐行輸出 鍾表一天內三指針重合時間,精確的秒

long base=new GregorianCalendar(0,0,0,0,0,0).getTime().getTime(); 定義一個0毫秒的基數,為了後面使用format做准備。
DateFormat df=new SimpleDateFormat("HH:mm:ss"); 設置格式化的樣式
for循環是安裝一天時間長度的總共有60*60*12*2秒(這個因為要精確到秒),在每個秒長度時間上,分別獲得時針、分鍾和秒針所在表盤的位置(表盤整個圓是60秒)。
然會判斷三個針位置是否是一樣的,如果一樣就輸入該時間。

G. 用C語言編寫秒錶的程序(單片機控制的時鍾設計)

這個程序可以實現秒的計時,按鍵控制開始、暫停、清零功能,更多功能自己在看清程序的基礎上進行改進。
#include <reg51.H>
sbit P3_5 =P3^5;
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};
unsigned char second;
unsigned char keycnt;
unsigned int tcnt;
void main(void)
{
unsigned char i,j;
TMOD=0x02;
ET0=1;
EA=1;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
while(1)
{
if(P3_5==0)
{
for(i=20;i>0;i--)
for(j=248;j>0;j--);
if(P3_5==0)
{
keycnt++;
switch(keycnt)
{
case 1:
TH0=0x06;
TL0=0x06;
TR0=1;
break;
case 2:
TR0=0;
break;
case 3:
keycnt=0;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
break;
}
while(P3_5==0);
}
}
}
}
void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second++;
if(second==100)
{
second=0;
}
P1=dispcode[second/10];
P2=dispcode[second%10];
}
}

H. 易語言什麼讓時鍾運行秒

你先要建立時鍾程序,還要建立標簽,在時鍾程序的屬性最下方寫入1000
代碼:
.版本
2
.程序集
窗口程序集1
.子程序
_時鍾1_周期事件
標簽1.標題

到文本
(取現行時間
())

I. 用匯編語言編寫一個時鍾程序,在微機屏幕上顯示當前時間的時、分、秒。

;*********************************************************
; 帶有時間設置和秒顯示的數字鬧鍾
; Date : 2007.10.26 12MHZ晶振
; Create by :星星 緣木求魚
; P3.2設置鍵 P3.3小時調整鍵 P3.5分鍾調整鍵 P3.7定時輸出指示
;**************************************************************
;*********************************************************
; 變數地址分配
;*********************************************************
SwDelay equ 2; 設置按鍵時去抖動時間
DisplayBuffer equ 30h; 設置顯示緩沖區的地址為30h-35h共6個位元組
BeepVal equ 38h; 蜂鳴時間長短存儲器地址
OneSecondCounter equ 39h; 設置1秒計數器的地址,1秒計數器是用來計數1秒內計時器的中斷次數
Hour equ 3ah; 設置小時計數器的地址
Minute equ 3bh; 設置分鍾計數器的地址
Second equ 3ch; 設置秒計數器的地址
Year equ 3dh; 設置月日年計數器的地址
Month equ 3eh;
Day equ 3fh;
P1Val equ 40h; 設置數碼管位驅動值的地址
ClockMode equ 20h.0; 模式(正常走時/鬧時)設置寄存器地址,值為0時正常走時,為1時鬧時設定
AlarmOnOff equ 20h.1; 鬧鍾開啟/關閉標志,為0關閉,為1開啟
AlarmTimeOn equ 20h.2; 此位為1時表示鬧時時間到
DataMode equ 20h.3
DispHour equ 21h; 設置小時顯示寄存器的地址
DispMinute equ 22h; 設置分鍾顯示寄存器的地址
DispSecond equ 23h; 設置秒顯示寄存器的地址
Dnum equ 24h
AlarmHour equ 2eh; 設置鬧時小時計數器的地址
AlarmMinute equ 2fh; 設置鬧時分鍾計數器的地址
AlarmSetKey bit P3.2; 鬧鍾設置鍵
MinuteKey bit P3.3; 定義分設置鍵
HourKey bit P3.4; 定義小時設置鍵
DataSetKey bit p3.5;
RelayOut equ P3.7; 定義輸出引腳
;**********************************************************************
; 程序開始
;**********************************************************************
org 00h
ajmp Reset ;程序開始
org 0bh ;Timer0中斷向量地址
ajmp TimeInt ;跳到中斷處理程序
org 0020h
Reset: ;以下為初始化程序,為各個變數賦初值
mov sp,#70h;
setb RelayOut
mov OneSecondCounter,#125
;
mov Hour,#23
mov Minute,#59
mov Second,#30 ;設置上電時時鍾顯示的初值
;
mov Year,#07
mov Month,#12
mov Day,#27
;
mov AlarmHour,#00
mov AlarmMinute,#00 ;設置上電時鬧時時間的初值
;
clr AlarmOnOff ;上點復位後鬧時功能處於關閉狀態
clr ClockMode ;正常走時模式
clr AlarmTimeOn
setb RelayOut ;清鬧時輸出
clr DataMode
;
mov 36h,#10
mov 37h,#11
;
;************************************
; Use Timer 0 Mode 1
; 400us interrupt
;************************************
mov tmod,#00000001b
mov th0,#0E3h
mov tl0,#5Dh
mov ie, #82h ;開全局中斷
SETB EA
SETB ET0
setb tr0 ;開定時中斷

;*****************************************
; 以下為主程序
;*****************************************
MainLoop:
jb AlarmSetKey,CheckMinuteKey ;鬧時設置鍵按下了嗎?沒有則轉去檢測秒設置鍵
call Delay
jb AlarmSetKey,CheckMinuteKey ;按下的時間超過500ms嗎?
setb ClockMode ;置為鬧時設置模式
call AlarmSet
CheckMinuteKey:
jb MinuteKey,CheckHourKey ;分設置鍵按下了嗎?沒有則轉去檢測小時設置鍵
;如按下調用蜂鳴器發音程序
mov a,Minute
add a,#1; 如果按下則將分鍾加一 十進制調整
mov Minute,a;
cjne a,#3ch,NotOver1; 到60分鍾了嗎?
mov Minute,#0; 到60分鍾則將分鍾清0
NotOver1: ;以下等待按鍵釋放及防抖動
jnb MinuteKey,$
CheckHourKey:
jb HourKey,CheckDataKey;
; 如按下調用蜂鳴器發音程序
mov a,Hour
add a,#1; 如果按下則將小時加1
mov Hour,a
cjne a,#18h,NotOver2
mov Hour,#0; 到24小時則將小時清0
NotOver2: ;以下等待按鍵釋放及防抖動
jnb HourKey,$
CheckDataKey:
jb DataSetKey,CheckAlarm
call Delay
jb DataSetKey,CheckAlarm
setb DataMode
call Dataset
CheckAlarm:
jnb AlarmTimeOn,ToReturn
call AlarmProcess
ToReturn:
ajmp MainLoop
;**********************************************
; 定時器Timer0中斷服務程序(此程序每8ms執行一次)
;**********************************************
TimeInt:
mov th0,#0E3h; 重新載入定時參數
mov tl0,#5Dh;
push acc
push psw; 保護累加器及程序狀態字的內容
setb rs0; 選擇工作寄存器組1,
clr rs1; 這樣可保護原工作寄存器組(0組)的內容
djnz OneSecondCounter,NotoneSecond; 中斷了125次了嗎?即夠1秒了嗎?
mov OneSecondCounter,#125; 如夠1秒則重新設置"OneSecondCounter"計數器
call Clock ; 調用將時鍾內容加1秒的子程序
call Daynum
call ConvertoBuffer ; 調用將時鍾內容轉換到顯示緩沖區子程序
NotoneSecond:
call ScanDisplay ; 調用掃描顯示子程序
pop psw
pop acc ; 恢復累加器及程序狀態字的內容
reti ; 中斷返回
;*********************************************
; 掃描顯示子程序
;*********************************************
ScanDisplay:
MOV R1,#DisplayBuffer ;指向顯示數據首址
MOV R5,#0FEH ;掃描控制字初值
PLAY:
MOV A,R5 ;掃描字放入A
MOV P2,A ;從P2口輸出
MOV A,@R1 ;取顯示數據到A
MOV DPTR,#TAB ;取段碼表地址
MOVC A,@A+DPTR ;查顯示數據對應段碼
MOV P1,A ;段碼放入P1口

LCALL Delay

INC R1 ;指向下一地址
MOV A,R5 ;掃描控制字放入A
JNB ACC.7,ENDOUT ;掃到第六位時結束
RL A ;A中數據循環左移
MOV R5,A ;放回R5內
AJMP PLAY ;跳回PLAY循環
ENDOUT: MOV P2,#0FFH ;一次顯示結束,P2口復位
MOV P1,#00H ;P1口復位
RET ;子程序返回
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,39h
;共陰段碼表 "0""1""2" "3""4""5""6""7" "8""9""-""c"
;****************************************************
; 時鍾內容加1秒的子程序
;****************************************************
Clock:
mov a,Second; 將原秒值送入a
add a,#1; 加1秒

mov Second,a
cjne a,#3cH,NotOverFlow; 夠60秒了嗎?
mov Second,#0; 夠了則將秒值清0
;
mov a,Minute
add a,#1
mov Minute,a; 分鍾加1
cjne a,#3cH,NotOverFlow; 夠60分了嗎?
mov Minute,#0; 夠了則將分值清0
;
mov a,Hour
add a,#1
mov Hour,a; 小時加1
cjne a,#18H,NotOverFlow; 夠24小時嗎?
mov Hour,#0; 夠了則將小時值清0
;
mov a,Day
add a,#1
mov Day,a
cjne a,Dnum,NotAlarm
mov Day,#1
;
mov a,Month
add a,#1
mov Month,a
cjne a,#13,NotAlarm
mov Month,#1
;
mov a,Year
add a,#1
mov Year,a
cjne a,#11,NotAlarm
mov Year,#0
NotOverFlow:
jnb AlarmOnOff,NotAlarm; 鬧鍾開啟了嗎?如沒有開啟則無需理會是否到鬧時時間
mov a,Second
jnz NotAlarm; 秒為零嗎?
mov a,Minute
cjne a,AlarmMinute,NotAlarm; 時間分鍾值和鬧時設置分鍾值相等嗎?
mov a,Hour
cjne a,AlarmHour,NotAlarm; 時間小時值和鬧時設置小時值相等嗎?
setb AlarmTimeOn; 到了鬧時時間則將「鬧時時間到」標志設為1
NotAlarm:
ret

;**************************************************************************
; 將時鍾內容或鬧時設置值轉換到顯示緩沖區子程序
;**************************************************************************
ConvertoBuffer:
mov r1,#DisplayBuffer
jnb dataMode,TimeDisp
mov a,Day
mov DispSecond,a
mov a,Month
mov DispMinute,a
mov a,Year
mov DispHour,a
ajmp Convert
TimeDisp: jb ClockMode,DispAlarmSet; 判斷時鍾模式,以決定是顯示實時時間還是鬧時時間
mov a,Second;
mov DispSecond,a;
mov a,Minute;
mov Dispminute,a;
mov a,Hour;
mov DispHour,a; 顯示實時時間
;
ajmp Convert
DispAlarmSet:
jb AlarmOnOff,AlarmOn
mov DispSecond,#00h
ajmp Next
AlarmOn:
mov DispSecond,#11; 顯示鬧時時間及顯示鬧鍾狀態:顯示「00」表示關閉鬧鍾,
Next: ;「11」表示開啟鬧鍾
mov a,AlarmMinute;
mov Dispminute,a;
mov a,AlarmHour;
mov DispHour,a;
;
Convert:
mov a,DispSecond; 取秒值
mov b,#10
div ab
mov @r1,b;
inc r1; 緩沖寄存器的地址加1
mov @r1,a; 將秒值的十位值存入緩沖區
;
inc r1
mov a,DispMinute
mov b,#10
div ab
mov @r1,b;
inc r1; 緩沖寄存器的地址加1
mov @r1,a; 將秒值的十位值存入緩沖區
;
inc r1
mov a,DispHour
mov b,#10
div ab
mov @r1,b;
inc r1; 緩沖寄存器的地址加1
mov @r1,a; 將秒值的十位值存入緩沖區
ret;
;*******************************************************
;天數判斷,平年,閏年
;*******************************************************
Daynum: mov a,Month
mov dptr,#TABL
movc a,@a+dptr
mov Dnum,a
mov a,Year
mov b,#4
div ab
mov a,b
cjne a,#0,BB
mov a,Month
cjne a,#2,BB
inc Dnum
BB: RET
TABL: DB 31,32,29,32,31,32,31,32,32,31,32,31,32

;**************************************************
; 鬧時設置子程序
;**************************************************
AlarmSet:
jnb AlarmSetKey,$
call Delay; 等待「AlarmSetKey」鍵釋放
CheckArmMinuteKey: ;
jb MinuteKey,CheckArmHourKey; 分設置鍵按下了嗎?沒有則轉去檢測小時設置鍵
setb AlarmOnOff
mov 37h,#0
mov a,AlarmMinute
add a,#1; 如果按下則將分鍾加1 十進制調整
mov AlarmMinute,a;
cjne a,#3ch,ArmNotOver1; 到60分鍾了嗎?
mov AlarmMinute,#0; 到60分鍾則將分鍾清0
ArmNotOver1: ;以下等待按鍵釋放及防抖動
jnb MinuteKey,$
CheckArmHourKey:
jb HourKey,AlarmSetEnd; 小時設置鍵按下了嗎?沒有則返回反復檢測
setb AlarmOnOff
mov a,AlarmHour
add a,#1; 如果按下則將小時加1
mov AlarmHour,a
cjne a,#18h,ArmNotOver2
mov AlarmHour,#0; 到24小時則將小時清0
ArmNotOver2: ;以下等待按鍵釋放及防抖動
jnb HourKey,$
AlarmSetEnd:
jb AlarmSetKey,AlarmSet; 設置完畢了嗎?
jnb AlarmSetKey,$;
clr ClockMode; 從設置模式轉為走時模式
ret
;*********************************************
; 日期調整
;*********************************************
DataSet:
jnb DataSetKey,$
call Delay
CheckDataYearKey:
jb HourKey,CheckDataMonthKey
mov a,Year
add a,#1
mov Year,a
cjne a,#11,DataNotOver1
mov Year,#0
DataNotOver1:
jnb HourKey,$
CheckDataMonthKey:
jb MinuteKey,CheckDataDayKey
mov a,Month
add a,#1
mov Month,a
cjne a,#13,DataNotOver2
mov Month,#1
DataNotOver2:
jnb MinuteKey,$
CheckDataDayKey:
jb AlarmSetKey,DataSetEnd
mov a,day
add a,#1
mov Day ,a
cjne a,Dnum,DataNotOver3
mov Day,#1
DataNotOver3:
jnb AlarmSetKey,$
DataSetEnd:
jb DataSetKey,DataSet
jnb DataSetKey,$
clr DataMode
ret

;**************************************************
; 鬧時服務子程序
;**************************************************
AlarmProcess:
clr RelayOut;
jb AlarmSetKey,AlarmReturn; 停止鬧時鍵(即鬧時設置鍵)按下了嗎?
clr AlarmOnOff
jnb AlarmSetKey,$;
setb RelayOut; 如停止鬧時鍵按下則停止鬧時
clr AlarmTimeOn;
mov 37h,#11
mov AlarmMinute,#00
mov AlarmHour,#00
AlarmReturn:
ret
;**************************************************
; 延時子程序
;**************************************************
Delay:
mov r6,#2
Del:
mov r7,#124
djnz r7,$
djnz r6,Del
ret
DL1s: mov r3,#4
dd: call Delay
djnz r3,dd
ret
end

J. 怎麼用C語言編程數字時鍾

1、以下常式實現時鍾的實時顯示基本要求: 1) 自行設計界面,模擬表盤式時鍾。要求界面美觀,清晰。2)數字同步顯示時間信息。


2、常式:

#include<graphics.h>
#include<math.h>
#include<dos.h>
#definePI3.1415926
//屏幕中心的坐標(640X480模式下)
#definemid_x320
#definemid_y240
intmain()
{intgraphdriver=DETECT,graphmode;
intend_x,end_y;
structtimecurtime;
floatth_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屏幕,即返迴文本方式
return0;
}
熱點內容
c語言字元串初始化 發布:2025-05-17 20:18:43 瀏覽:35
安卓融e聯推送需要什麼許可權 發布:2025-05-17 20:18:39 瀏覽:268
我的世界無限武魂伺服器 發布:2025-05-17 20:17:09 瀏覽:371
安卓手游腳本語言 發布:2025-05-17 19:53:07 瀏覽:21
找圈演算法 發布:2025-05-17 19:49:19 瀏覽:410
資料庫的存取方法 發布:2025-05-17 19:48:36 瀏覽:125
androidapp測試 發布:2025-05-17 19:48:19 瀏覽:389
如何修改iphone密碼修改 發布:2025-05-17 19:47:31 瀏覽:509
發現了致富密碼是什麼意思 發布:2025-05-17 19:45:42 瀏覽:416
耐存儲的紙 發布:2025-05-17 19:43:35 瀏覽:931