Red de conocimiento informático - Computadora portátil - 249 código fuente

249 código fuente

El código fuente es el siguiente:

Si no puedes ver mi blog claramente:/blog/static/1738 554182010103094346593/

El siguiente es el código fuente:

/*** ******************************************* ******** ******

*Nombre de archivo: main.c*

*Función de archivo: realizar escaneo de teclado matricial, pantalla LED y comunicación entre dos microcontroladores.

? *

*Proyecto:? Ninguno*

*Observaciones:? *

* - *

*Número de versión: ¿v0.1T? *

*Fundador: Wan Xun*

*Fecha de creación: 2010-11-30?21:33:42?*

*Fecha de modificación: 2010 -11-30?21:33:44?*

* - *

*Tipo de chip:? ¿Se pueden utilizar las series AT89C51, STC89C54, 51? *

*Usar oscilador de cristal:? 11.0592 MHz*

*Entorno de compilación:? ¿KEILC3.51? *

* - *

*Composición del módulo:? No hay *

* modificador de compilación:? Ninguno*

****************************************** ** *******************

*Nota:

*

**** ** ************************************************* *** ***/

/************************************ ******* **********************

Descripción de la actualización:

***** ******* ******************************************* ******/

/************************************ ************ ***************

* * * * * * * * * * * * * * * * * * * * ¿Debería serlo? ¿usar? ¿capital? ¿Material? ****************************

****************** ******** ****************************************/

/** ******************************************* ********* *******

************************?Referencia del archivo ¿parte? ****************************

****************** ******** ****************************************/

#¿Incluir? ltreg 51.h gt;

/************************************ ****************************

****************** ******** ****?Configuración de parámetros? ****************************

****************** ****** ****************************************/

/* - *

*X-? ¿Parámetros de configuración del sistema? *

* - */

//Definir el reloj del sistema

#Definición? ¿FOSC? 11059200?/*?Definición de oscilador de cristal microcontrolador*/

#Definición? FDIV? 12?/*?Frecuencia MCU*/

//Definir la velocidad en baudios del puerto serie

#Definición? ¿Alfarero? 9600?/*?baudios del puerto serie

Velocidad, el modo predeterminado es 1 bit de datos, un bit de parada, sin verificación*/

//Defina los parámetros relevantes del tubo digital LED.

¿#Definición? ¿LEDDLY? 10/*?Intervalo de tiempo de escaneo dinámico del LED, la unidad es ms? */

#¿Definición? ¿LEDCPOL1? /*?Tipo de LED, (afecta la polaridad del variador), 0*** tubo digital hembra, 1*** tubo digital macho*/

/*?0: * *Yin (CC)? Cátodo, 1: * *Ánodo (calcio) ánodo*/

/****************************** ***** *******************************

******* ********** *************?¿Conexión de hardware? ****************************

****************** ****** ****************************************/

/* - *

*Conexión X-Hardware*

* - */

//Diodo emisor de luz

//Segmento LED ¿El código está conectado al puerto P0 y a~g están conectados respectivamente? P0.0~P0.6, dp está conectado a P0.7.

//El código LED está conectado al puerto P1 y S1~S6 están conectados a P1.0~P1.5 respectivamente.

//Teclado matricial

//H [4...1] corresponde a P2 [7...4]

//V[4 ..1] corresponde a P2[3..0]

//La conexión cruzada del puerto serie de dos microcontroladores.

/****************************************** *******************

************************ ?Definición de cantidad global? *************************

****************** *******************************************/

/ * - *

*?Constante global? *

* - */

constante? ¿No firmado? ¿Ciel? ¿LedTab_CA[11]? =/*?* * *Tabla de códigos del segmento Yang*/

{?0xC0, /*0*/

0xF9, /*1*/

0xA4, /*2*/

0xB0, /*3*/

0x99, /*4*/

0x92, /*5*/

0x82, /*6*/

0xF8, /*7*/

0x80, /*8*/

0x90, /*9*/?

0xFF, /*? */

};

const? ¿No firmado? ¿Ciel? ¿LedTab_CC[11]? =/*?* * *Tabla de códigos del segmento Yin*/

{?0x3F, /*0*/

0x06, /*1*/

0x5B, /*2*/

0x4F, /*3*/

0x66, /*4*/

0x6D, /*5*/

0x7D, /*6*/

0x07, /*7*/

0x7F, /*8*/

0x6F, /*9*/

0x00, /*? */

};

