173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

单片机电子时钟产品设计与制作

htxw 2023-03-14 资讯中心 16 ℃

单片机电子时钟设计

#include avr/io.h

#include avr/interrupt.h

#include util/delay.h#define INT8U unsigned char

#define INT16U unsigned int

#define k1() ((PIND (1PD0))==0x00)

#define k2() ((PIND (1PD1))==0x00)

#define k3() ((PIND (1PD2))==0x00)

#define k4() ((PIND (1PD3))==0x00)

#define k5() ((PIND (1PD4))==0x00)

#define k6() ((PIND (1PD5))==0x00)

#define k7() ((PIND (1PD6))==0x00)

#define k8() ((PIND (1PD7))==0x00)const INT8U seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};

INT8U seg11[]={0,0,0x40,0,0,0x40,0,0};

INT8U ja;

INT8U key=0xff;

INT8U h,m,s,m1,d;

INT16U y; void hour1()

{

if (++h23) {h=0;day();}

seg11[0]=seg[h/10];

seg11[1]=seg[h%10];

} void minute1()

{

if (++m59)

{m=0;br hour1();br }

seg11[3]=seg[m/10];

seg11[4]=seg[m%10];

} void second1() {

if (++s59)

{ s=0;

minute1();

}

seg11[6]=seg[s/10];

seg11[7]=seg[s%10];

} const INT8U Days1[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

const INT8U Days2[]={0,31,29,31,30,31,30,31,31,30,31,30,31};

void year()

{if (++y9999) y=0;br br seg11[0]=seg[y/1000];br seg11[1]=seg[y%1000/100];br seg11[2]=seg[y%100/10];br seg11[3]=seg[y%10];br } void month1()

{

if (++m112)

{m1=0;br year();br }

seg11[4]=seg[m1/10];

seg11[5]=seg[m1%10];

} void day()

{ INT8U DAY;

DAY=(( y%4==0 y%100!=0 )||( y%400==0 ) ) ? Days1[m1]:Days2[m1];//判断闰年

if(++dDAY)

{ d=0;

month1();

}

seg11[6]=seg[d/10];

seg11[7]=seg[d%10];

} //时间函数

void time()

{

seg11[0]=seg[h/10];

seg11[1]=seg[h%10];

seg11[3]=seg[m/10];

seg11[4]=seg[m%10];

seg11[6]=seg[s/10];

seg11[7]=seg[s%10];

PORTA=0x00;

PORTA=seg11[ja]; PORTB=~(1ja);

ja=(ja+1)0x07;

_delay_ms(5); }

//日期

void date()

{ seg11[0]=seg[y/1000];

seg11[1]=seg[y%1000/100];

seg11[2]=seg[y%100/10];

seg11[3]=seg[y%10];

seg11[4]=seg[m1/10];

seg11[5]=seg[m1%10];

seg11[6]=seg[d/10];

seg11[7]=seg[d%10];

//seg11[2]=seg11[5]=0x00;

PORTA=0x00;

PORTA=seg11[ja];

PORTB=~(1ja);

ja=(ja+1)0x07;

_delay_ms(3);

}

int main()

{ INT8U ja=0;

DDRA=0xff; PORTA=0xff;

DDRB=0xff; PORTB=0xff;

DDRD=0x00; PORTD=0xff;PIND=0x00;

MCUCR=0X0A;//MCU 控制寄存器- MCUCR

GICR=0XC0; //通用中断控制寄存器- GICR ASSR=0x08;

TCCR2=0x04;

TCNT2=0;

TIMSK=_BV(TOIE2)|_BV(TOIE0); d=26;y=2000;m1=2;

h=m=s=12;

sei();

while(1)

{ time();

if(k1())

/{ while(k1()); hour1(); }

if(k8())

{ while(k8());

while(2)//日期循环

{

date();

if(k8())

{while(k8());break;} }

}

}}

ISR(TIMER2_OVF_vect) {

if( seg11[2]==0x40)

{

seg11[2]=seg11[5]=0x00;

}

else

{ seg11[2]=seg11[5]=0x40;

second1();

}

}

51单片机简易电子钟设计。汇编语言编写

KEYVAL EQU 30H

KEYTM EQU 31H

KEYSCAN EQU 32H

DAT EQU 33H

SCANLED EQU 39H

CLK EQU 77H

SEC EQU 78H

MIN EQU 79H

HOUR EQU 7AH

PAUSE BIT 00H

DOT BIT 01H

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP T0ISR ;50ms定时

ORG 001BH

LJMP T1ISR ;扫描显示

ORG 0030H

MAIN:

  MOV SP,#5FH

  MOV TMOD,#11H

  MOV TH0,#03CH

  MOV TL0,#0B0H

  MOV TH1,#0ECH

  MOV TL1,#078H

  MOV KEYVAL,#0

  MOV SCANLED,#0

  MOV 33H,#10H

  MOV 34H,#10H

  MOV 35H,#10H

  MOV 36H,#10H

  MOV 37H,#10H

  MOV 38H,#10H

  MOV SEC,#0

  MOV MIN,#0

  MOV HOUR,#0

  MOV CLK,#0

  CLR PAUSE

  SETB EA

  SETB ET1

  SETB TR1

LOOP:

  LCALL KEYSEL

  MOV A,KEYVAL

  CJNE A,#0FFH,LOOP1

  SJMP LOOP

LOOP1:

  CJNE A,#10,LOOP2 ;“ON”启动

  SETB TR0

  SETB ET0

  SETB PAUSE

  SJMP LOOP

LOOP2:

  CJNE A,#11,LOOP3 ;“=”清零

  MOV SEC,#0

  MOV MIN,#0

  MOV HOUR,#0

  LCALL DISCHG

  SJMP LOOP

LOOP3:

  CJNE A,#15,LOOP4 ;“+”暂停

  CLR TR0

  CLR ET0

  CLR PAUSE

  SJMP LOOP

LOOP4:

  CJNE A,#14,LOOP5 ;“-”清显示暂停

  MOV 33H,#10H

  MOV 34H,#10H

  MOV 35H,#10H

  MOV 36H,#10H

  MOV 37H,#10H

  MOV 38H,#10H

  CLR TR0

  CLR ET0

  CLR PAUSE

  SJMP LOOP

LOOP5:

  CJNE A,#10,LOOP6  ;数字键

LOOP6:

  JC LOOP7

  LJMP LOOP

LOOP7:

  JNB PAUSE,LOOP8   ;暂停状态可以输入数字键

  LJMP LOOP

LOOP8:

  MOV 33H,34H

  MOV 34H,35H

  MOV 35H,36H

  MOV 36H,37H

  MOV 37H,38H

  MOV 38H,KEYVAL

  MOV A,33H

  SWAP A

  ORL A,34H

  LCALL BCDH

  MOV HOUR,A

  MOV A,35H

  SWAP A

  ORL A,36H

  LCALL BCDH

  MOV MIN,A

  MOV A,37H

  SWAP A

  ORL A,38H

  LCALL BCDH

  MOV SEC,A

  LJMP LOOP

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

;BCD转换为十六进制

BCDH:

  MOV B,#10H

  DIV AB

  MOV R7,B

  MOV B,#10

  MUL AB

  ADD A,R7

  RET

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

;十六进制转换为BCD

HBCD:

  MOV B,#10

  DIV AB

  SWAP A

  ORL A,B

  RET

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

KEYSEL: 

  MOV KEYVAL,#0

  MOV KEYSCAN,#0EFH

  LCALL GETKEY

  MOV A,KEYTM

  JZ KEYS1

  MOV KEYVAL,A

  SJMP KEYRTN

KEYS1: 

  MOV KEYSCAN,#0DFH

  LCALL GETKEY

  MOV A,KEYTM

  JZ KEYS2

  CLR C

  ADD A,#4

  MOV KEYVAL,A

  SJMP KEYRTN

KEYS2: 

  MOV KEYSCAN,#0BFH

  LCALL GETKEY

  MOV A,KEYTM

  JZ KEYS3

  CLR C

  ADD A,#8

  MOV KEYVAL,A

  SJMP KEYRTN

KEYS3: 

  MOV KEYSCAN,#7FH

  LCALL GETKEY

  MOV A,KEYTM

  JZ KEYRTN

  CLR C

  ADD A,#12

  MOV KEYVAL,A

KEYRTN: 

  LCALL CHGKEY

  RET

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

GETKEY: 

  MOV KEYTM,#0

  MOV A,KEYSCAN

  MOV P3,A

  NOP

  MOV A,P3

  ANL A,#0FH

  XRL A,#0FH

  JZ NOKEY

  MOV R2,#10

  LCALL DELAY

  MOV A,P3

  ANL A,#0FH

  XRL A,#0FH

  JZ NOKEY

  MOV A,P3

  ANL A,#0FH

  MOV R7,A

SF:

  MOV A,P3

  ANL A,#0FH

  XRL A,#0FH

  JNZ SF

  MOV A,R7

  CJNE A,#0EH,NK1

  MOV KEYTM,#1

  SJMP NOKEY

NK1:

  CJNE A,#0DH,NK2

  MOV KEYTM,#2

  SJMP NOKEY

NK2:

  CJNE A,#0BH,NK3

  MOV KEYTM,#3

  SJMP NOKEY

NK3:

  CJNE A,#07H,NOKEY

  MOV KEYTM,#4

NOKEY: RET

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

DELAY:

  MOV R3,#50

DELAY1:

  MOV R4,#100

  DJNZ R4,$

  DJNZ R3,DELAY1

  DJNZ R2,DELAY

  RET

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

T0ISR:

  PUSH ACC

  CLR TR0

  MOV TH0,#3CH

  MOV TL0,#0B0H

  SETB TR0

  INC CLK

  MOV A,CLK

  CJNE A,#20,T0ISRE

  MOV CLK,#0

  INC SEC

  MOV A,SEC

  CJNE A,#60,T0ISRE

  MOV SEC,#0

  INC MIN

  MOV A,MIN

  CJNE A,#60,T0ISRE

  MOV MIN,#0

  INC HOUR

  MOV A,HOUR

  CJNE A,#24,T0ISRE

  MOV SEC,#0

  MOV MIN,#0

  MOV HOUR,#0

T0ISRE:

  LCALL DISCHG

  POP ACC

  RETI

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

DISCHG:

  MOV A,HOUR

  LCALL HBCD

  PUSH ACC

  ANL A,#0FH

  MOV 34H,A

  POP ACC

  ANL A,#0F0H

  SWAP A

  MOV 33H,A

  MOV A,MIN

  LCALL HBCD

  PUSH ACC

  ANL A,#0FH

  MOV 36H,A

  POP ACC

  ANL A,#0F0H

  SWAP A

  MOV 35H,A

  MOV A,SEC

  LCALL HBCD

  PUSH ACC

  ANL A,#0FH

  MOV 38H,A

  POP ACC

  ANL A,#0F0H

  SWAP A

  MOV 37H,A

  RET

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

T1ISR:

  PUSH ACC

  CLR TR1

  MOV TH1,#0ECH

  MOV TL1,#78H

  SETB TR1

  MOV DPTR,#LEDTAB

T100:

  MOV R0,#DAT

  MOV A,SCANLED

  ADD A,R0

  MOV R0,A

  MOV A,SCANLED

  JNZ T101

  MOV P2,#01H

  CLR DOT

  SJMP T1DIS

T101:

  DEC A

  JNZ T102

  MOV P2,#02H

  SETB DOT

  SJMP T1DIS

T102:

  DEC A

  JNZ T103

  MOV P2,#04H

  CLR DOT

  SJMP T1DIS

T103:

  DEC A

  JNZ T104

  MOV P2,#08H

  SETB DOT

  SJMP T1DIS

T104:

  DEC A

  JNZ T105

  MOV P2,#10H

  CLR DOT

  SJMP T1DIS

T105:

  MOV P2,#20H

  CLR DOT

T1DIS:

  MOV A,@R0

  MOVC A,@A+DPTR

  JNB DOT,T1DIS1

  ORL A,#01H

T1DIS1:

  CPL A

  MOV P0,A

  INC SCANLED

  MOV A,SCANLED

  CJNE A,#6,T1END

  MOV SCANLED,#0

T1END:

  POP ACC

  RETI

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

CHGKEY:

  MOV A,KEYVAL

  JZ KV16

  DEC A

  JNZ KV01

  MOV KEYVAL,#7

  RET

KV01:

  DEC A

  JNZ KV02

  MOV KEYVAL,#4

  RET

KV02:

  DEC A

  JNZ KV03

  MOV KEYVAL,#1

  RET

KV03:

  DEC A

  JNZ KV04

  MOV KEYVAL,#10

  RET

KV04:

  DEC A

  JNZ KV05

  MOV KEYVAL,#8

  RET

KV05:

  DEC A

  JNZ KV06

  MOV KEYVAL,#5

  RET

KV06:

  DEC A

  JNZ KV07

  MOV KEYVAL,#2

  RET

KV07:

  DEC A

  JNZ KV08

  MOV KEYVAL,#0

  RET

KV08:

  DEC A

  JNZ KV09

  MOV KEYVAL,#9

  RET

KV09:

  DEC A

  JNZ KV10

  MOV KEYVAL,#6

  RET

KV10:

  DEC A

  JNZ KV11

  MOV KEYVAL,#3

  RET

KV11:

  DEC A

  JNZ KV12

  MOV KEYVAL,#11

  RET

KV12:

  DEC A

  JNZ KV13

  MOV KEYVAL,#12

  RET

KV13:

  DEC A

  JNZ KV14

  MOV KEYVAL,#13

  RET

KV14:

  DEC A

  JNZ KV15

  MOV KEYVAL,#14

  RET

KV15:

  DEC A

  JNZ KV16

  MOV KEYVAL,#15

  RET

KV16:

  MOV KEYVAL,#0FFH

  RET

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

LEDTAB: DB 0FCH ;"0" 00H

  DB 60H ;"1" 01H

  DB 0DAH ;"2" 02H

  DB 0F2H ;"3" 03H

  DB 66H ;"4" 04H

  DB 0B6H ;"5" 05H

  DB 0BEH ;"6" 06H

  DB 0E0H ;"7" 07H

  DB 0FEH ;"8" 08H

  DB 0F6H ;"9" 09H

  DB 0EEH ;"A" 0AH

  DB 3EH ;"B" 0BH

  DB 9CH ;"C" 0CH

  DB 7AH ;"D" 0DH

  DB 9EH ;"E" 0EH

  DB 8EH ;"F" 0FH

  DB 00H ;" " 10H

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

END

51单片机做数字电子钟

源程序如下: ORG 0000H ;程序开始入口

LJMP START

ORG 0003H ;外中断0中断程序入口

RETI

ORG 000BH ;定时器T0中断程序入口

LJMP INTT0 ;跳至INTTO执行

ORG 0013H ;外中断1中断程序入口

RETI

ORG 001BH ;定时器T1中断程序入口

LJMP INTT1

ORG 0023H ;串行中断程序入口地址

RETI

;---------------主程序----------------------;

START:MOV R0,#70H ;70给R0,清70-7FH显示内存

MOV R7,#0FH

CLEARDISP:MOV @R0,#00H ;0给R0中的数为地址的内存中存放(70H)

INC R0

DJNZ R7,CLEARDISP

MOV 78H,#2 ;默认时间为12:00,闹钟5:00

MOV 79H,#1

MOV 74H,#2 ;防止上电时数码管显示00小时

MOV 75H,#1

MOV 66H,#1 ;中断退出时66H为1时,分、时计时单元数据移入显存标志

MOV 68H,#1 ;上电默认闹钟开状态

MOV 7DH,#6 ;闹钟时十位

MOV 7CH,#3

MOV 69H,#0

MOV 7AH,#0AH ;放入"熄灭符"数据

MOV TMOD,#11H ;设T0、T1为16位定时器

MOV TL0,#0B0H ;50MS定时初值(T0计时用)

MOV TH0,#3CH

SETB EA ;总中断开放

SETB ET0 ;允许T0中断

SETB TR0 ;T0定时器开始计时

MOV R4,#14H ;1秒定时用初值(50MS×20)

START1:LCALL DISPLAY ;显示子程序

LCALL BEEP ;闹钟查询

JNB P1.7,SETTIME ;P1.7口为0时转时间调整程序

JMP START1 ;P1.7口为1时跳回START1

;-----------------------时间闹钟调整系统--------------------------;

NFLAG:MOV A,68H ;设置闹钟开关状态

CJNE A,#1,BEE68

MOV 68H,#0

JMP E6

BEE68:MOV 68H,#1

E6:MOV 66H,#8 ;中断退出66H不为1时分、时计时单元数据移入显存标志

MOV 72H,7BH

MOV 73H,7CH

MOV 74H,7DH

MOV 75H,7EH

LCALL DDL

LCALL DDL

MOV 72H,68H

MOV 73H,69H

MOV 74H,7AH

MOV 75H,7AH

LCALL DDL

LCALL DDL

MOV 66H,#1

LJMP START1

SETTIME:LCALL DDL

JB P1.7,NFLAG ;键按下时间小于1秒,设置闹钟开关状态并查看闹钟时间,不关走时,确保准确,大于1秒调时

MOV TL1,#0B0H ;T1闪烁定时初值

MOV TH1,#3CH

MOV R2,#06H ;进入调时状态,赋闪烁定时初值

MOV 66H,#8 ;调闹钟时保持走时,关闭时钟显示数据

SETB ET1 ;允许T1中断

SETB TR1 ;开启定时器T1

SET1:LCALL DISPLAY ;调用显示,防止键按下无显示

JNB P1.7,SET1 ;P1.7口为0等待键释放

MOV R5,#00H ;清设置类型闪烁标志

SETN1:INC R5 ;闹钟分调整

SET5:LCALL DISPLAY

JB P1.7,SET5

SEETN1:LCALL DDL ;有键按下大于1秒分时间连续加(0.5秒加1),小于1秒转调时状态

JB P1.7,SET6 ;键释放查询,键释放自动转调时

MOV R0,#7CH

LCALL ADD1

MOV A,R3

CLR C

CJNE A,#60H,HHN1

HHN1:JC SEETN1

LCALL CLR0

JMP SEETN1

SET6:INC R5 ;闹钟时调整

SEET6:LCALL DISPLAY

JB P1.7,SEET6

SEETNH1:LCALL DDL

JB P1.7,SETF

MOV R0,#7EH

LCALL ADD1

MOV A,R3

CLR C

CJNE A,#24H,HOUU1

HOUU1:JC SEETNH1

LCALL CLR0

JMP SEETNH1

SETF:LCALL DISPLAY

JB P1.7,SETF

LCALL DDL

JNB P1.7,SETOUT ;短按调时,长按退出

CLR ET0

CLR TR0

MOV 70H,#00H ;设定后的时间从00秒开始走时

MOV 71H,#00H

INC R5

SET3:LCALL DISPLAY

JB P1.7,SET3

SETMM:LCALL DDL

JB P1.7,SET4

MOV R0,#77H

LCALL ADD1

MOV A,R3

CLR C

CJNE A,#60H,MMH

MMH:JC SETMM

LCALL CLR0

AJMP SETMM

SET4:INC R5

SEET4:LCALL DISPLAY

JB P1.7,SEET4

SETHH:LCALL DDL

JB P1.7,SETOUT1

MOV R0,#79H

LCALL ADD1

MOV A,R3

CLR C

CJNE A,#24H,HOUU

HOUU:JC SETHH

LCALL CLR0

AJMP SETHH

SETOUT1:SETB ET0

SETB TR0 ;计时开始

SETOUT:MOV R5,#00H ;清设置类型闪烁标志

CLR TR1 ;关闭T1

CLR ET1 ;关T1中断

MOV 66H,#1

SETOUT2:LCALL DISPLAY

JNB P1.7,SETOUT2

LJMP START1

;--------------------------延时1秒钟-----------------------;

DDL:MOV 18H,#36

DDL0:MOV 17H,#239

DDL1:LCALL DISPLAY

DJNZ 17H,DDL1

DJNZ 18H,DDL0

RET

;----------------------------T0中断程序------------------------;

INTT0: PUSH ACC ;打包

PUSH PSW

CLR ET0

CLR TR0

MOV A,#0B7H

ADD A,TL0

MOV TL0,A

MOV A,#3CH

ADDC A,TH0

MOV TH0,A

SETB TR0

DJNZ R4, OUTT0 ;20次中断未到中断退出

ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值

MOV R0,#71H ;指向秒计时单元(70-71H)

ACALL ADD1 ;调用加1程序(加1秒操作)

MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)

