導航:首頁 > 操作系統 > 8051單片機數字鍾

8051單片機數字鍾

發布時間:2022-08-01 12:35:58

1. 設計數字時鍾設置兩個按鍵分別調節秒和分 8051單片機 C語言

數碼轉換部分:
main()
{
unsigned int num=3600;
unsigned int j;
while(1)
{j++;
if(j=60)
{j=0;num++;
if(num=3600)
num=0;}
TempData[0]=DuanMa[(num%60)/6];
TempData[1]=DuanMa[(num%60)/10];
TempData[2]=DuanMa[(num%60)/6];
TempData[3]=DuanMa[(num%60)/10];
Display(0,3)
}
}
獨立按鍵部分:
sbit KEY_ADD=P3^3;
#define DataPort P0
sbit Latch1=P2^2;
sbit Latch2=P2^3;
void main(void)
unsigned char num=o;
Key_ADD=1;
while(1)
{
if(!KEY_ADD)
DelayMs(10);
if(!KEY_ADD)
{while(!KEY_ADD)
{if (num<9)num++;}
}
}
定時器部分:
void Init_Timer0(void)
{TMOD|=0x01;
EA=1;ET0=1;TR0=1;
}
void Timer0_isr(void) interrupt 1
{TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
display(0,3);
}
延時部分和單片機的工作頻率有關系,你在自己看一下吧,臨時寫的不一定對,自己在調試一下吧,把這三部分結合起來應該就可以實現了,這樣也可以鍛煉一下,呵呵

2. DS1302晶元和8051單片機做數字鍾

你是需要做硬體電路還是程序,或者程序和硬體電路一起做啊?你這個為什麼需要兩個單片機聯機呢?

3. 用51單片機編程:電子時鍾(設計電子時鍾,用51單片機編程)

如果有問題歡迎到我空間相關文章下留言 樂於回答~~
程序如下:
; 定義管腳
S_SET BIT P1.0 ;數字鍾秒控制位
M_SET BIT P1.1 ;分鍾控制位
H_SET BIT P1.2 ;小時控制位
SECOND EQU 30H
MINUTE EQU 31H
HOUR EQU 32H
ORG 00H
SJMP MAIN
ORG 0BH
LJMP INT_T0
MAIN: MOV DPTR,#TABLE
MOV HOUR,#0 ;初始化
MOV MINUTE,#0
MOV SECOND,#0
MOV R0,#0
MOV TMOD,#01H
MOV TH0,#3CH ; 設置初值(定時50毫秒)
MOV TL0,#0B0H
SETB TR0 ;啟動定時
SETB ET0
SETB EA
;*******************************************************************************
;判斷是否有控制鍵按下
A1: LCALL DISPLAY
JNB S_SET,S1
JNB M_SET,S2
JNB H_SET,S3
LJMP A1
S1: LCALL DELAY ;去抖動
JB S_SET,A1

INC SECOND ;秒值加1
MOV A,SECOND
CJNE A,#60,J0 ;判斷是否加到60秒
MOV SECOND,#0
LJMP K1
S2: LCALL DELAY
JB M_SET,A1

K1: INC MINUTE ;分鍾值加1
MOV A,MINUTE
CJNE A,#60,J1 ;判斷是否加到60分
MOV MINUTE,#0
LJMP K2
S3: LCALL DELAY
JB H_SET,A1

