¡Por favor ayuda con el diagrama de conexión del programa de diseño de reloj digital en lenguaje C para microcontrolador! ! ! !
Reloj digital〔★〕Aquí se utilizan dos métodos de escritura (es decir, lenguaje ensamblador y lenguaje C)
(1. Al encender la computadora, la hora de las 12:00:00 se muestra y comienza el tiempo ;
(2. P0.0/AD0 controla el ajuste de "segundos", cada pulsación añade 1 segundo;
(3. P0.1/ AD1 controla el ajuste de "minutos", cada pulsación suma 1 punto;
(4. P0.2/AD2 controla el ajuste de "hora", cada pulsación añade 1 hora;
2. Principio del circuito Figura
3. Conexión de hardware en la placa del sistema
(1. Conecte los puertos P1.0-P1.7 en el área "Sistema MCU" a el " En los puertos A-H en el área "Pantalla digital dinámica";
(2. Conecte los puertos P3.0-P3.7 en el "Sistema MCU: Área" a la "Pantalla digital dinámica" área con un cable de 8 núcleos "En los puertos S1-S8 del área;
(3. Conecte los puertos P0.0/AD0, P0.1/AD1 y P0.2/AD2 en el área "Sistema MCU" con cables respectivamente Vaya a los puertos SP3, SP2 y SP1 en el área "Teclado independiente"
Conocimientos básicos relacionados
(1. Dinámico; método de visualización digital
(2. Proceso de reconocimiento de clave independiente
(3. Método de procesamiento de visualización y envío de datos de "hora", "minuto", "segundo"
5. Diagrama de bloques del programa
6.Programa fuente de ensamblaje
SEGUNDO EQU 30H
MINITE EQU 31H
HORA EQU 32H p>
HORA BIT P0.0
MINITEK BIT P0.1
SEGUNDA BIT P0.2
DISPBUF EQU 40H
DISPBIT EQU 48H
T2SCNTA EQU 49H
T2SCNTB EQU 4AH
TEMP EQU 4BH
ORG 00H
LJMP INICIO
ORG 0BH
LJMP INT_T0
INICIO: MOV SEGUNDO,#00H
MOV MINITE,#00H
HORA MOV,#12
p>DISPBIT MOV,#00H
MOV T2SCNTA,#00H
MOV T2SCNTB,#00H
MOV TEMP,#0FEH
LCALL DISP
MOV TMOD,#01H
MOV TH0,#(65536-2000) / 256
MOV TL0,#(65536-2000 ) MOD 256
SETB TR0
SETB ET0
SETB EA
WT : JB SECONDK,NK1
LCALL DELY10MS
JB SEGUNDOK,NK1
INC SEGUNDO
MOV A,SEGUNDO
CJNE A,#60,NS60
MOV SEGUNDO,#00H
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
HORA JB,NK3
HORA INC
HORA MOV A
CJNE A,#24,NH24
HORA MOV, #00H
NH24: LCALL DISP
JNB HORA,$
NK3: LJMP PESO
DELY10MS:
MOV R6,#10
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DISP:
MOV A,#DISPBUF
AÑADIR A,#8
DEC A
MOV R1,A
MOV A,HORA
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
DE
C R1
MOV A,SEGUNDO
MOV B,#10
DIV AB
MOV @R1,A
DEC R1
MOV A,B
MOV @R1,A
DEC R1
RET
INT_T0:
MOV TH0,#(65536-2000) / 256
MOV TL0,#(65536-2000) MOD 256
MOV A, #DISPBUF
AÑADIR A,DISPBIT
MOV R0,A
MOV A,@R0
MOV DPTR,#TABLE p> p>
MOVC A,@A+DPTR
MOV P1,A
MOV A,DISPBIT
MOV DPTR,#TAB p>
MOVC A,@A+DPTR
MOV P3,A
INC DISPBIT
MOV A,DISPBIT
CJNE A ,#08H,KNA
MOV DISPBIT,#00H
KNA: INC T2SCNTA
MOV A,T2SCNTA
CJNE A ,# 100,HECHO
MOV T2SCNTA,#00H
INC T2SCNTB
MOV A,T2SCNTB
CJNE A,#05H, HECHO
MOV T2SCNTB,#00H
INC SEGUNDO
MOV A,SEGUNDO
CJNE A,#60,SIGUIENTE
MOV SEGUNDO,#00H
INC MINITE
MOV A,MINITE
CJNE A,#60,NEXT
MOV MINITE ,#00H
HORA INC
MOV A,HORA
CJNE A,#24,NEXT
MOV HORA,# 00H
SIGUIENTE: LCALL DISP
HECHO: RETI
TABLA: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH, 6FH, 40H
TAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
FIN
7. Programa fuente en lenguaje C
#include
código de caracteres sin firmar dispcode[]={0x3f,0x06,0x5b,0x4f,
0x66, 0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00}
código de bit de caracteres sin firmar[; ]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
char dispbuf[8]= sin firmar; char dispbitcnt;
segundo char sin firmar;
minite char sin firmar;
hora char sin firmar
tcnt sin firmar; >
carácter sin firmar mstcnt;
carácter sin firmar i,j
void main(void)
{
TMOD= 0x02;
TH0=0x06;
TL0=0x06;
TR0=1;
EA=1;
mientras(1)
{
si(P0_0==0)
{ p> p>
for(i=5;i>0;i--)
for(j=248;j>0;j--); if( P0_0==0)
{
segundo++;
if(segundo==60)
{
segundo=0;
}
dispbuf[0]=segundo%10;
dispbuf[1]=segundo/10; >
mientras(P0_0==0);
}
}
si(P0_1==0)
{
for(i=5;i>0;i--)
for(j=248;j>0;j--); if( P0_1==0)
{
minite++;
if(minite==60)
{
minite=0
}
dispbuf[ 3]=minita%10;
dispbuf[4]=minita/10
while(P0_1==0
}
);}
if(P0_2==0)
{
for(i=5;i>0;i--)
for(j=248;j>0;j--);
if(P0_2==0)
{
hora++;
if(hora==24)
{
hora=0
}
dispbuf[ 6]=hora%10;
dispbuf[7]=hora/10
mientras(P0_2==0
}
);}
}
}
void t0(void) interrupción 1 usando 0
{
mstcnt++;
if(mstcnt==8)
{
mstcnt=0
P1=dispcode[dispbuf[dispbitcnt; ]];
P3=dispbitcode[dispbitcnt];
dispbitcnt++;
if(dispbitcnt==8)
{ p>
dispbitcnt=0;
}
}
tcnt++;
if(tcnt==4000)
p>
p>
{
tcnt=0
segundo++;
if(segundo==60)
{ p>
segundo=0
minite++;
if(minite==60)
{
minita=0
hora++;
if(hora==24)
{
p>
hora=0;
}
}
}
dispbuf[0]=segundo%10; /p>
dispbuf[1]=segundo/10;
dispbuf[3]=minite%10
dispbuf[4]=minite/10; >
dispbuf[6]=hora%10;
dispbuf[7]=hora/10;