0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用單片機(jī)實(shí)現(xiàn)數(shù)字鐘的設(shè)計(jì)說明

Wildesbeast ? 來源:?jiǎn)纹瑱C(jī)教程網(wǎng) ? 作者:h1654155169.2086 ? 2020-05-05 11:44 ? 次閱讀

1.實(shí)驗(yàn)任務(wù)

(1. 開機(jī)時(shí),顯示12:00:00的時(shí)間開始計(jì)時(shí);

(2. P0.0/AD0控制“秒”的調(diào)整,每按一次加1秒;

(3. P0.1/AD1控制“分”的調(diào)整,每按一次加1分;

(4. P0.2/AD2控制“時(shí)”的調(diào)整,每按一次加1個(gè)小時(shí);

2.電路原理

圖4.20.1

3.系統(tǒng)板上硬件連線

(1. 把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0-P1.7端口用8芯排線連接到“動(dòng)態(tài)數(shù)碼顯示”區(qū)域中的A-H端口上;

(2. 把“單片機(jī)系統(tǒng):區(qū)域中的P3.0-P3.7端口用8芯排線連接到“動(dòng)態(tài)數(shù)碼顯示”區(qū)域中的S1-S8端口上;

(3. 把“單片機(jī)系統(tǒng)”區(qū)域中的P0.0/AD0、P0.1/AD1、P0.2/AD2端口分別用導(dǎo)線連接到“獨(dú)立式鍵盤”區(qū)域中的SP3、SP2、SP1端口上;

4.相關(guān)基本知識(shí)

(1. 動(dòng)態(tài)數(shù)碼顯示的方法

(2. 獨(dú)立式按鍵識(shí)別過程

(3. “時(shí)”,“分”,“秒”數(shù)據(jù)送出顯示處理方法

5.程序框圖

6.匯編源程序

SECOND EQU 30H

MINITE EQU 31H

HOUR EQU 32H

HOURK BIT P0.0

MINITEK BIT P0.1

SECONDK BIT P0.2

DISPBUF EQU 40H

DISPBIT EQU 48H

T2SCNTA EQU 49H

T2SCNTB EQU 4AH

TEMP EQU 4BH

ORG 00H

LJMP START

ORG 0BH

LJMP INT_T0

START: MOV SECOND,#00H

MOV MINITE,#00H

MOV HOUR,#12

MOV DISPBIT,#00H

MOV T2SCNTA,#00H

MOV T2SCNTB,#00H

MOV TEMP,#0FEH

LCALL DISP

MOV TMOD,#01H

MOV TH0,#(65536-2000) / 256

MOV TL0,#(65536-2000) MOD 256

SETB TR0

SETB ET0

SETB EA

WT: JB SECONDK,NK1

LCALL DELY10MS

JB SECONDK,NK1

INC SECOND

MOV A,SECOND

CJNE A,#60,NS60

MOV SECOND,#00H

NS60: LCALL DISP

JNB SECONDK,$

NK1: JB MINITEK,NK2

LCALL DELY10MS

JB MINITEK,NK2

INC MINITE

MOV A,MINITE

CJNE A,#60,NM60

MOV MINITE,#00H

NM60: LCALL DISP

JNB MINITEK,$

NK2: JB HOURK,NK3

LCALL DELY10MS

JB HOURK,NK3

INC HOUR

MOV A,HOUR

CJNE A,#24,NH24

MOV HOUR,#00H

NH24: LCALL DISP

JNB HOURK,$

NK3: LJMP WT

DELY10MS:

MOV R6,#10

D1: MOV R7,#248

DJNZ R7,$

DJNZ R6,D1

RET

DISP:

MOV A,#DISPBUF

ADD A,#8

DEC A

MOV R1,A

MOV A,HOUR

MOV B,#10

DIV AB

MOV @R1,A

DEC R1

MOV A,B

MOV @R1,A

DEC R1

MOV A,#10

MOV@R1,A

DEC R1

MOV A,MINITE

MOV B,#10

DIV AB

MOV @R1,A

DEC R1

MOV A,B

MOV @R1,A

DEC R1

MOV A,#10

MOV@R1,A

DEC R1

MOV A,SECOND

MOV B,#10

DIV AB

MOV @R1,A

DEC R1

MOV A,B

MOV @R1,A

DEC R1

RET

INT_T0:

MOV TH0,#(65536-2000) / 256

MOV TL0,#(65536-2000) MOD 256

MOV A,#DISPBUF

ADD A,DISPBIT

MOV R0,A

MOV A,@R0

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P1,A

MOV A,DISPBIT

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P3,A

INC DISPBIT

MOV A,DISPBIT

CJNE A,#08H,KNA

MOV DISPBIT,#00H

KNA: INC T2SCNTA

MOV A,T2SCNTA

CJNE A,#100,DONE

MOV T2SCNTA,#00H

INC T2SCNTB

MOV A,T2SCNTB

CJNE A,#05H,DONE

MOV T2SCNTB,#00H

INC SECOND

MOV A,SECOND

CJNE A,#60,NEXT

MOV SECOND,#00H

INC MINITE

MOV A,MINITE

CJNE A,#60,NEXT

MOV MINITE,#00H

INC HOUR

MOV A,HOUR

CJNE A,#24,NEXT

MOV HOUR,#00H

NEXT: LCALL DISP

DONE: RETI

TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H

TAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH

END

7. C語(yǔ)言源程序

#include 《AT89X51.H》

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00};

unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f};

unsigned char dispbuf[8]={0,0,16,0,0,16,0,0};

unsigned char dispbitcnt;

unsigned char second;

unsigned char minite;

unsigned char hour;

unsigned int tcnt;

unsigned char mstcnt;

unsigned char i,j;

void main(void)

{

TMOD=0x02;

TH0=0x06;

TL0=0x06;

TR0=1;

ET0=1;

EA=1;

while(1)

{

if(P0_0==0)

{

for(i=5;i》0;i--)

for(j=248;j》0;j--);

if(P0_0==0)

{

second++;

if(second==60)

{

second=0;

}

dispbuf[0]=second;

dispbuf[1]=second/10;

while(P0_0==0);

}

}

if(P0_1==0)

{

for(i=5;i》0;i--)

for(j=248;j》0;j--);

if(P0_1==0)

{

minite++;

if(minite==60)

{

minite=0;

}

dispbuf[3]=minite;

dispbuf[4]=minite/10;

while(P0_1==0);

}

}

if(P0_2==0)

{

for(i=5;i》0;i--)

for(j=248;j》0;j--);

if(P0_2==0)

{

hour++;

if(hour==24)

{

hour=0;

}

dispbuf[6]=hour;

dispbuf[7]=hour/10;

while(P0_2==0);

}

}

}

}

void t0(void) interrupt 1 using 0

{

mstcnt++;

if(mstcnt==8)

{

mstcnt=0;

P1=dispcode[dispbuf[dispbitcnt]];

P3=dispbitcode[dispbitcnt];

dispbitcnt++;

if(dispbitcnt==8)

{

dispbitcnt=0;

}

}

tcnt++;

if(tcnt==4000)

{

tcnt=0;

second++;

if(second==60)

{

second=0;

minite++;

if(minite==60)

{

minite=0;

hour++;

if(hour==24)

{

hour=0;

}

}

}

dispbuf[0]=second;

dispbuf[1]=second/10;

dispbuf[3]=minite;

dispbuf[4]=minite/10;

dispbuf[6]=hour;

dispbuf[7]=hour/10;

}

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6030

    文章

    44489

    瀏覽量

    631989
  • 鍵盤
    +關(guān)注

    關(guān)注

    4

    文章

    858

    瀏覽量

    39540
  • 數(shù)字鐘
    +關(guān)注

    關(guān)注

    9

    文章

    160

    瀏覽量

    31303
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于單片機(jī)數(shù)字鐘

    本帖最后由 eehome 于 2013-1-5 09:55 編輯 SDSS基于單片機(jī)數(shù)字鐘
    發(fā)表于 06-09 23:37

    1、基于51單片機(jī)數(shù)字鐘的設(shè)計(jì)

    基于51單片機(jī)數(shù)字鐘的設(shè)計(jì)
    發(fā)表于 08-05 16:50

    如何去實(shí)現(xiàn)一種基于單片機(jī)數(shù)字鐘設(shè)計(jì)

    文末下載完整資料????????????????????摘 要??基于單片機(jī)的定時(shí)和控制裝置在許多行業(yè)有著廣泛的應(yīng)用,而數(shù)字鐘是其中最基本的,也是最具有代表性的一個(gè)例子。??在基于單片機(jī)系統(tǒng)的
    發(fā)表于 11-09 08:14

    基于單片機(jī)數(shù)字鐘具有哪些功能呢

    基于單片機(jī)數(shù)字鐘具有哪些功能呢?如何對(duì)基于單片機(jī)數(shù)字鐘進(jìn)行測(cè)試呢?
    發(fā)表于 01-21 06:49

    單片機(jī)數(shù)字鐘電路圖

    單片機(jī)數(shù)字鐘電路圖
    發(fā)表于 01-12 22:05 ?5次下載

    單片機(jī)數(shù)字鐘電路圖

    單片機(jī)數(shù)字鐘電路圖
    發(fā)表于 01-12 22:05 ?43次下載

    基于8031單片機(jī)控制的數(shù)字鐘

    介紹了用8031單片機(jī)控制的電腦數(shù)字鐘的硬件結(jié)構(gòu)與軟件設(shè)計(jì)。給出了匯編語(yǔ)言源程序。 關(guān)鍵詞:單片機(jī),實(shí)時(shí)控制,數(shù)字鐘,中斷 數(shù)字電子鐘的設(shè)計(jì)
    發(fā)表于 03-14 15:23 ?161次下載
    基于8031<b class='flag-5'>單片機(jī)</b>控制的<b class='flag-5'>數(shù)字鐘</b>

    單片機(jī)AT89C51設(shè)計(jì)的數(shù)字鐘

    單片機(jī)AT89C51設(shè)計(jì)的數(shù)字鐘,(1).開機(jī)時(shí),顯示12:00:00的時(shí)間開始計(jì)時(shí)
    發(fā)表于 04-13 16:07 ?9788次閱讀
    用<b class='flag-5'>單片機(jī)</b>AT89C51設(shè)計(jì)的<b class='flag-5'>數(shù)字鐘</b>

    單片機(jī)數(shù)字鐘課程設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《單片機(jī)數(shù)字鐘課程設(shè)計(jì).rar》資料免費(fèi)下載
    發(fā)表于 04-14 01:19 ?2次下載

    基于單片機(jī)控制的數(shù)字鐘設(shè)計(jì)

    基于單片機(jī)控制的數(shù)字鐘設(shè)計(jì),數(shù)碼管顯示數(shù)字,按鍵功能可調(diào)
    發(fā)表于 12-31 14:28 ?24次下載

    單片機(jī)數(shù)字鐘原理圖和仿真教程

    單片機(jī)課程設(shè)計(jì)數(shù)字鐘原理圖 仿真文件 實(shí)驗(yàn)報(bào)告
    發(fā)表于 01-08 11:58 ?38次下載

    單片機(jī)數(shù)字鐘程序

    單片機(jī)數(shù)字鐘程序分享給大家,可以了解了解
    發(fā)表于 01-11 14:15 ?14次下載

    使用單片機(jī)進(jìn)行數(shù)字鐘設(shè)計(jì)實(shí)例資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)進(jìn)行數(shù)字鐘設(shè)計(jì)實(shí)例資料說明。利用AT89C51的定時(shí)器和6位7段數(shù)碼管,設(shè)計(jì)一個(gè)電子時(shí)鐘,顯示格式“XX XX XX”,從左向右分別是:時(shí)、分、秒
    發(fā)表于 01-08 16:55 ?13次下載
    使用<b class='flag-5'>單片機(jī)</b>進(jìn)行<b class='flag-5'>數(shù)字鐘</b>設(shè)計(jì)實(shí)例資料<b class='flag-5'>說明</b>

    如何使用51單片機(jī)和熒光數(shù)碼管實(shí)現(xiàn)電子數(shù)字鐘的程序

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用51單片機(jī)和熒光數(shù)碼管實(shí)現(xiàn)電子數(shù)字鐘的程序。
    的頭像 發(fā)表于 09-26 11:07 ?4067次閱讀

    基于單片機(jī)數(shù)字鐘設(shè)計(jì)

    文末下載完整資料????????????????????摘 要??基于單片機(jī)的定時(shí)和控制裝置在許多行業(yè)有著廣泛的應(yīng)用,而數(shù)字鐘是其中最基本的,也是最具有代表性的一個(gè)例子。??在基于單片機(jī)系統(tǒng)
    發(fā)表于 11-04 12:06 ?18次下載
    基于<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>數(shù)字鐘</b>設(shè)計(jì)