K2: INC HOUR ;小時值加1
MOV A,HOUR
CJNE A,#24,J2 ;判斷是否加到24小時
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
LJMP A1
;****************************************************
;等待按鍵抬起
J0: JB S_SET,A1
LCALL DISPLAY
SJMP J0
J1: JB M_SET,A1
LCALL DISPLAY
SJMP J1
J2: JB H_SET,A1
LCALL DISPLAY
SJMP J2
;***********************************************
;定時器中斷服務程序,對秒,分鍾和小時的計數
INT_T0: MOV TH0,#3CH
MOV TL0,#0B0H
INC R0
MOV A,TCNT
CJNE A,#20,RETUNE ;計時1秒
INC SECOND
MOV R0,#0
MOV A,SECOND
CJNE A,#60,RETUNE
INC MINUTE
MOV SECOND,#0
MOV A,MINUTE
CJNE A,#60,RETUNE
INC HOUR
MOV MINUTE,#0
MOV A,HOUR
CJNE A,#24,RETUNE
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
MOV R0,#0
RETUNE: RETI
;******************************************
;顯示控制子程序
DISPLAY: MOV A,SECOND ;顯示秒
MOV B,#10
DIV AB
CLR P3.6
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.6
MOV A,B
CLR P3.7
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.7
CLR P3.5
MOV P0,#40H ;顯示分隔符
LCALL DELAY
SETB P3.5
MOV A,MINUTE ;顯示分鍾
MOV B,#10
DIV AB
CLR P3.3
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.3
MOV A,B
CLR P3.4
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.4
CLR P3.2
MOV P0,#40H ;顯示分隔符
LCALL DELAY
SETB P3.2
MOV A,HOUR ;顯示小時
MOV B,#10
DIV AB
CLR P3.0
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.0
MOV A,B
CLR P3.1
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
DELAY: MOV R6,#5
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
END
這里的程序沒用38解碼器,若要用則顯示子程序要改
如 要顯示秒,程序如下

DISPLAY: MOV A,SECOND ;顯示秒
MOV B,#10
DIV AB
MOV R7,#60H
ORG A,R7
MOV P0,A
LCALL DELAY
MOV A,B
MOV R7,#70H
ORL A,R7
MOV P0,A
LCALL DELAY
其他的一樣這樣改

4. 51單片機8位數字鍾程序,在線等,急!!!

我嚴重懷疑回答問題的那些人是不是電腦?!

樓主問題是 『51單片機8位數字鍾程序』,然後要求是『要詳細的程序以及模擬圖
上傳壓縮包』。還是給了50懸賞分的。

但問題是這么模糊的提問,回答者是怎麼回答上來的?!

  1. 51單片機有很多種,樓主沒說用什麼類型單片機(別跟我說都一樣,要不要試試winbond和STC)

  2. 8位數字鍾,要用什麼元件還是模塊,功能是什麼樓主沒說(難道隨便亮個數字也行嗎)

  3. 要詳細的程序,樓主也沒說用C語言還是匯編(敢情用python可接受否)

  4. 模擬圖,模擬軟體有很多,樓主沒說要哪個(樓下有人用proteus模擬來回答問題,真是醉了,萬一樓主只需要multisim呢)

  5. 上傳壓縮包,樓主沒說傳到哪裡,是網盤還是哪裡(那些回答者直接回帖回答,對得起那50分嗎)

說多都是淚,不說了,我還是洗洗睡了

5. 單片機80c51電子時鍾怎麼

單片機自20世紀70年代問世以來,以其極高的性能價格比,受到人們的重視和關注,應用很廣、發展很快。而51單片機是各單片機中最為典型和最有代表性的一種。
本次設計以AT89S51晶元為核心,輔以必要的外圍電路,設計了一個簡易的電子時鍾,它由5V直流電源供電。在硬體方面,除了CPU外,使用四個七段LED數碼管來進行顯示,LED採用的是動態掃描顯示,使用74LS14晶元進行驅動。通過LED能夠比較准確顯示時、分。兩個簡單的按鍵實現對時間的調整。軟體方面採用匯編語言編程。整個電子鍾系統能完成時間的顯示,調時,定時鬧鍾,復位等功能。
通過這次設計讓我更深入了解單片機基本電路、如何控制和定時器和中斷編程的基本方法,從而鍛煉了我學習、設計和開發軟、硬體的能力。

Because of its extremely high performance-price ratio, the single-chip computer (SCC) has been paid great attention to ever since it came out in 1970s of 20th Century, and has gained an extensive applicable field and fast development. Among all kinds of SCCs, 51 SCC is the most typical and representative one.
This design, adopting AT89S51 chip as the core part with some necessary peripheral circuits, is a simple electronic clock which uses 5V DC as the power supply. In hardware aspect, besides the CPU, four seven-segment LED digi-tubes are used for display, which work in a dynamically scanning display mode and driven by 74SL14 chip. The LEDs can accurately indicate hour and minute and two buttons can be used to adjust the time. While in the software aspect, the programming language is assembly language. The whole electronic clock system has functions of time display, adjustment, bell-setting and reset, etc.
This design enables me to have greater insight into the basic circuit of SCC, and the basic methods of timer control and interruption programming, so that is a training of my ability of learning, designing and developing software and hardward.

