4个回答
展开全部
这是一个秒表,有按键实现 启动、暂停核清零功能。
#include <reg51.H>
sbit P3_5 =P3^5;
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};
unsigned char second;
unsigned char keycnt;
unsigned int tcnt;
void main(void)
{
unsigned char i,j;
TMOD=0x02;
ET0=1;
EA=1;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
while(1)
{
if(P3_5==0)
{
for(i=20;i>0;i--)
for(j=248;j>0;j--);
if(P3_5==0)
{
keycnt++;
switch(keycnt)
{
case 1:
TH0=0x06;
TL0=0x06;
TR0=1;
break;
case 2:
TR0=0;
break;
case 3:
keycnt=0;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
break;
}
while(P3_5==0);
}
}
}
}
void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second++;
if(second==100)
{
second=0;
}
P1=dispcode[second/10];
P2=dispcode[second%10];
}
}
#include <reg51.H>
sbit P3_5 =P3^5;
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};
unsigned char second;
unsigned char keycnt;
unsigned int tcnt;
void main(void)
{
unsigned char i,j;
TMOD=0x02;
ET0=1;
EA=1;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
while(1)
{
if(P3_5==0)
{
for(i=20;i>0;i--)
for(j=248;j>0;j--);
if(P3_5==0)
{
keycnt++;
switch(keycnt)
{
case 1:
TH0=0x06;
TL0=0x06;
TR0=1;
break;
case 2:
TR0=0;
break;
case 3:
keycnt=0;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
break;
}
while(P3_5==0);
}
}
}
}
void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second++;
if(second==100)
{
second=0;
}
P1=dispcode[second/10];
P2=dispcode[second%10];
}
}
展开全部
;功能:0~9,数码管显示计时;共阳接法
;P1口接数码管
ORG 0000H
LJMP MAIN
ORG 001BH ;定时器T1,中断入口
LJMP T1_ISR
ORG 0030H
;主程序
MAIN: MOV TMOD,#10H ;定时器初始化
MOV TH1,#3CH ;设定时时间50ms
MOV TL1,#0B0H
SETB EA ;开中断
SETB ET1
SETB TR1 ;启动T1
MOV R0,#20 ;中断计数器(循环次数)
MOV A,#00 ;显示计时初值
LCALL DISP ;调显示程序
SJMP $
;定时中断子程序
T1_ISR: DJNZ R0,ISR_OUT ;一秒不到退出
MOV R0,#20 ;到了,重赋计数器初值
INC A ;计时值加1
LCALL DISP ;调转换显示程序
CJNE A,#9,ISR_OUT ;判断计时值是否大于9,不是退出
MOV A,#00 ;大于9,重新赋0
ISR_OUT:MOV TH1,#3CH ;重新给计数器赋初值
MOV TL1,#0B0H
RETI
;显示子程序
DISP: MOV DPTR,#TAB ;查表
MOVC A,@A+DPTR
MOV P1,A
RET
;字符表,共阳接法0~9
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
曾经回答过一个类似题目,这个是在那个基础上修改的,你用Proteus仿真一下有问题Hi我
http://zhidao.baidu.com/question/158422617.html
;P1口接数码管
ORG 0000H
LJMP MAIN
ORG 001BH ;定时器T1,中断入口
LJMP T1_ISR
ORG 0030H
;主程序
MAIN: MOV TMOD,#10H ;定时器初始化
MOV TH1,#3CH ;设定时时间50ms
MOV TL1,#0B0H
SETB EA ;开中断
SETB ET1
SETB TR1 ;启动T1
MOV R0,#20 ;中断计数器(循环次数)
MOV A,#00 ;显示计时初值
LCALL DISP ;调显示程序
SJMP $
;定时中断子程序
T1_ISR: DJNZ R0,ISR_OUT ;一秒不到退出
MOV R0,#20 ;到了,重赋计数器初值
INC A ;计时值加1
LCALL DISP ;调转换显示程序
CJNE A,#9,ISR_OUT ;判断计时值是否大于9,不是退出
MOV A,#00 ;大于9,重新赋0
ISR_OUT:MOV TH1,#3CH ;重新给计数器赋初值
MOV TL1,#0B0H
RETI
;显示子程序
DISP: MOV DPTR,#TAB ;查表
MOVC A,@A+DPTR
MOV P1,A
RET
;字符表,共阳接法0~9
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
曾经回答过一个类似题目,这个是在那个基础上修改的,你用Proteus仿真一下有问题Hi我
http://zhidao.baidu.com/question/158422617.html
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是一个秒表,有按键实现
启动、暂停核清零功能。
#include
<reg51.H>
sbit
P3_5
=P3^5;
unsigned
char
code
dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};
unsigned
char
second;
unsigned
char
keycnt;
unsigned
int
tcnt;
void
main(void)
{
unsigned
char
i,j;
TMOD=0x02;
ET0=1;
EA=1;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
while(1)
{
if(P3_5==0)
{
for(i=20;i>0;i--)
for(j=248;j>0;j--);
if(P3_5==0)
{
keycnt++;
switch(keycnt)
{
case
1:
TH0=0x06;
TL0=0x06;
TR0=1;
break;
case
2:
TR0=0;
break;
case
3:
keycnt=0;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
break;
}
while(P3_5==0);
}
}
}
}
void
t0(void)
interrupt
1
using
0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second++;
if(second==100)
{
second=0;
}
P1=dispcode[second/10];
P2=dispcode[second%10];
}
}
启动、暂停核清零功能。
#include
<reg51.H>
sbit
P3_5
=P3^5;
unsigned
char
code
dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};
unsigned
char
second;
unsigned
char
keycnt;
unsigned
int
tcnt;
void
main(void)
{
unsigned
char
i,j;
TMOD=0x02;
ET0=1;
EA=1;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
while(1)
{
if(P3_5==0)
{
for(i=20;i>0;i--)
for(j=248;j>0;j--);
if(P3_5==0)
{
keycnt++;
switch(keycnt)
{
case
1:
TH0=0x06;
TL0=0x06;
TR0=1;
break;
case
2:
TR0=0;
break;
case
3:
keycnt=0;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
break;
}
while(P3_5==0);
}
}
}
}
void
t0(void)
interrupt
1
using
0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second++;
if(second==100)
{
second=0;
}
P1=dispcode[second/10];
P2=dispcode[second%10];
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用的是什么单片机?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询