PROGRAMA CONTROL POR ORDENADOR NIVEL INDUSTRIAL para ESTUDIANTES
program PIC_LCD_PC
' CONECCIONE AL LCD
DIM LCD_RS AS SBIT AT RD2_BIT
LCD_EN AS SBIT AT RD3_BIT
LCD_D4 AS SBIT AT RD4_BIT
LCD_D5 AS SBIT AT RD5_BIT
LCD_D6 AS SBIT AT RD6_BIT
LCD_D7 AS SBIT AT RD7_BIT
LCD_RS_Direction as sbit at TRISD2_BIT
LCD_EN_Direction as sbit at TRISD3_BIT
LCD_D4_Direction as sbit at TRISD4_BIT
LCD_D5_Direction as sbit at TRISD5_BIT
LCD_D6_Direction as sbit at TRISD6_BIT
LCD_D7_Direction as sbit at TRISD7_BIT
'FIN CONECCIOM LCD
DIM TXT1, TXT2, TXT3, TXT4, TXT5, TXT6, TXT7, TXT8 AS STRING[19]
TEXTO AS STRING[17]
UART_RD AS BYTE
CONT AS BYTE
ON_L1 AS BYTE
DIM TEXTO1, TEXTO2, TEXTO3, TEXTO4, TEXTO5, TEXTO6, TEXTO7, TEXTO8 AS STRING[43]
DIM TECLA1, TECLA2, TECLA3, TECLA4, TECLA0 AS BIT
SUB PROCEDURE CLEARSCREEN()
DIM I AS BYTE
FOR i = 0 TO 190
UART1_Write(0X08)
NEXT I
END SUB
SUB PROCEDURE SALTARLINEA()
UART1_Write(0X0D)
UART1_Write(0X0A)
END SUB
SUB PROCEDURE MENU()
UART1_Write(0X0D)
UART1_Write(0X0A)
UART1_Write_Text("PRESIONAR UNA TECLA PARA ACTIVAR/DESACTIVAR")
UART1_Write(0X0D)
UART1_Write(0X0A)
SALTARLINEA()
IF TECLA1=1 THEN
UART1_Write_Text(TEXTO5)
ELSE
UART1_Write_Text(TEXTO1)
END IF
UART1_Write(0X0D)
UART1_Write(0X0A)
IF TECLA2=1 THEN
UART1_Write_Text(TEXTO6)
ELSE
UART1_Write_Text(TEXTO2)
END IF
UART1_Write(0X0D)
UART1_Write(0X0A)
IF TECLA3=1 THEN
UART1_Write_Text(TEXTO7)
ELSE
UART1_Write_Text(TEXTO3)
END IF
UART1_Write(0X0D)
UART1_Write(0X0A)
IF TECLA4=1 THEN
UART1_Write_Text(TEXTO8)
ELSE
UART1_Write_Text(TEXTO4)
END IF
UART1_Write(0X0D)
UART1_Write(0X0A)
END SUB
MAIN:
TRISD = 0
PORTD = 0x00
TRISD = 0x00
TRISC = %10000001
PORTC = 0X00
UART1_INIT(4800)
DELAY_MS(100)
TECLA1=0
TECLA2=0
TECLA3=0
TECLA4=0
TECLA0=0
TXT1="FOCO ACTIVADO"
TXT2="FOCO DESACTIVADO"
TXT3="MOTOR ACTIVADO"
TXT4="MOTOR DESACTIVADO"
TXT5="VALVULA ACTIVADA"
TXT6="VALVULA DESACTIVADA"
TXT7="SISTEMA ACTIVADO"
TXT8="SISTEMA DESACTIVADO"
TEXTO1="TECLA # 1 ---- FOCO DESACTIVADO"
TEXTO2="TECLA # 2 ---- VALVULA DESACTIVADA"
TEXTO3="TECLA # 3 ---- MOTOR DESACTIVADO"
TEXTO4="TECLA # 4 ---- SISTEMA DESACTIVADO"
TEXTO5="TECLA # 1 ---- FOCO ACTIVADO"
TEXTO6="TECLA # 2 ---- VALVULA ACTIVADA"
TEXTO7="TECLA # 3 ---- MOTOR ACTIVADO"
TEXTO8="TECLA # 4 ---- SISTEMA ACTIVADO"
Lcd_init()
LCD_CMD(_LCD_CLEAR)
LCD_CMD(_LCD_CURSOR_OFF)
MENU()
while (TRUE)
' Endless loop
WHILE PORTC.0 = 1
PORTC.1 = 1
LCD_CMD(_LCD_CLEAR)
Lcd_Out(1,6,"ERROR")
Lcd_Out(2,1,"ALARMA ACTIVADA")
DELAY_MS(200)
WEND
PORTC.1 = 0
if (UART1_Data_Ready() <> 0) then ' If data is received,
uart_rd = UART1_Read() ' read the received data,
'---------------------------------------
IF (UART_RD = "1") THEN
TECLA1 = NOT TECLA1
IF TECLA1=1 THEN
LCD_CMD(_LCD_CLEAR)
Lcd_Out(1,1,TXT1)
SETBIT(PORTC, 2)
CLEARSCREEN()
MENU()
END IF
IF TECLA1=0 THEN
LCD_CMD(_LCD_CLEAR)
Lcd_Out(1,1,TXT2)
CLEARBIT(PORTC, 2)
CLEARSCREEN()
MENU()
END IF
END IF
'---------------------------------------
IF (UART_RD = "2") THEN
TECLA2 = NOT TECLA2
IF TECLA2=1 THEN
LCD_CMD(_LCD_CLEAR)
Lcd_Out(1,1,TXT3)
SETBIT(PORTC, 3)
CLEARSCREEN()
MENU()
END IF
IF TECLA2=0 THEN
LCD_CMD(_LCD_CLEAR)
Lcd_Out(1,1,TXT4)
CLEARBIT(PORTC, 3)
CLEARSCREEN()
MENU()
END IF
END IF
'---------------------------------------
'---------------------------------------
IF (UART_RD = "3") THEN
TECLA3 = NOT TECLA3
IF TECLA3=1 THEN
LCD_CMD(_LCD_CLEAR)
Lcd_Out(1,1,TXT5)
SETBIT(PORTC, 4)
CLEARSCREEN()
MENU()
END IF
IF TECLA3=0 THEN
LCD_CMD(_LCD_CLEAR)
Lcd_Out(1,1,TXT6)
CLEARBIT(PORTC, 4)
CLEARSCREEN()
MENU()
END IF
END IF
'---------------------------------------
'---------------------------------------
IF (UART_RD = "4") THEN
TECLA4 = NOT TECLA4
IF TECLA4=1 THEN
LCD_CMD(_LCD_CLEAR)
Lcd_Out(1,1,TXT7)
SETBIT(PORTC, 5)
CLEARSCREEN()
MENU()
END IF
IF TECLA4=0 THEN
LCD_CMD(_LCD_CLEAR)
Lcd_Out(1,1,TXT8)
CLEARBIT(PORTC, 5)
CLEARSCREEN()
MENU()
END IF
END IF
'---------------------------------------
end if
wend
end.