6. 基於8051單片機的數字鍾設計

1602液晶顯示
你的單片機原理圖沒發
程序很依賴硬體的哦
這個程序你查考下,有三個鍵按可以修改時間的。

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit la=P2^6;
sbit wela=P2^7;
sbit rs=P3^5;
sbit lcden=P3^4;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit rd=P3^7;
uchar count,s1num;
char miao,shi,fen;
uchar code table[]=" 2009-5-17 MON"; \\
uchar code table1[]=" 00:00:00"; \\自己設下
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void write_com(uchar com)
{
rs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}

void write_date(uchar date)
{
rs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}

void init()
{
uchar num;
la=0;
wela=0;
lcden=0;
// fen=59;
// miao=53;
// shi=23;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<15;num++)
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<12;num++)
{
write_date(table1[num]);
delay(5);
}
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}

void write_sfm(uchar add,uchar date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
}

void keyscan()
{
rd=0;
if(s1==0)
{
delay(5);
if(s1==0)
{ s1num++;
while(!s1);
if(s1num==1)
{
TR0=0;
write_com(0x80+0x40+10);
write_com(0x0f);
}
}
if(s1num==2)
{
write_com(0x80+0x40+7);
}
if(s1num==3)
{
write_com(0x80+0x40+4);
}
if(s1num==4)
{
s1num=0;
write_com(0x0c);
TR0=1;
}

}
if(s1num!=0)
{
if(s2==0)
{
delay(5);
if(s2==0)
{
while(!s2);
if(s1num==1)
{
miao++;
if(miao==60)
miao=0;
write_sfm(10,miao);
write_com(0x80+0x40+10);

}
if(s1num==2)
{
fen++;
if(fen==60)
fen=0;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
if(s1num==3)
{
shi++;
if(shi==24)
shi=0;
write_sfm(4,shi);
write_com(0x80+0x40+4);
}
}
}
if(s3==0)
{
delay(5);
if(s3==0)
{
while(!s3);
if(s1num==1)
{
/* if(miao==0)
{
miao=59;
write_sfm(10,miao);
write_com(0x80+0x40+10);
}*/
miao--;
if(miao==-1)
miao=59;
write_sfm(10,miao);
write_com(0x80+0x40+10);
}
if(s1num==2)
{
fen--;
if(fen==-1)
fen=59;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
if(s1num==3)
{
shi--;
if(shi==-1)
shi=23;
write_sfm(4,shi);
write_com(0x80+0x40+4);
}
}
}
}
}
void main()
{
init();
while(1)
{
keyscan();

}
// while(1);
}

void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==18)
{
count=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
write_sfm(4,shi);
}
write_sfm(7,fen);
}
write_sfm(10,miao);

}
}

7. 51單片機實現數字時鍾,用四位數碼管實現分計時,顯示分和秒,可以任意設置時間。

1、將分(秒)中的數字位分離
2、控制顯示在相應數碼管
3、數碼管如果採用動態掃描實現,要注意位選和段選
4.更多交流參考我空間文章。

8. 基於8051單片機數字時鍾匯編語言程序

不好意思,現在我正忙著做畢業設計,抽不出時間來給你做這個啊!!!我們做課程設計都不需要調試的,你們怎麼還要求那麼高啊?不好意思!!

9. 利用8051定時器和實驗系統提供的數碼顯示電路,設計一個電子時鍾。拜託各位大神了,我真心做不出來啊

#include <reg51.h> //P0的0~6口控制數碼管位選,P1控制數碼管段選。
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9的編碼
uchar DSY_DATA[]={0,0,0,0,0,0};

uchar flag=0;
uchar hour,minute,second;

void delay(uint t) //延時子程序
{
uint i;
while(t--)
{
for(i=0;i<120;i++);
}
}

void init() //初始化函數
{
hour=0;
minute=0;
second=0;
TMOD=0x01;
TH0=(65536-50000)/256; //50ms定時初值
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}

