Programación de reloj digital
#includelt;reg51.hgt;
#includelt;absacc.hgt
#define uchar unsigned char
#define
wei
XBYTE[0x0FF20]
//
Will
82255PA
El puerto se asigna a la selección de bits del tubo digital, correspondiente a la conexión de hardware
#define duan XBYTE[0x0FF21] //
Cambiar
8255PB
El puerto se asigna a la selección de segmento del tubo digital,
correspondiente a la conexión de hardware
#define control XBYTE[ 0xff23]//
Defina la dirección del registro de control
8255
como
control p>
, y
Correspondiente a la conexión de hardware
#define int8 unsigned char
#define int16 unsigned int
sbit key1=P3^0;
p>
//
Establecer clave
sbit key2=P3^1
//
Agregar clave
p>sbit key3=P3^2
//
Tecla menos
;Sin firmar
char
dis[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90} //
Código de segmento a mostrar
uchar a=0, contador, hora=12, minuto=0, segundo=0
void; delay(uchar x)
// p>
Función de retardo, aproximadamente
x nosotros
{
mientras (x--);
}
visualización nula (int8 hora, int8 minuto, int8 segundo)
//
Dinámica escáner
{
int8 hs, hg, ms, mg, ss, sg
int8 contador
hs=hora/; 10; //
Definir la visualización de la hora El dígito de las decenas
hg=hour10; //
Definir la visualización de las unidades de la hora
ms=minuto/10; //
Definir el dígito de las decenas que se muestra en el minuto
mg=minuto10; //
Definir el dígito de las unidades que se muestra en el minuto
ss=segundo/10; //
Definir el dígito de las decenas de la segunda pantalla
sg=segundo10; >
Definir el dígito de las unidades de la segunda pantalla
duan=0xff; //
Apagar todas las pantallas de tubos digitales
duan=dis[sg ];
wei=0xfe;
for(contador= 0; contador; 100; contador
duan=0xff;
Cierre todas las pantallas de tubos digitales para evitar
Interferencia de los datos anteriores
duan=dis[ss]; //
Código de segmento de diez dígitos para enviar segundos
wei=0xfd; /p> p>
Abra la segunda selección de diez dígitos y muestre los segundos
for(counter=0; counterlt; 100; counter
//
);El retraso es de unos 100us
Deje que el tubo digital tenga tiempo suficiente