CLR C ;清进位标志

CJNE A,#60H,ADDMM

ADDMM: JC OUTT01 ;小于60秒退出

ACALL CLR0 ;等于或大于60秒清0

MOV R0,#77H ;指向分计时单元(76H-77H)

ACALL ADD1

MOV A,R3

CLR C

CJNE A,#60H,ADDHH

ADDHH: JC OUTT0

ACALL CLR0

MOV R0,#79H ;指向小时计时单元(78H-79H)

ACALL ADD1

MOV A,R3

CLR C

CJNE A,#24H,HOUR

HOUR: JC OUTT0

ACALL CLR0

OUTT0: MOV A,66H ;查询标志

CJNE A,#1,OUTT01

MOV 72H,76H ;中断退出时将分、时计时单元数据移入对应显示单元

MOV 73H,77H

MOV 74H,78H

MOV 75H,79H

OUTT01:POP PSW ;出栈

POP ACC

SETB ET0 ;开放T0

RETI ;中断返回

;---------------------------加1程序--------------------------;

ADD1: MOV A,@R0 ;取当前计时单元数据到A

DEC R0 ;指向前一地址

SWAP A ;A中数据高四位与低四位交换

ORL A,@R0 ;前一地址中数据放入A中低四位

ADD A,#01H ;A加1操作

