单片机设计数字电子钟的程序

单片机设计数字电子钟的程序,第1张

org 00h

ajmp start

org 03h

ajmp jia

org 0bh

ajmp saomiao

org 13h

ajmp jian

org 1bh

ajmp jishu

org 2bh

start:

mov ie,#10001111b

mov ip,#00000010b

mov tmod,#00100010b

mov th1,#6

mov tl1,#6

mov th0,#88h

mov tl0,#88h

setb it1

setb it0

mov r4,#11111110b

mov sp,#30h

mov 20h,#00h

mov p3,#0ffh

mov r0,#00h

mov r1,#00h

mov r2,#00h

mov r3,#00h

mov r5,#00h

mov dptr,#table

setb tr1

setb tr0

loop:

mov a,r0

mov b,#40

div ab

jz chuli

mov r0,#00h

inc r5

mov a,r5

mov b,#100

div ab

jz chuli

cpl 20h7

mov r5,#00h

inc r1

mov a,r1

cpl a

mov p2,a

cpl a

mov b,#60

div ab

jz chuli

mov r1,#00h

inc r2

mov a,r2

mov b,#60

div ab

jz chuli

mov r2,#00h

inc r3

mov a,r3

mov b,#24

div ab

jz chuli

mov r3,#00h

chuli:

mov a,r2

mov b,#10

div ab

mov 10h,b

mov 11h,a

mov a,r3

mov b,#10

div ab

mov 12h,b

mov 13h,a

jb p34,loop

mov r1,#00h

mov 87h,#01h

ljmp loop

jia:

push acc

inc r2

mov a,r2

mov b,#60

div ab

jz next1

mov r2,#00h

next1:

lcall ys

clr ie0

pop acc

reti

jian:

push acc

inc r3

mov a,r3

mov b,#24

div ab

jz next2

mov r3,#00h

next2:

lcall ys

clr ie1

pop acc

reti

jishu:

inc r0

reti

saomiao:

push acc

mov a,r4

rl a

mov p0,#0ffh

d0:

cjne a,#11111110b,d1

mov p1,a

mov r4,a

mov a,11h

jnz zc

mov a,r4

rl a

mov p1,a

zc:

mov a,10h

movc a,@a+dptr

mov p0,a

sjmp over

d1:

cjne a,#11111101b,d2

mov p1,a

mov r4,a

mov a,11h

jz over

movc a,@a+dptr

mov p0,a

sjmp over

d2:

cjne a,#11111011b,d3

mov p1,a

mov r4,a

mov a,12h

movc a,@a+dptr

mov p0,a

mov c,20h7

mov p07,c

sjmp over

d3:

cjne a,#11110111b,d4

mov p1,a

mov r4,a

mov a,13h

jz over

movc a,@a+dptr

mov p0,a

sjmp over

d4:

mov a,#11111110b

ajmp d0

over:

pop acc

reti

ys:

mov 14h,#0ffh

a0:

mov 15h,#0ffh

a1:

djnz 15h,a1

djnz 14h,a0

ret

table:

db 0c0h

db 0f9h

db 0a4h

db 0b0h

db 099h

db 092h

db 082h

db 0f8h

db 080h

db 090h

end

CC BIT 00H

DD EQU 31H

ORG 0000H

AJMP MAIN

ORG 0003H

AJMP INT_0

ORG 000BH

AJMP TIME

ORG 0013H

AJMP INT_1

ORG 30H

MAIN:

MOV R0,#00H

MOV R1,#00H

MOV R2,#03H

MOV R3,#00H

MOV R4,#00H

MOV R5,#00H

MOV R6,#00H

MOV R7,#00H

MOV P0,#0FFH

MOV P1,#0FFH

MOV P2,#0FFH

MOV P3,#0FFH

MOV TH0,#06H

MOV TL0,#06H

MOV DPTR,#200H

MOV TMOD,#02H

SETB EA

SETB EX0

SETB EX1

SETB IT0

SETB IT1

SETB ET0

SETB TR0

SETB CC

SHOW:

CJNE R7,#0FAH,OUT

MOV R7,#00H

INC R6

CJNE R6,#10H,OUT

MOV R6,#00H

INC R5

CJNE R5,#3CH,OUT

MOV R5,#00H

INC R4

CJNE R4,#3CH,OUT

MOV R4,#00H

INC R3

CJNE R3,#18H,OUT

MOV R3,#00H

OUT:

CJNE R2,#00H,SHOW_OUT_01

INC R1

CJNE R1,#3CH,R1_1

MOV R1,#00H

INC R0

CJNE R0,#20H,R1_1

MOV R0,#00H

CPL CC

R1_1:

MOV A,R5

MOV B,#0AH

DIV AB

MOVC A,@A+DPTR

MOV P0,A

MOV C,CC

MOV P22,C

CALL DELAY

SETB P22

MOV A,B

MOVC A,@A+DPTR

MOV P0,A

MOV C,CC

MOV P23,C

CALL DELAY

SETB P23

MOV A,R4

MOV B,#0AH

DIV AB

MOVC A,@A+DPTR

