Red de conocimiento informático - Conocimiento sistemático - Requiere el programa maestro para programar el microcontrolador 52

Requiere el programa maestro para programar el microcontrolador 52

/* Archivo de encabezado**/

#include

#include

#define uint unsigned int

#define uchar unsigned char

#define _Nop() _nop_()

sbit DQ = P3^5 //Definir puerto de comunicación DS18B20

sbit LED_EN_PORT = P2^5;

sbit DAC_ADC_EN_PORT = P3^7; /*define define la relación entre el carácter de visualización y la matriz digital correspondiente*/

Código de muestra sled_mun_to_char[ ] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86, 0x8e};

/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */

/* Definir el tubo digital que necesita ser iluminado*/

uchar código sled_bit_table[]={0xfe,0xfd,0xfb,0xf7} ;

p>

datos de uchar sled_bit_table[4]={0xfe,0xfd,0xfb,0xf7};

datos de uchar[4]={0xff,0xff,0xff,0xff} ; /*Valor del área del búfer SLED 0-7

uchar data led_lighten_bit=0; /*Bit de indicador de iluminación LED 0-7**

//////// ///// ///// Siguiente controlador DS18B20///////////////////////////////////// /////////////////////////////////////////////////// /////////////////////////////////////////////////// ////////////

retraso void(unsigned int i)

{

while(i--);

}

//Función de inicialización

Init_DS18B20 (void)

{

unsigned char x=0;

DQ = 1; //Reinicio de DQ

retraso(8); //Retraso leve

DQ = 0 //El microcontrolador baja el DQ

delay(80); //Retraso preciso>480us<

DQ = 1; //Tira el bus alto

delay(14);

x=DQ; // Después de un ligero retraso, si x=0 la inicialización es exitosa, si x=1 la inicialización falla

delay(20 );

}

/ReadOneChar (void)

{

char unsigned i=0;

char dat unsigned = 0;

for (i=8;i>0;i--){

DQ = 0; // dar señal de pulso

dat>>=1;<

DQ = 1; // da señal de pulso

if(DQ) dat|=0x80;

retardo(4 );

}

return(dat);

}

//Escribe un byte

WriteOneChar( unsig

ned char dat)

{

char unsigned i=0;

for (i=8; i>0; i--){

DQ = 0;

DQ = dat&0x01;

retraso(5);

DQ = 1;

dat>>=1 ;

}

}

/ReadTemperature(void)

{

unsigned char a=0;

char sin signo b=0;

int sin signo t=0;

float tt=0

Init_DS18B20(); /p>

WriteOneChar(0xCC); // Saltar la lectura del número de columna del número de serie

WriteOneChar(0x44); // Iniciar la conversión de temperatura

Init_DS18B20() ;

WriteOneChar(0xCC); // Omitir la operación de leer el número de columna del número de serie

WriteOneChar(0xBE); // Leer el registro de temperatura, etc.

(Se pueden leer 9 registros) Los dos primeros son registros de temperatura

a=ReadOneChar();

b=ReadOneChar();

t=b ;

t<<=8;

t=t|a;

tt=t*0.0625 //Fusiona las temperaturas altas y bajas

>

tt=t fusión de orden inferior

t= tt*10.5; // redondea el resultado a 4

return(t);

}

/////////////////// Lo anterior es el controlador DS18B20////////////// ///

//*1MS se utiliza para el programa de retraso*/

void delay_1ms(uchar x)

{

uchar j;

p>

while(x--){

for(j=0;j<125;j++)

{;}

}

}

main()

{

uint temp_buff;

uchar i ;

LED_EN_PORT = 0; /* Apagar la pantalla LED*/

DAC_ADC_EN_PORT = 0 /* Apagar todos los canales que el tubo digital cree que están abiertos*/

while( 1)

{

temp_buff=ReadTemperature() /* Leer la temperatura actual*/

sled_data[ 1] = sled_mun_to_char[temp_buff/100];

sled_data[2] = sled_mun_to_char[temp_buff%100/10];

sled_data[3] = sled_mun_too_char[temp_buff%10] ;

for( i=0;i<4;i++)

{

sled_wm_port = 0xff /* Apagar pantalla**

_Nop();

_Nop();

_Nop()

_Nop(); > sled_dm_port = sled_data[i]; /*Salir datos del segmento al digitalizador*

if (i==2) sled_dm_port = sled_dm_port&0x7f; sled_wm_port = sled_bit_table[i]; /*A datos del código de bits de salida del tubo digital*/

delay_1ms(2);

}

}

}

Este programa pasó la depuración

.