DA A ;十进制调整

MOV R3,A ;移入R3寄存器

ANL A,#0FH ;高四位变0

MOV @R0,A ;放回前一地址单元

MOV A,R3 ;取回R3中暂存数据

INC R0 ;指向当前地址单元

SWAP A ;A中数据高四位与低四位交换

ANL A,#0FH ;高四位变0

MOV @R0,A ;数据放入当削地址单元中

RET

CLR0: CLR C

CLR A ;清累加器

MOV @R0,A ;清当前地址单元

DEC R0 ;指向前一地址

MOV @R0,A ;前一地址单元清0

RET ;子程序返回

;-------------------------调时闪烁程序----------------------;

INTT1: PUSH ACC

PUSH PSW

MOV TL1,#0B0H

MOV TH1,#3CH

DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)

MOV R2,#06H ;重装0.3秒定时用初值

CPL 02H ;0.3秒定时到对闪烁标志取反

JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"

MOV A,R5

CJNE A,#01H,NL

JMP NNN1

NL:CJNE A,#02H,NL1

LJMP NNN1

NL1:CJNE A,#03H,NL2

LJMP NLL

NL2:CJNE A,#04H,INTT1OUT

LJMP NLL

NLL:MOV 72H,76H

MOV 73H,77H

MOV 74H,78H

