求51单片机电子钟c语言程序
求51单片机点钟c语言程序。不是要数码管的,要三个接口分别接8个LED灯,分别表示时分秒,用定时器实现,时间间隔1秒,谢谢...
求51单片机点钟c语言程序。不是要数码管的,要三个接口分别接8个LED灯,分别表示时分秒,用定时器实现,时间间隔1秒,谢谢
展开
4个回答
2013-10-24
展开全部
ORG 8000H
AJMP MAIN
ORG 800BH
AJMP INTT0
ORG 8040H
MAIN:MOV SP,#60H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
MOV 3CH,#00H
MOV 3DH,#00H
MOV 3EH,#00H
MOV R1,#3EH
MOV R5,#6
LOOP:LCALL 0026H
LCALL 0036H
MOV @R1,A
DEC R1
DJNZ R5,LOOP
MOV 30H,#0
MOV 31H,#0
MOV TMOD,#02H
MOV TL0,#06H
MOV TH0,#06H
SETB EA
SETB ET0
SETB TR0
LOOP1:LCALL 0026H
SJMP LOOP1
INTT0:PUSH ACC
PUSH PSW
MOV A,30H
ADD A,#1
DA A
MOV 30H,A
MOV A,31H
ADDC A,#0
DA A
MOV 31H,A
CLR C
CJNE A,#20H,NEXT
NEXT:JC EXIT
MOV 30H,#0
MOV 31H,#0
MOV R0,#3AH
ACALL ADD
MOV A,R3
CLR C
CJNE A,#60H,NEXT1
NEXT1:JC EXIT
ACALL CLR
MOV R0,#3CH
ACALL ADD
MOV A,R3
CLR C
CJNE A,#60H,NEXT2
NEXT2:JC EXIT
ACALL CLR
MOV R0,#3EH
ACALL ADD
MOV A,R3
CLR C
CJNE A,#24H,NEXT3
NEXT3:JC EXIT
ACALL CLR
EXIT:POP PSW
POP ACC
RETI
ADD:MOV A,@R0
SWAP A
DEC R0
XCHD A,@R0
ADD A,#1
DA A
MOV R3,A
MOV B,#10H
DIV AB
MOV @R0.B
INC R0
MOV @R0,A
RET
CLR:CLR A
MOV @R0,A
DEC R0
MOV @R0,A
RET
END
AJMP MAIN
ORG 800BH
AJMP INTT0
ORG 8040H
MAIN:MOV SP,#60H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
MOV 3CH,#00H
MOV 3DH,#00H
MOV 3EH,#00H
MOV R1,#3EH
MOV R5,#6
LOOP:LCALL 0026H
LCALL 0036H
MOV @R1,A
DEC R1
DJNZ R5,LOOP
MOV 30H,#0
MOV 31H,#0
MOV TMOD,#02H
MOV TL0,#06H
MOV TH0,#06H
SETB EA
SETB ET0
SETB TR0
LOOP1:LCALL 0026H
SJMP LOOP1
INTT0:PUSH ACC
PUSH PSW
MOV A,30H
ADD A,#1
DA A
MOV 30H,A
MOV A,31H
ADDC A,#0
DA A
MOV 31H,A
CLR C
CJNE A,#20H,NEXT
NEXT:JC EXIT
MOV 30H,#0
MOV 31H,#0
MOV R0,#3AH
ACALL ADD
MOV A,R3
CLR C
CJNE A,#60H,NEXT1
NEXT1:JC EXIT
ACALL CLR
MOV R0,#3CH
ACALL ADD
MOV A,R3
CLR C
CJNE A,#60H,NEXT2
NEXT2:JC EXIT
ACALL CLR
MOV R0,#3EH
ACALL ADD
MOV A,R3
CLR C
CJNE A,#24H,NEXT3
NEXT3:JC EXIT
ACALL CLR
EXIT:POP PSW
POP ACC
RETI
ADD:MOV A,@R0
SWAP A
DEC R0
XCHD A,@R0
ADD A,#1
DA A
MOV R3,A
MOV B,#10H
DIV AB
MOV @R0.B
INC R0
MOV @R0,A
RET
CLR:CLR A
MOV @R0,A
DEC R0
MOV @R0,A
RET
END
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-10-24
展开全部
//Keil 51调试,Protues 7 仿真通过
//为了方便,使用的是P0,P1,P2口
#include <at89x51.h>
unsigned char buf[3];
union t
{
unsigned int it;
unsigned char ct[2];
}time;
unsigned char count = 0;
void Dlay()
{
unsigned char i = 0xff;
while (i--);
}
void Display()
{
P0 = buf[0];
Dlay();
P1 = buf[1];
Dlay();
P2 = buf[2];
Dlay();
}
void main()
{
IE = 0x82;
TMOD = 0x01;
time.it = -50000; //12M晶振,这是50ms
TH0 = time.ct[0];
TL0 = time.ct[1];
TR0 = 1;
while (1)
{
Display();
}
}
void AddOneSecond()
{
buf[0]++;
if (60 == buf[0])
{
buf[1]++;
if (60 == buf[1])
{
buf[2]++;
if (24 == buf[2])
{
buf[2] = 0;
}
}
}
}
void Timer0() interrupt 1
{
TH0 = time.ct[0];
TL0 = time.ct[1];
if (20 == count++)
{
count = 0;
AddOneSecond();
}
}
//为了方便,使用的是P0,P1,P2口
#include <at89x51.h>
unsigned char buf[3];
union t
{
unsigned int it;
unsigned char ct[2];
}time;
unsigned char count = 0;
void Dlay()
{
unsigned char i = 0xff;
while (i--);
}
void Display()
{
P0 = buf[0];
Dlay();
P1 = buf[1];
Dlay();
P2 = buf[2];
Dlay();
}
void main()
{
IE = 0x82;
TMOD = 0x01;
time.it = -50000; //12M晶振,这是50ms
TH0 = time.ct[0];
TL0 = time.ct[1];
TR0 = 1;
while (1)
{
Display();
}
}
void AddOneSecond()
{
buf[0]++;
if (60 == buf[0])
{
buf[1]++;
if (60 == buf[1])
{
buf[2]++;
if (24 == buf[2])
{
buf[2] = 0;
}
}
}
}
void Timer0() interrupt 1
{
TH0 = time.ct[0];
TL0 = time.ct[1];
if (20 == count++)
{
count = 0;
AddOneSecond();
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-10-24
展开全部
三个接口分别接8个LED灯,分别表示时分秒
不知道是要怎么样的效果啊~是闪一下一秒还是一个一个累加上去的闪啊~又或者是一个以个地亮?
LZ说成这样实在很难办啊~都不知道要怎么写~12864的偶又写过~用LEDd的画要简单很多~不过LZ要求写的不清楚啊~不知道这么下手了~
不知道是要怎么样的效果啊~是闪一下一秒还是一个一个累加上去的闪啊~又或者是一个以个地亮?
LZ说成这样实在很难办啊~都不知道要怎么写~12864的偶又写过~用LEDd的画要简单很多~不过LZ要求写的不清楚啊~不知道这么下手了~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-10-24
展开全部
这个程序很长的
我记得我考试的时候用了76行。。。
我记得我考试的时候用了76行。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询