const? ¿No firmado? ¿Ciel? ¿LedCs_CA[6]? =

{0x01, 0x02, 0x04, 0x08, 0x10, 0x20}.

¿constante? ¿No firmado? ¿Ciel? LedCs_CC[6]? =

{0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0x df};

#Si? LEDCPOL

¿#Definición? ¿LedTab? LedTab_CA

¿#Definición? LedCsLedCs_CA

#De lo contrario

#¿Definición? ¿LedTab? LedTab_CC

¿#Definición? LedCsLedCs_CC

#endif

/* - *

*?¿Declaración de variable global? *

* - */

¿Variables? ¿No firmado? ¿Ciel? LED_Buff[6]={5, 10, 10, 10, 10, 5}; /*? ¿La matriz 0~5 corresponde al tubo Xie Ni S1~S6? */

/****************************************** *******************

************************ ?Área de declaración de funciones? *************************

********************* ***** *******************************************/

¿Anulado? retraso _ 10 ms (nulo);

¿Sin firmar? ¿Ciel? escaneo de clave (void);

¿No válido? UART_Tran(unsigned?char?dat);

¿Sin firmar? ¿Ciel? UART _ Rec(void);

¿Nulo? SysInit(void);

/*************************************** ***** *************************

/?Función: función de retardo de 10 ms

/?Fecha de modificación: 2010 -11-30?21:34:02

/?Parámetros de entrada: Ninguno

/?Parámetros de salida: Ninguno

/ ?Instrucciones de uso: Ninguna

*************************************** *********** ****************/

¿Anulado? retraso _ 10 milisegundos (no válido)

{

¿Sin firmar? ¿Ciel? A, B;

for(b = 249; b gt0; b -)

for(a = 17; a gt0; a-);

}

/****************************************** * *******************

/?Función: Se utiliza para visualización dinámica LED.

/?Fecha de modificación: 2010-11-30?21:34:04

/?Parámetros de entrada: Ninguno

/?Parámetros de salida: Ninguno

/?Instrucciones de uso: Ninguna

****************************** ****** ****************************/

¿Anulado? Timer0_IRQ_Handler (nulo)? ¿interrumpir? 1?Uso? 2

{

¿Electricidad estática? ¿No firmado? ¿Ciel? ¿LedCsCnt? =?0;

TL0? =?(unsigned?char)((65536?-(FOSC/FDIV/1000 * led ly)) 256);

TH0? =?(unsigned?char)((65536?-(FOSC/FDIV/1000 * led ly))/256);

P1? = *(led cs led cscnt);

P0? = *(pestaña LED LED _ Buff[LED cscnt]);?

¿LedCsCnt? =?(LedCsCnt 1) 6;?

}

//********************************* *** *************************

//Nombre de función: teclascan(void)

// Función: El programa de escaneo de claves, que utiliza el método de escaneo de inversión de filas y columnas, no admite combinaciones de teclas.

//Parámetro formal: ¿sin firmar? Devuelve el código ASCII de la clave.

//Parámetros de retorno: Ninguno

//Instrucciones de uso: utilice el método de escaneo de inversión de filas y columnas, ¿no admite combinaciones de teclas?

//Tabla de códigos de teclado: KeyPort de la interfaz del teclado, ¿donde las filas corresponden a bits altos y las columnas corresponden a bits bajos? Los valores clave están en el archivo de encabezado.

//Se ha completado la definición de la macro.

//EDB7? Bajo:?

//E'1''2''3 'Confirmar

//D'4''5''6 'Enviar

//B '7''8''9'NC

//7NC? 0'NCNC

//Bit alto

//*************************** * ****************************

¿No está firmado? ¿Ciel? Escaneo de claves (no válido)