MOV 75H,79H

AJMP INTT1OUT

NNN1:MOV 72H,7BH

MOV 73H,7CH

MOV 74H,7DH

MOV 75H,7EH

INTT1OUT:POP PSW ;恢复现场

POP ACC

RETI ;中断退出

FLASH1:MOV A,R5

CJNE A,#01H,ML

LJMP MNN1

ML:CJNE A,#02H,ML1

LJMP MNN2

ML1:CJNE A,#03H,MN

LJMP MLL

MN:CJNE A,#04H,INTT1OUT

LJMP MHL

MLL:MOV 72H,7AH

MOV 73H,7AH ;显示单元(72-73H),将不显示分数据

MOV 74H,78H

MOV 75H,79H

AJMP INTT1OUT

MHL:MOV 72H,76H

MOV 73H,77H

MOV 74H,7AH ;显示单元(74-75H),小时数据将不显示

MOV 75H,7AH

AJMP INTT1OUT

MNN1:MOV 72H,7AH

MOV 73H,7AH ;显示单元(72-73H),将不显示闹钟分数据

MOV 74H,7DH

MOV 75H,7EH

AJMP INTT1OUT

MNN2:MOV 72H,7BH

MOV 73H,7CH

MOV 74H,7AH

MOV 75H,7AH ;显示单元(74-75H),闹钟小时数据将不显示