MOV P0,A

CLR P20

CALL DELAY

SETB P20

MOV A,B

MOVC A,@A+DPTR

MOV P0,A

CLR P21

CALL DELAY

SETB P21

SHOW_OUT_01:

CJNE R2,#01,SHOW_OUT_02

INC R1

CJNE R1,#3CH,R2_1

MOV R1,#00H

INC R0

CJNE R0,#20H,R2_1

MOV R0,#00H

CPL CC

R2_1:

MOV A,R5

MOV B,#0AH

DIV AB

MOVC A,@A+DPTR

MOV P0,A

CLR P22

CALL DELAY

SETB P22

MOV A,B

MOVC A,@A+DPTR

MOV P0,A

CLR P23

CALL DELAY

SETB P23

MOV A,R4

MOV B,#0AH

DIV AB

MOVC A,@A+DPTR

MOV P0,A

MOV C,CC

MOV P20,C

CALL DELAY

SETB P20

MOV A,B

MOVC A,@A+DPTR

MOV P0,A

MOV C,CC

MOV P21,C

CALL DELAY

SETB P21

SHOW_OUT_02:

CJNE R2,#02,SHOW_OUT_03

INC R1

CJNE R1,#3CH,R3_1

MOV R1,#00H

INC R0

CJNE R0,#20H,R3_1

MOV R0,#00H

CPL CC

R3_1:

MOV A,R3

MOV B,#0AH

DIV AB

MOVC A,@A+DPTR

MOV P0,A

MOV C,CC

MOV P20,C

CALL DELAY

SETB P20

MOV A,B

MOVC A,@A+DPTR

MOV P0,A

MOV C,CC

MOV P21,C

CALL DELAY

SETB P21

SHOW_OUT_03:

CJNE R2,#03H,SHOW_OUT_04

MOV A,R4

MOV B,#0AH

DIV AB

MOVC A,@A+DPTR

MOV P0,A

CLR P22

CALL DELAY

SETB P22

MOV A,B

MOVC A,@A+DPTR

MOV P0,A

CLR P23

CALL DELAY

SETB P23

MOV A,R3

MOV B,#0AH

DIV AB

MOVC A,@A+DPTR

MOV P0,A

CLR P20

CALL DELAY

SETB P20

MOV A,B

MOVC A,@A+DPTR

MOV P0,A

CLR P21

CALL DELAY

SETB P21

SHOW_OUT_04:

CJNE R2,#04H,SHOW_JMP

MOV A,R5

MOV B,#0AH

DIV AB

MOVC A,@A+DPTR

MOV P0,A

CLR P22

CALL DELAY

SETB P22

MOV A,B

MOVC A,@A+DPTR

MOV P0,A

CLR P23

CALL DELAY

SETB P23

MOV A,R4

MOV B,#0AH

DIV AB

MOVC A,@A+DPTR

MOV P0,A

CLR P20

CALL DELAY

SETB P20

MOV A,B

MOVC A,@A+DPTR

MOV P0,A

CLR P21

CALL DELAY

SETB P21

SHOW_JMP:

AJMP SHOW

DELAY:

MOV DD,#10H

DJNZ DD,$

RET

TIME:

INC R7

RETI

INT_0:

CLR EX0

INC R2

CLR TR0

CJNE R2,#03H,INT_0_OUT

SETB TR0

AJMP INT_0_OUT_1

INT_0_OUT:

CJNE R2,#04H,INT_0_TR0

SETB TR0

AJMP INT_0_OUT_1

INT_0_TR0:

CJNE R2,#05H,INT_0_OUT_1

MOV R2,#00

INT_0_OUT_1:

CALL DELAY

CALL DELAY

SETB EX0

RETI

INT_1:

CLR EX1

CJNE R2,#00H,INT_1_NEXT_1

INC R5

CJNE R5,#3CH,INT_1_OUT

MOV R5,#00H

AJMP INT_1_OUT

INT_1_NEXT_1:

CJNE R2,#01H,INT_1_NEXT_2

INC R4

CJNE R4,#3CH,INT_1_OUT

MOV R4,#00H

AJMP INT_1_OUT

INT_1_NEXT_2:

CJNE R2,#02H,INT_1_OUT

INC R3

CJNE R3,#18H,INT_1_OUT

MOV R3,#00H

AJMP INT_1_OUT

INT_1_OUT:

CALL DELAY

CALL DELAY

SETB EX1

RETI

ORG 200H

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

END

我很久以前写的看对你有没有用。我用的是89S51

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;系统名称: 数字钟

;创健人:济南, 日期:2005619

;系统功能描述:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;修改人: 修改日期:

;修改原因:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;蕊片型号:AT89C51 晶振:12MHZ

;-------------硬件连接---------------------

;

;

;-----------------------------------------------

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;程序名称: 声明区

;功能描述: 声明各常量和变量

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SECOND EQU 30H ;存储妙

MINITE EQU 31H ;存储分

HOUR EQU 32H ;存储时

SPEAKER BIT P37

HOURK BIT P32 ;时键

MINITEK BIT P33 ;分键