{

¿Sin firmar? ¿Ciel? cord_h, cord_l, cord_key//Valores de filas y columnas

P2 = 0x0f; //Las salidas de filas y líneas son todas 0.

cordón_h? =?P2? ¿amperio? 0x0f? //Leer los valores de columna y fila

if (cord_h!=0x0f)? //Primero verifica si el botón está presionado.

{

delay _ 10ms(); //Retraso en el rebote

if(cord_h!=0x0f)

{

¿P2 y 0x0f? //Leer los valores de columna y fila

P2 = cord _ h | 0xf 0;? // Muestra el valor de la columna actual.

P2&0xf0? //Lee el valor de la fila

cord _ key = cord _ h cord _ l //El último valor del código de combinación del teclado

}

De lo contrario, ¿paño de lana? ¿cordón_llave? =?0xFF? //No se presionó ninguna tecla

}

¿Qué más? ¿cordón_llave? =?0xFF? //No se presionó ninguna tecla

Interruptor (tecla de cuerda)

{

¿Caso? 0xee: cord_key = 1; roto;? //'1'

¿Caso? 0x ed: cord_key = 2; roto;? //'2'

¿Caso? 0xeb: cord_key = 3; roto;? //'3'

¿Caso? 0xe 7: cord_key = 11; roto;? //¿Confirmar

caso? 0x de: cord_key = 4; romper;? //'4'

¿Caso? 0x DD: cord_key = 5; roto;? //'5'

¿Caso? 0x db: cord_key = 6; roto;? //'6'

¿Caso? 0xd 7: cord_key = 12; romper; // enviar

caso? 0x ser: cord_key = 7; romper;? //'7'

¿Caso? 0x BD: cord_key = 8; roto;? //'8'

¿Caso? 0x bb: cord_key = 9; roto;? //'9'

¿Caso? 0x7d: cord_key = 0; roto;? //'0'

Predeterminado: cord_key = 255? //Sin botón.

}

¿Volver? cable _ llave

}

/********************************* *** ****************************

/?Función: Transmisión de datos por comunicación serie

/?Fecha de modificación: 2010-11-30?21:34:17

/?Parámetros de entrada: dat? : Datos que deben enviarse a través del puerto serie.

/?Parámetros de salida: Ninguno

/?Instrucciones de uso: Ninguna

****************** ******** ****************************************/

¿Nulo? UART_Tran(unsigned?char?dat)

{

Y (TI?==?0);

TI? =?0;

SBUF? =?dat

}

/********************************* ***** ****************************

/?Función: Interrumpir la recepción de la comunicación serie datos.

/?Fecha de modificación: 2010-11-30?21:34:52

/?Parámetros de entrada: Ninguno

/?Parámetros de salida: del El puerto serie recibió datos.

/?Instrucciones de uso: esta función de recepción necesita utilizar el método de consulta del puerto serie, es decir, juzgar que RI es 1 significa que se han recibido nuevos datos.

********************************************* *** ****************/

¿No está firmado? ¿Ciel? UART_Rec(no válido)

{

RI? =?0;

¿Volver? ((SBUF) 10);? //Evita que los datos recibidos excedan el límite.

}

/************************************ ***********************

/?Función función: función de inicialización

/?Fecha de modificación :2010-11-30?21:36:20

/?Parámetros de entrada: Ninguno

/?Parámetros de salida: Ninguno

/?Instrucciones de uso : Este programa realiza principalmente la inicialización del puerto serie.

********************************************* *** ****************/

¿Anulado? SysInit(empty)

{

//Inicializa los valores TH y TL del temporizador T0 para el escaneo dinámico de LED.

TL0? =?(unsigned?char)((65536?-(FOSC/FDIV/1000 * led ly)) 256);

TH0? =?(unsigned?char)((65536?-(FOSC/FDIV/1000 * led ly))/256);

//Inicializa los valores TH y TL del generador de velocidad en baudios.

¿TH1? =?(unsigned?char)((256?-(FOSC/FDIV/32/BAUD));

SCON?=?0x52

TMOD?=?0x 21;

ET0=?1;

EA?=?1;? //Permitir interrupción completa

TR1=? p>}

/****************************** ********* *********************

/?Función función: función principal

/?Fecha de modificación: 2010-11 -30?21:36:24

/?Parámetros de entrada: Ninguno

/?Parámetros de salida: Ninguno

/?Instrucciones de uso: Ninguna

****************************************** *** *********************/

¿Nulo? Principal (no válido)

{

SysInit();

mientras(1)

{

¿Sin firmar? =?0xFF

¿Sin firmar? /p>

keyval.

if(0xFF?!=?keyval)

{

Si (12?==?keyval)

{

UART _ Tran(LED _ Buff[0]);

}

¿Qué pasa si (11?==?keyval)? Pulse confirmación.

{

}

Otro

{

*¿LED_Buff? =?keyval 10;

//UART_Tran(LED_Buff[0]);

//UART_Tran(LED_Buff[5]);?

}

}

Si (0?!=?RI)

{

¿Sin firmar? ¿Ciel? datrec

¿Datrec? = UART_Rec();

if(datrec lt; 10)*(LED_Buff 5)? =?datrec

¿Y si? *(LED_Buff 5)? =?10;

}

}

}