AJMP INTT1OUT

;-------------------------显示-------------------------------;

DISPLAY:MOV DPTR,#DISDATA

MOV A,70H

MOVC A,@A+DPTR

MOV P3,A

CLR P1.0

NOP

NOP

NOP

SETB P1.0

MOV A,71H

MOVC A,@A+DPTR

MOV P3,A

CLR P1.1

NOP

NOP

NOP

SETB P1.1

MOV A,72H

MOVC A,@A+DPTR

MOV P3,A

CLR P1.2

NOP

NOP

NOP

SETB P1.2

MOV A,73H

MOVC A,@A+DPTR

MOV P3,A

CLR P1.3

NOP

NOP

NOP

SETB P1.3

MOV A,74H

MOVC A,@A+DPTR

MOV P3,A

CLR P1.4

NOP

NOP

NOP

SETB P1.4

MOV A,75H

MOVC A,@A+DPTR

MOV P3,A

CLR P1.5

NOP

NOP

NOP

SETB P1.5

RET

BEEP:MOV A,68H ;查询标志

CJNE A,#1,BEERE

MOV A,78H ;查询闹钟时个位

CJNE A,7DH,BEERE

MOV A,79H ;查询闹钟时十位

CJNE A,7EH,BEERE

MOV A,76H ;查询闹钟分个位

