Programa de termómetro digital de alta precisión basado en microcontrolador AT89C51 y sensor de temperatura DS18B20, pantalla de cristal líquido LCD1602, programado en lenguaje C
Controlador LCD
/********************************* * ******************************/
/* */
/ * Verifique el estado de ocupación de la pantalla LCD */
/*Cuando lcd_busy es 1, ocupado, espere. Cuando lcd-busy es 0, está inactivo y puede escribir instrucciones y datos*/
/* */
/************** ***** ********************************************** ***/
bit estático lcd_busy()
{
resultado del bit
LCD_RS = 0
<; p> LCD_RW = 1;LCD_EN = 1;
retardoNOP();
resultado = (bit)(LCD_DB_Portamp; 0x80);
LCD_EN = 0;
retorno(resultado);
}
/*************** ******* ******************************************* **/
/* */
/*Escribir datos de comando en la pantalla LCD */
/*RS=L, RW=L, E=alta pulso, D0-D7=código de comando.
*/
/* */
/****************************** ******* *******************************************/
void lcd_wcmd(uchar cmd)
{
while(lcd_busy();
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0
_nop_();
_nop_();
LCD_DB_Port = cmd;
#endif
delayNOP();
LCD_EN = 1 //Ingresar datos en flanco ascendente<; /p>
retrasoNOP();
LCD_EN = 0
}
/*********** *************** ************************************* **********/
/* */
/*Escribir datos de visualización en LCD */
/*RS=H , RW=L, E=pulso alto, D0-D7=datos.
*/
/* */
/****************************** ******* *******************************************/
void lcd_wdat(uchar dat)
{
while(lcd_busy();
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
#ifdef LCD_8DB
LCD_DB_Port = dat;
#endif p>
delayNOP();
p>LCD_EN = 1;
delayNOP(); //Ingresa datos en el flanco ascendente
LCD_EN = 0 ;
}
/********************************* *************** ****************/
/* */
/* Configuración de inicialización de LCD*/
/* */
/************************ ******************* *************************/
void lcd_init()
{
delay(15); //Espera a que se estabilice la fuente de alimentación
lcd_wcmd(LCD_MODE); modo de visualización
retraso(5);
lcd_wcmd(LCD_MODE)
retraso(5);
lcd_wcmd(LCD_MODE);
retardo(5);
lcd_wcmd(0x0c); / /Mostrar cursor activado, desactivado
retardo(5);
lcd_wcmd(0x06); //Mover el cursor
delay(5);
lcd_wcmd(0x01); //Borrar el contenido de la pantalla LCD
delay( 5);
}