工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->家用电器电路图->其他电路图->99秒单片机马表设计

99秒单片机马表设计

作者:沉默的offer时间:2018-10-15

1. 实验任务

(1. 开始时,显示“00”,第1次按下SP1后就开始计时。

(2. 第2次按SP1后,计时停止。

(3. 第3次按SP1后,计时归零。

2. 电路原理图

3. 系统板上硬件连线

(1. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。

(2. 把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b,……,P2.7/A15对应着h。

(3. 把“单片机系统“区域中的P3.5/T1用导线连接到”独立式键盘“区域中的SP1端口上;

4. 程序框图

T0中断服务程序框图

5. 汇编源程序

TCNTA EQU 30H

TCNTB EQU 31H

SEC EQU 32H

KEYCNT EQU 33H

SP1 BIT P3.5

ORG 00H

LJMP START

ORG 0BH

LJMP INT_T0

START: MOV KEYCNT,#00H

MOV SEC,#00H

MOV A,SEC

MOV B,#10

DIV AB

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P0,A

MOV A,B

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P2,A

MOV TMOD,#02H

SETB ET0

SETB EA

WT: JB SP1,WT

LCALL DELY10MS

JB SP1,WT

INC KEYCNT

MOV A,KEYCNT

CJNE A,#01H,KN1

SETB TR0

MOV TH0,#06H

MOV TL0,#06H

MOV TCNTA,#00H

MOV TCNTB,#00H

LJMP DKN

KN1: CJNE A,#02H,KN2

CLR TR0

LJMP DKN

KN2: CJNE A,#03H,DKN

MOV SEC,#00H

MOV A,SEC

MOV B,#10

DIV AB

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P0,A

MOV A,B

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P2,A

MOV KEYCNT,#00H

DKN: JNB SP1,$

LJMP WT

DELY10MS:

MOV R6,#20

D1: MOV R7,#248

DJNZ R7,$

DJNZ R6,D1

RET

INT_T0:

INC TCNTA

MOV A,TCNTA

CJNE A,#100,NEXT

MOV TCNTA,#00H

INC TCNTB

MOV A,TCNTB

CJNE A,#4,NEXT

MOV TCNTB,#00H

INC SEC

MOV A,SEC

CJNE A,#100,DONE

MOV SEC,#00H

DONE: MOV A,SEC

MOV B,#10

DIV AB

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P0,A

MOV A,B

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P2,A

NEXT: RETI

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

END

6. C语言源程序

#include

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

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

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

0x39,0x5e,0x79,0x71,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;

P0=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;

P0=dispcode[second/10];

P2=dispcode[second%10];

break;

}

while(P3_5==0);

}

}

}

}

void t0(void) interrupt 1 using 0

{

tcnt++;

if(tcnt==400)

{

tcnt=0;

second++;

if(second==100)

{

second=0;

}

P0=dispcode[second/10];

P2=dispcode[second%10];

}

}


关键词:

评论

技术专区