Ⅰ C51單片機電子時鍾設計思路
用定時器,設置定時時間為20毫秒,50次累加=1秒,累加秒數據60次=1分,依次類推。每次中斷完成累加和顯示(動態,刷新頻率50HZ,應該不會閃爍)
Ⅱ 關於用51單片機做一個電子時鍾的問題
程序中好像還沒有自動加時的部分,並且按鍵處理還沒有消抖措施
不多說了,上程序,俺剛剛為你編寫的,測試的時候使用的埠和你的不一樣
在我的開發板上測試成功後,按照你的板子埠做了修改
如果你直接復制到你的程序中不能使用,檢查及更改一下埠即可
如果滿意記得採納哦,若有疑問可以隨時向我提問
/***************************************************************************/
//#include<stdio.h>
#include<reg51.h>
sbit p20=P2^0; sbit p21=P2^1; sbit led=P2^7;
char dis_2[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//數碼管顯示編碼
unsigned int h,m,s,t,n;
/***************************************************************************/
void delay(char hs)//延時函數
{char hk;for(;hs>0;hs--){for(hk=100;hk>0;hk--);}}
/***************************************************************************/
void XS(unsigned int xh,unsigned int xs) //顯示子函數
{
char d1,d2,d3,d4;
d1=(xs/1)%10; d2=(xs/10)%10;
d3=(xh/1)%10; d4=(xh/10)%10;
P0=dis_2[d1]; P1=0x08; delay(10); P1=0x00;//秒個位
P0=dis_2[d2]; P1=0x04; delay(10); P1=0x00;//秒十位
P0=0x7f; P1=0x04; delay(10); P1=0x00;//小數點
P0=dis_2[d3]; P1=0x02; delay(10); P1=0x00;//時個位
P0=dis_2[d4]; P1=0x01; delay(10); P1=0x00;//時十位
}
/***************************************************************************/
void main(void)
{
TH0=(65536-1000)/256; TL0=(65536-1000)%256;
TMOD=0x01; EA=1; ET0=1; TR0=1;//定時器初始化
while(1)//主循環
{
if(p20==0){delay(10);if(p20==0){h++;if(h>23){h=0;}}while(!p20){XS(h,m);}}
if(p21==0){delay(10);if(p21==0){m++;if(m>59){m=0;}}while(!p21){XS(h,m);}}
XS(h,m);//調用數碼管顯示函數
}
}
/***************************************************************************/
void int1() interrupt 1 //定時器中斷
{
TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;t++;
if(t>500){t=0;led=~led;}//LED閃爍
if(n>1000){n=0;s++;}//如果達到一秒,秒加一
if(s>59){s=0;m++;}//如果達到一分,分加一
if(m>59){m=0;h++;}//如果達到一小時,小時加一
if(h>23){h=0;}//如果達到24小時,小時清零
}
/***************************************************************************/
Ⅲ 基於51單片機的數碼管設計電子時鍾,可以調時間的,怎麼弄唉,大家幫幫忙...
說一下步驟吧:
1、數碼管驅動電路設計。一般用三極體如9013或者鎖存器如74HC573來驅動,使其能夠正常亮滅。
2、使用動態掃描的方式讓數碼管能夠顯示你想要的數字,這個可以用中斷來掃描也可以不用。
3、使用實時時鍾晶元如DS1302來獲得你想要的時間數據。這種網上有很多源程序,你可以搜索看。你要學會幾點:(1)對晶元初始化;(2)獲得時間數據;(3)知道怎麼修改數據。
4、使用按鍵來修改時間數據。這個方法很多,盡提供參考的。使用三個按鍵,分別是:設置按鍵(這個是復用按鍵,按一次進入設置模式,並讓某一位閃爍,再按則依次讓下一位閃爍,表示被選擇,直到要設置的數字完成再按則確認設置),+鍵和-鍵。這個不僅僅是修改數據那麼簡單,還需要涉及到對DS1302數據的修改,需要關閉DS1302的防寫功能,設置結束後再打開這個功能。
以上字字手打,希望對你有幫助
Ⅳ 哪位大神能幫我寫一個基於單片機C51的電子時鍾設計報告
老師給我的
電子鍾設計
1、 電路圖:
2功能實現:
(1. 把「單片機系統」區域中的P1.0-P1.7埠用8芯排線連接到「動態數碼顯示」區域中的A-H埠上;
(2. 把「單片機系統:區域中的P3.0-P3.7埠用8芯排線連接到「動態數碼顯示」區域中的S1-S8埠上;
(3. 把「單片機系統」區域中的P0.0/AD0、P0.1/AD1、P0.2/AD2埠分別用導線連接到「獨立式鍵盤」區域中的SP3、SP2、SP1埠上;
3、程序框圖:
6. 匯編源程序
HOURK BIT P1.2
MINITEK BIT P1.1
SECONDK BIT P1.0
SECOND EQU 30H
MINITE EQU 31H
HOUR EQU 32H
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
ORG 0030H
START:
MOV SECOND,#00H
MOV MINITE,#00H
MOV HOUR,#12
MOV R0,#00H
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
SETB TR0
NEXT: MOV A,#7FH
MOV P3,A
MOV A,HOUR
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
CALL DELAY
MOV A,#0BFH
MOV P3,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
CALL DELAY
MOV A,#0DFH
MOV P3,A
mov p2,#40h
call delay
mov a,#0efh
mov p3,a
MOV A,MINITE
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
CALL DELAY
MOV A,#0F7H
MOV P3,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
CALL DELAY
MOV A,#0FBH
MOV P3,A
mov p2,#40h
call delay
MOV A,#0FDH
MOV P3,A
MOV A,SECOND
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
CALL DELAY
MOV A,#0FEH
MOV P3,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
CALL DELAY
WT: JB SECONDK,NK1
LCALL DELY10MS
JB SECONDK,NK1
JNB SECONDK,$
INC SECOND
MOV A,SECOND
CJNE A,#60,NK1
MOV SECOND,#00H
NK1: JB MINITEK,NK2
LCALL DELY10MS
JB MINITEK,NK2
JNB MINITEK,$
INC MINITE
MOV A,MINITE
CJNE A,#60,NK2
MOV MINITE,#00H
NK2: JB HOURK,NK3
LCALL DELY10MS
JB HOURK,NK3
JNB HOURK,$
INC HOUR
MOV A,HOUR
CJNE A,#24,NK3
MOV HOUR,#00
NK3:
MOV A,R0
CJNE A,#20,NEXT1
MOV R0,#0
INC SECOND
MOV A,SECOND
CJNE A,#60,NEXT1
MOV SECOND,#0
INC MINITE
MOV A,MINITE
CJNE A,#60,NEXT1
MOV MINITE,#0
INC HOUR
MOV A,HOUR
CJNE A,#24,NEXT1
MOV HOUR,#0
next1:JMP NEXT
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
INT_T0: CLR TR0
INC R0
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
RETI
DELAY:
MOV R6,#2
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DELY10MS:
MOV R6,#10
DD1: MOV R7,#248
DJNZ R7,$
DJNZ R6,DD1
RET
END