時鍾程序編程
❶ VB程序設計怎麼做數字時鍾
1、添加一個「label控制項」命名為label
2、添加一個「timer控制項」命名為timer1
3、設置「timer1」的「Interval屬性」為1000
使用到的代碼:
DimHourAsInteger'小時
DimMinAsInteger'分鍾
DimSecAsInteger'秒
PrivateSubForm_Load()
Hour=0
Min=0
Sec=0
Label1.Caption="00:00:00"
EndSub
PrivateSubTimer1_Timer()
DimstrHourAsString
DimstrMinAsString
DimstrSecAsString
Sec=Sec+1
IfSec>=60Then
Sec=0
Min=Min+1
IfMin>=60Then
Min=0
Hour=Hour+1
IfHour>=24Then
Hour=0
EndIf
EndIf
EndIf
IfHour<10Then
strHour="0"&Hour
Else
strHour=Hour
EndIf
IfMin<10Then
strMin="0"&Min
Else
strMin=Min
EndIf
IfSec<10Then
strSec="0"&Sec
Else
strSec=Sec
EndIf
Label1.Caption=strHour&":"&strMin&":"&strSec
EndSub
❷ 用51單片機實現時鍾功能程序
anEQUP0;
weiEQUP2;
keyBITP3.7;
ORG0000H
AJMPMAIN;絕對轉移指令,2kb范圍(11位)內跳轉LJMP16位64kb范圍內跳轉
;短轉移指令的功能是先使程序計數器PC加1兩次(即:取出指令碼),然後把加2後的地址和rel相加作為目標轉移地址。因此,短轉移指令是一條相對轉移指令,是一條雙位元組雙周期指令
ORG0030H;指明後面的程序從程序存儲器的0030H單元開始存放
DELAY200US:;@11.0592MHz
NOP
NOP
NOP
PUSH30H
PUSH31H
MOV30H,#2
MOV31H,#179
NEXT:
DJNZ31H,NEXT
DJNZ30H,NEXT
POP31H
POP30H
RET
ORG0060H
;DISPLAY子程序
DISPLAY:
PUSHACC;不能寫A,此處ACC代表地址,push後跟地址,代表把地址內的內容壓入棧中
PUSH00H;R0
PUSH06H;R6
PUSH07H;R7
PUSH83H;DPH
PUSH82H;DPL
MOVR6,#01H;位選數據,01指的是緩沖區最低位數據
MOVR7,#08H;循環次數
FLAG:
MOVan,#0x00;消影
MOVA,R6
CPLA;取反
MOVwei,A;位選
MOVA,#disBufDat
ADDA,R7
SUBBA,#0X08
MOVR0,A
MOVA,@R0;讀出要顯示的數據到A
MOVDPTR,#disTab
MOVCA,@A+DPTR;從rom取數據,取出要顯示的數據對應的段碼
MOVan,A;段選
MOVA,R6
RLA
MOVR6,A;更新下一次位選
LCALLDELAY200US
DJNZR7,FLAG
POP82H;DPL
POP83H;DPH
POP07H
POP06H
POP00H
POPACC
RET
ORG0100H
;定時器中斷0初始化
T0_INIT:
MOVTMOD,#0X01
MOVTH0,#0X3C
MOVTL0,#0XB0
SETBEA
SETBTR0
SETBET0
RET
ORG0130H
;T0中斷處理程序
INT_TIMERE0:
PUSHACC
SETBRS0
MOVTH0,#0X3C
MOVTL0,#0XB0
INCR0
MOVA,R0
SUBBA,#0X14
JBCY,SECFLAG
MOVR0,#0x00
INCsec
SECFLAG:
CLRRS0
POPACC
RETI
ORG000BH;定時器/計數器T0入口地址
LJMPINT_TIMERE0;跳轉到定時器/計數器中斷服務程序中去
disTab:DB0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40;0-f,空白,橫杠的段選數據
disBufDatEQU47H;定義顯示緩沖數據變數區,8個
disBufDatHeadEQU40H//單片機上顯示在最左邊
secEQU48H
;主程序
ORG0180H
MAIN:
MOVSP,#0X60;將0x60到0x7f設為堆棧區
LCALLT0_INIT
MOVdisBufDatHead,#0X00
MOVdisBufDatHead+1,#0X00
MOVdisBufDatHead+2,#0X11
MOVdisBufDatHead+3,#0X11
MOVdisBufDatHead+4,#0X11
MOVdisBufDatHead+5,#0X11
MOVdisBufDatHead+6,#0X11
MOVdisBufDatHead+7,#0X11
MOVsec,#0X3A
WHILE:
JBkey,KEYSCAN
MOVsec,0x00
KEYSCAN:
MOVA,sec
SUBBA,#3CH;超過60s歸零
JBCY,CLEAR
MOVsec,#0X00;clr加ram地址無效
CLEAR:
MOVA,sec
MOVB,#0AH
DIVAB;A/B,商存到A中,余數存B中
MOVdisBufDatHead,A
MOVdisBufDatHead+1,B
LCALLDISPLAY
LJMPWHILE;循環
END;

(2)時鍾程序編程擴展閱讀
51機器周期和指令周期
1、機器周期是指單片機完成一個基本操作所花費的時間,一般使用微秒來計量單片機的運行速度,51單片機的一個機器周期包括12個時鍾振盪周期,也就是說如果51單片機採用12MHz晶振,那麼執行一個機器周期就只需要1μs;如果採用的是6MHz的晶振,那麼執行一個機器周期就需要2μs。
2、指令周期是指單片機執行一條指令所需要的時間,一般利用單片機的機器周期來計量指令周期。在51單片機里有單周期指令(執行這條指令只需一個機器周期),雙周期指令(執行這條指令只需要兩個機器周期),四周期指令(執行這條指令需要四個機器周期)。
除了乘、除兩條指令是四周期指令,其餘均為單周期或雙周期指令。也就是說,如果51單片機採用的是12MHz晶振,那麼它執行一條指令一般只需1~2微秒的時間;如果採用的是6MH晶振,執行一條指令一般就需2~4微秒的時間。
❸ 怎麼用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;
}
❹ 誰能告訴我51單片機簡單的led數碼管時鍾程序 24小時制的(c語言版的)
#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar shi,fen,miao;
uchar time;
void delay(uint x)
{
uint y;
for(;x>0;x--)
{
for(y=0;y<124;y++);
}
}
void display(uchar shi,uchar fen,uchar miao)
{
P2=0; //位碼
P0=(tab[shi/10]); //段碼
delay(2);
P2=1;
P0=(tab[shi%10]);
delay(2);
P2=2; //位碼
P0=0x40; //段碼
delay(2);
P2=3; //位碼
P0=(tab[fen/10]); //段碼
delay(2);
P2=4;
P0=(tab[fen%10]);
delay(2);
P2=5; //位碼
P0=0x40; //段碼
delay(2);
P2=6; //位碼
P0=(tab[miao/10]); //段碼
delay(2);
P2=7;
P0=(tab[miao%10]);
delay(2);
}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
if(time==20)
{
time=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
}
}
}
display(shi,fen,miao);
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
}
/*還有什麼不明白繼續追加*/