void main() //主函數
{
init();

while(1)
{
uchar move=0x01,i;
DSY_DATA[0]=second%10;
DSY_DATA[1]=second/10;
DSY_DATA[2]=minute%10;
DSY_DATA[3]=minute/10;
DSY_DATA[4]=hour%10;
DSY_DATA[5]=hour/10;
for(i=0;i<6;i++)
{
P1=move;
move=_crol_(move,1);
P0=DSY_DATA[i];
delay(2);
}
}

}

void TIMER0() interrupt 1
{
if(1==flag++)
{
flag=0;
if(++second==60)
{
second=0;
if(++minute==60)
{
minute=0;
if(++hour==24)
hour=0;
}
}
}
TH0=(65536-50000)/256; //50ms定時初值
TL0=(65536-50000)%256;
}

10. 單片機8051電子時鍾設計

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

將刷新操作放在定時器中斷函數的外面。

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

#include<reg51.h>

#include<stdio.h>

#defineucharunsignedchar

voidtimer0();

voidinit_T0();

voiddelay(uchar);

voiddisplay();

voidconvert();

voidpressKey();

sbitK0=P3^0;

sbitK1=P3^1;

sbitK2=P3^2;

sbitK3=P3^3;

//共陰:0,1,2,3,4,5,6,7,8,9,-

codeunsignedcharLed[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40};

ucharhour,min,sec,dis[8];//存放分鍾,秒鍾,分解後的結果

ucharpos,disPos;

voidmain()

{

hour=12;min=59;sec=50;

convert();

pos=0;

disPos=0xfe;//刷新位置

init_T0();

while(1)

{

display();

pressKey();

delay(1);

}

}

voidpressKey()

{

ucharflag;

if(!K0){

while(!K0);flag=1;

}

if(!K1){

while(!K1);flag=2;

}

if(!K2){

while(!K2);hour=(++hour)%24;flag=3;

}

if(!K3){

while(!K3);hour=(--hour)%24;flag=4;

}

switch(flag)

{

case1:TR0=1;break;

case2:TR0=0;break;

case3:convert();break;

case4:convert();break;

}

}

voidconvert()

{

dis[0]=hour/10;

dis[1]=hour%10;

dis[2]=10;

dis[3]=min/10;

dis[4]=min%10;

dis[5]=10;

dis[6]=sec/10;

dis[7]=sec%10;

}

voiddisplay()

{

//**********刷新點亮8位***********

P2=disPos;//設置點亮的位置,初值為0XFE

P1=Led[dis[pos++]];//點亮

disPos=(disPos<<1)|0x01;//改變點亮的位置

if(pos==8)

{

pos=0;

disPos=0xFE;

}

}

voidinit_T0()

{

TMOD=0x01;

TH0=(65536-50000)/256;//定時50ms

TL0=(65536-50000)%256;

ET0=1;

EA=1;

TR0=1;

}

voidtimer0()interrupt1using1

{

staticucharnum;

num++;

if(num==20)

{

num=0;

sec++;

if(sec==60)

{

sec=0;min++;

if(min==60)

{

min=0;hour++;

if(hour==24)

{

hour=0;

}

}

}

convert();

}

TH0=(65536-50000)/256;//定時50ms

TL0=(65536-50000)%256;

}

voiddelay(ucharn)

{

uchari;

while(n--)

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

}

閱讀全文

與8051單片機數字鍾相關的資料

熱點內容
linux如何下載文件 瀏覽:804
linuxrpm依賴 瀏覽:368
匯率pdf 瀏覽:353
帶分數的演算法思維 瀏覽:115
如何讓伺服器支持asp文件 瀏覽:48
python網站自動簽到腳本 瀏覽:888
程序員和語言框架哪個重要 瀏覽:776
文件伺服器上面有什麼 瀏覽:383
需求不清是程序員面臨的真正挑戰 瀏覽:952
放療有關的演算法 瀏覽:750
java和python交互 瀏覽:647
貴州網路伺服器機櫃雲主機 瀏覽:267
未來番禺程序員待遇 瀏覽:213
安卓安智部落沖突密碼怎麼改 瀏覽:648
http協議單片機 瀏覽:75
pdfdocument 瀏覽:558
gcc編譯vi文件 瀏覽:65
安卓連airpods怎麼找耳機 瀏覽:929
加密貨幣轉賬教程 瀏覽:231
程序員小灰hashmap 瀏覽:840