Colección de citas famosas - Colección de consignas - Utilice el microcontrolador AT89C51 para diseñar un reloj electrónico simple (seis dígitos) y realice la visualización de la hora a través de un tubo digital LED de 8 dígitos. El sistema puede calcular la hora a través de tres botones;

Utilice el microcontrolador AT89C51 para diseñar un reloj electrónico simple (seis dígitos) y realice la visualización de la hora a través de un tubo digital LED de 8 dígitos. El sistema puede calcular la hora a través de tres botones;

Ideas de programación: 1. Utilice el temporizador interno del microcontrolador como temporizador y llame a la función del temporizador; 2. Diseñe un conjunto de subrutinas de botones; (3) Diseñe un conjunto de rutinas de tubo de pantalla digital; A continuación se proporciona un conjunto de procedimientos como referencia.

#includelt;iom16v.hgt;

#include lt;macros.hgt;

#define uchar unsigned char

#define uint unsigned int

const uchar table[10]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f} //0-9 caracteres correspondientes

const uchar key_value[16]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};

uchar data[4]={0}; //El valor inicial mostrado es 0

uint count=0 ? //El valor de recuento inicial es 0

uchar keynum;

uint count=0 ? //El valor de recuento inicial es 0

uchar keynum;

uint count=0 p>

void port_init( ) ?//Función de inicialización del puerto

{DDRA=0XFF; //El puerto A es 1 salida push-pull PORTA=0XFF ?//Puerto B es 1 salida push-pull; DDRB=0XFF; DDRC=0XFF ?//El puerto C es una entrada sin resistencia pull-up PORTC=0XFF; DDRD=0XFF ?//Los 4 bits bajos del puerto D son PORTD=0X0F;<; p>}

void delay(uint j) ? //Función de retardo

{uint k; while(j--) {for(k=1000;kgt ;0;k --) ;}

}

void display(uchar *p) ? //Función de visualización

{uchar i, sel=0x01; =0;ilt;4;i) {PORTA=sel; //Seleccione el tubo digital más a la derecha PORTB=table[p[i]]; //Enviar código de fuente sel =sellt;lt;1; //Desplazarse un bit a la izquierda}

}

uchar get_key(void)

{if((PINDamp;0X0F)! =0X0F) delay( 3); { PORTD=0XEF; switch(PINDamp; 0X0F) {caso 0x0e: keynum=key_value[0]; break

case 0x0d: keynum=key_value[4];

caso 0x0b: keynum=key_value[8]; break;

case 0x07: keynum=key_value[12]; break; switch(PINDamp; 0X0F) {caso 0x0e: keynum=key_value[1]; break;

case 0x0d: keynum=key_value[5]; valor_clave[9]; ruptura;

caso 0x07: keynum=valor_clave[13];

/p>

predeterminado: break; } PORTD=0xbf; switch(PINDamp; 0X0F) {caso 0x0e: keynum=key_value[2]; ; romper;

caso 0x0b: keynum=key_value[10];

caso 0x07: keynum=key_value[14]; romper; } PORTD=0x7f; switch(PINDamp; 0X0F) {caso 0x0e: keynum=key_value[3]; break

case 0x0d: keynum=key_value[7]; p> caso 0x0b: keynum=key_value[11]; break;

case 0x07: keynum=key_value[15]; break;

default: break }? ;0x0f)!=0x0f); } return keynum;

}

void process(uint i, uchar *q) //Dividimos la función de código BCD para mostrar miles, centenas, 10. Dígito de unidades

{ ?q[0]=i/1000

i=i1000

q[1]=i/100;

i=i100;

q[2]=i/10

i=i10;

q[3]=i; ;

}

void main(void)

{port_init(); PORTB=0xff; retraso(50); while(1) {get_key(); recuento=keynum; proceso(recuento, datos);