SECONDK BIT P30 ;妙键

FLAG BIT 00H

FLAG1S BIT 01H ;1S到标志位

DISPBUF EQU 40H ; 段选标志

DISPBIT EQU 48H ; 位选通标志

T2SCNTA EQU 49H ; 中断次数

T2SCNTB EQU 4AH ; 中断次数

TEMP EQU 4BH ; 初始化位

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;程序名称:主程序

;功能描述;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORG 00H

LJMP START

ORG 0BH

LJMP INT_T0 ;T0中断入口

START: MOV SECOND,#00H ;妙初始化0

MOV MINITE,#00H ;分初始化0

MOV HOUR,#12 ;时始化送12

MOV DISPBIT,#00H ;位选通标志

MOV T2SCNTA,#00H ;标志

MOV T2SCNTB,#00H ;标志

CLR FLAG

CLR FLAG1S

SETB SPEAKER

MOV TEMP,#07FH ;初始位,让第一个位选通

LCALL DISP ;调用显示处理程序

MOV TMOD,#01H ;方式1

MOV TH0,#0F8H ;赋值20MS

MOV TL0,#030H

SETB TR0 ;开中断启动

SETB ET0

SETB EA

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;程序名称:按键程序

;功能描述;调整分,时

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

WT: JNB FLAG,CC

LCALL SPEAKING

CC: JB SECONDK,NK1 ;妙末按下,转去判断分键

LCALL DELY10MS ;按下,延时,消抖动

JB SECONDK,NK1 ;再次判断是否按下

INC SECOND ;按下,按下一次加1

MOV A,SECOND ;送A判断

CJNE A,#60,NS60 ;妙末到60转分

MOV SECOND,#00H ;到了,回0

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 ;返回

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;程序名称:显示处理程序

;功能描述;,该程序实现时,分,秒计时转换为BCD码并存储在以47H起始地址的显示

;输出数据存储单元里,即显示缓冲区47H至40H单元

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DISP:

MOV A,#DISPBUF ;送40H

ADD A,#7 ;加8

;DEC A

MOV R1,A ;送47H

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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;程序名称:显示程序

;功能描述;在LED上显示为12-12-12显示模式

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

INT_T0:

MOV TH0,#0F8H ;重赋值

MOV TL0,#030H

MOV A,#DISPBUF ;段偏移存储

ADD A,DISPBIT ;位偏移量

MOV R0,A ;段偏移存储

MOV A,@R0 ;段偏移量

MOV DPTR,#TABLE ;指向字形表

MOVC A,@A+DPTR ;取字形

MOV P0,#0 ;防闪烁

MOV P0,A ; 字形选P1口显示

MOV A,DISPBIT ;位移偏量

MOV DPTR,#TAB ;指向位选

MOVC A,@A+DPTR ;取位选通

MOV P2,A ;位送P3口选通

INC DISPBIT ;位偏移加1

MOV A,DISPBIT ;位偏移送A

CJNE A,#08H,KNA ;八个数管码扫描完不

MOV DISPBIT,#00H ;描完重新开始

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;程序名称:1秒计时程序

;功能描述;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

KNA: INC T2SCNTA

MOV A,T2SCNTA

CJNE A,#100,DONE

MOV T2SCNTA,#00H

INC T2SCNTB

MOV A,T2SCNTB

CJNE A,#05H,DONE

SETB FLAG1S

MOV T2SCNTB,#00H

INC SECOND ;秒加1

MOV A,SECOND

CJNE A,#50,BB ;50S到

MOV A,MINITE

CJNE A,#59,BB ;59分

SETB FLAG ;打开正点响标志

BB: MOV A,SECOND

CJNE A,#60,NEXT ;秒超过60了没有 没有,调用显示处理程序

MOV SECOND,#00H

INC MINITE ;分加1

MOV A,MINITE

CJNE A,#60,NEXT

MOV MINITE,#00H ;分超过60,清0

INC HOUR ;并时加1

MOV A,HOUR

CJNE A,#24,NEXT ;是否超过24小时不是,则跳至NEXT

MOV HOUR,#00H

NEXT: LCALL DISP ; 调用显示处理程序

DONE: RETI ;中断返回

TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H ;0到9字形(40表示横扛)

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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;程序名称:正点报时子程序

;功能描述; 前十秒报第一声,每隔一秒报一声

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SPEAKING:MOV R5,#6

AA: CLR SPEAKER

JNB FLAG1S,$ ;延时1S

CLR FLAG1S

SETB SPEAKER

JNB FLAG1S,$

CLR FLAG1S

DJNZ R5,AA

CLR FLAG

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;程序名称:延时子程序

;功能描述;按键消抖调用

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DELY10MS:MOV R6,#10

D1: MOV R7,#248

DJNZ R7,$

DJNZ R6,D1

RET

#include "reg52h"

#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++;

}

/还有什么不明白继续追加/

以上就是关于单片机设计数字电子钟的程序全部的内容,包括:单片机设计数字电子钟的程序、求51单片机电子钟汇编程序、跪求一个MCS51单片机的电子时钟设计程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9486580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存