CJNE A,7BH,BEERE

MOV A,77H ;查询闹钟分十位

CJNE A,7CH,BEERE

BB:CLR P1.6

LCALL DDL

SETB P1.6

LCALL DDL

JNB P1.7,BEERR

BEERE:RET

BEERR:SETB P1.6

MOV 68H,#0

LCALL DISPLAY

JNB P1.7,BEERR

JMP BEERE

DISDATA:DB 0C0H,0F9H,64H,70H,59H,52H,42H,0F8H,40H,50H,0FFH ;0123456789空白

END

51单片机控制的电子时钟系统 毕业设计

可以用1302做

我有现成的

LCD1602

显示的,51做的

基本思路是用单片机读取1302里面的信息,处理,然后送LCD1602显示。

有兴趣可以去我博客看,里面还上传了之前我做的实物图片和PCB,可以照着做。

如何做一个单片机电子时钟

这个很简单啊,两种思路:1,用单片机定时器来做,优点是外围电路简单,只需要一个单片机最小系统,和一个显示模块(1602液晶比较好);缺点是:定时不是很准,跑的时间长了会有误差,而且主要是程序,要写很多,不过程序不是很难。2,用时钟芯片,一般都用DS1302,还需要单片机最小系统和显示模块,优点是:定时准确,误差很小,在有备用电池的情况下,即使单片机掉电,也可以维持很长时间,程序相对简单。缺点是:外围电路比前者相对复杂一点。如果想做个实际的东西拿来用,建议使用第二种方法,如果是想锻炼自己的编程能力的话,选第一种吧。祝成功!

如何制作多功能单片机数字式电子钟 呢

像做电子钟一般你要先确定你的各个模块用什么实现,比如显示是用LCD还是数码管,计时用定时器还是时钟芯片。对于你这个我推荐你用专门的日历时钟芯片,如DS1302。虽然看起来加个模块更复杂了,其实不然,对于你这个功能比较多的项目,不用时钟芯片,程序会变得很复杂。本人大学是做过这个,完全软件实现。后来又做过DS1302的,其实这个不难,你只需要通过SPI接口对它进行简单的读写,至于如何计时不用在程序中专门去写。

单片机电子时钟产品设计与制作的介绍到此就结束了,感谢您耐心阅读,谢谢。

本文标签:单片机电子时钟产品设计与制作

<