
The Chilango power
-
Content Count
2 -
Joined
-
Last visited
Reputation Activity
-
The Chilango power got a reaction from jsolarski in MSP430 and LCD16X2 My first project
Hola les muestro mi primer proyecto con MSP430 LaunchPad es un simple LCD 16X2
#include #include "LCD_v1.h" #define LED1 BIT0 #define LED2 BIT6 #define B1 BIT3 //void setup(void); unsigned char i; typedef char* cadena; int main(void) { cadena string; WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; P1REN = 0x00; P1SEL = 0x00; P1IE = 0x00; Inicializa_LCD(); while(1){ Comando_LCD(CLEAR); Dato_String_LCDEx(LN1," HOLA MUNDO "); Dato_String_LCDEx(LN2, " **MSP430** "); delay_ms(2000); Comando_LCD(CLEAR); Dato_String_LCDEx(LN1," HECHO POR "); Dato_String_LCDEx(LN2,"=> THE CHILANGO POWER"); for(i = 0;i < 8;i++){ Comando_LCD(SHIFT_DISP_RIGHT); delay_ms(400); } for(i = 0;i < 14;i++){ Comando_LCD(SHIFT_DISP_LEFT); delay_ms(400); } delay_ms(2000); string = "MSP430 LaunchPad "; Comando_LCD(CLEAR); while(*string){ Dato_LCD(*string++); delay_ms(300); } string = "DATE 27/08/2012"; GoToXY(2,1); while(*string){ Dato_LCD(*string++); delay_ms(300); } delay_ms(1000); for(i=0;i<5;i++){ Comando_LCD(DOFF); delay_ms(200); Comando_LCD(DON); delay_ms(200); } Comando_LCD(DON); delay_ms(1500); } }
/* * LCD_V1.c * * Created on: 13/08/2012 * Author: THE CHILANGO POWER */ #include "LCD_V1.h" //********************************************************** /* Inicializacion del LCD segun fabricante */ //********************************************************** void Inicializa_LCD(void){ PDIR_LCD = 0; POUT_LCD = 0; delay_ms(100); PDIR_LCD |= PDIR_BIT1_LCD | PDIR_BIT2_LCD | PDIR_BIT3_LCD | PDIR_BIT4_LCD; PDIR_LCD |= PDIR_PIN_RS | PDIR_PIN_E; POUT_LCD &= ~POUT_PIN_E; POUT_LCD &= ~POUT_PIN_RS; Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_ms(5); Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Flex_port(NIBLE); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Comando_LCD(0x28); Comando_LCD(0x08); Comando_LCD(0x01); // Comando_LCD(LINES_5X7 & FOUR_BIT); // Comando_LCD(DON & CURSOR_OFF & BLINK_OFF); // Comando_LCD(CLEAR); Comando_LCD(0x06); /* Entry Mode Set */ /* Incremento del cursor */ Comando_LCD(0x0C); return; } //********************************************************** /* Indica al LCD comandos */ //********************************************************** void Comando_LCD(unsigned char dato) { volatile unsigned char temp; /* variable auxiliar */ //delay_ms(10); /* Retardo de 10 mseg. */ POUT_LCD &=~POUT_PIN_RS; temp = dato; /* Respaldo del dato original */ dato = dato >> 4; /* Corrimiento del nible alto */ Flex_port(dato); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; Flex_port(temp); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; delay_us(2000); return; } //********************************************************** /* Manda datos al LCD */ //********************************************************** void Dato_LCD(unsigned char dato) { volatile unsigned char temp; /* variable auxiliar */ POUT_LCD |= POUT_PIN_RS; // delay_ms(10); /* Retardo de 10 mseg. */ temp = dato; /* Respaldo del dato original */ dato = dato >> 4; /* Corrimiento del nible alto */ Flex_port(dato); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; Flex_port(temp); delay_us(50); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; POUT_LCD &=~ POUT_PIN_RS; delay_us(50); return; } //********************************************************** // Escribe una cadena desde memoria de programa al LCD //********************************************************** void Datos_LCD(const char *buffer) { while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } //********************************************************** // Escribe una cadena desde memoria de datos al LCD //********************************************************** void Dato_String_LCD(char *buffer) { while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void Flex_port(unsigned char data){ POUT_LCD &= ~BIT1_LCD; POUT_LCD &= ~BIT2_LCD; POUT_LCD &= ~BIT3_LCD; POUT_LCD &= ~BIT4_LCD; if(data & BIT0)POUT_LCD |= BIT1_LCD; if(data & BIT1)POUT_LCD |= BIT2_LCD; if(data & BIT2)POUT_LCD |= BIT3_LCD; if(data & BIT3)POUT_LCD |= BIT4_LCD; return; } void Dato_String_LCDEx(unsigned char xLine, char *buffer) { Comando_LCD(xLine); while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void Dato_LCDEx(unsigned char xLine, const char *buffer) { Comando_LCD(xLine); while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void GoToXY(unsigned char Line, unsigned char Position) { switch(Line) { case 1: Position += 128; Comando_LCD(Position); break; case 2: Position +=167; Comando_LCD(Position); break; } return; } void clear_LCD(void){ Dato_String_LCDEx(LN1," "); Dato_String_LCDEx(LN2," "); GoToXY(1,0); return; } void delay_us(unsigned int time){ while(--time)__delay_cycles (1); return; } void delay_ms(unsigned int time){ while(--time)__delay_cycles (1000); return; }
#ifndef LCD_V1_H_ #define LCD_V1_H_ #include /* * File: LCD_v1.h * Author: THE CHILANGO POWER * * Created on 13 de julio de 2012, 03:32 PM */ // Manejo de un Display de Cristal Liquido LCD 16X4 // de 16 caracteres por 4 lineas, con una interface // de 4 lineas: // // Conexiones del LCD al Microcontrolador #define POUT_LCD P1OUT #define PDIR_LCD P1DIR #define POUT_PIN_RS BIT0 // Define la Columna 1 #define POUT_PIN_E BIT1 // Define la Columna 3 #define PDIR_PIN_RS BIT0 // Define la Columna 1 #define PDIR_PIN_E BIT1 // Define la Columna 3 #define BIT1_LCD BIT4 #define BIT2_LCD BIT5 #define BIT3_LCD BIT6 #define BIT4_LCD BIT7 #define PDIR_BIT1_LCD BIT4 #define PDIR_BIT2_LCD BIT5 #define PDIR_BIT3_LCD BIT6 #define PDIR_BIT4_LCD BIT7 /* Configuracion del Display y cursor */ #define DON 0X0F //0b00001111 /* Display encendido */ #define DOFF 0X0B //0b00001011 /* Display apagado */ #define CURSOR_HOME 0X02 //0b00000010 /* Cursor encendido */ #define CURSOR_ON 0X0F //0b00001111 /* Cursor encendido */ #define CURSOR_OFF 0X0C //0b00001100 /* Cursor apagado */ #define BLINK_ON 0X0F //0b00001111 /* Cursor con parpadeo */ #define BLINK_OFF 0X0E //0b00001110 /* Cursor sin parpadeo */ #define CLEAR 0X01 //0b00000001 /* Display encendido */ /* Modo de entrada */ #define INCREMENT 0X06 //0b00000110 /* Incrementa la posicion del cursor */ #define DECREMENT 0X04 //0b00000100 /* Decrementa la posicion del cursor */ /* Configuracion de los desplazamientos del cursor y del Display*/ #define SHIFT_CUR_LEFT 0X13 //0b00010011 /* Corrimiento del cursor a la izquierda */ #define SHIFT_CUR_RIGHT 0X17 //0b00010111 /* Corrimiento del cursor a la derecha */ #define SHIFT_DISP_LEFT 0X1B //0b00011011 /* Corrimiento del display a la izquierda */ #define SHIFT_DISP_RIGHT 0X1F //0b00011111 /* Corrimiento del display a la derecha */ /* Funciones de inicializacion */ #define NIBLE 0X02 //0b00000010 /* interface a 4 bits */ #define FOUR_BIT 0X2F //0b00101111 /* Interface a 4-bit */ #define EIGHT_BIT 0X3F //0b00111111 /* Interface a 8-bit */ #define LINE_5X7 0X33 //0b00110011 /* Una linea, caracter 5x7 */ #define LINE_5X10 0X37 //0b00110111 /* Una linea, caracter 5x10 */ #define LINES_5X7 0X3B //0b00111011 /* Dos lineas. character 5x7 */ /* Lineas de trabajo */ #define DDRAM_LINEA_1 0X80 //0b10000000 /* Linea 1 */ #define DDRAM_LINEA_2 0XC0 //0b11000000 /* Linea 2 */ #define DDRAM_LINEA_3 0X90 //0b10010000 /* Linea 3 */ #define DDRAM_LINEA_4 0XD0 //0b11010000 /* Linea 4 */ #define LN1 DDRAM_LINEA_1 #define LN2 DDRAM_LINEA_2 /// Configuracion del puerto // /////////////////////////////////////////////////////////////////////////////// //Prototipos de funciones /////////////////////////////////////////////////////////////////////////////// void Flex_port(unsigned char data); void Inicializa_LCD(void); /* Inicializa LCD */ void Comando_LCD(unsigned char dato); /* Indica al LCD un comando */ void Dato_LCD(unsigned char dato); /* Indica al LCD un caracter */ void Datos_LCD(const char *buffer); /* escribe una cadena desde la memoria de programa al LCD */ void Dato_String_LCD(char *buffer); /* escribe una cadena desde la memoria de datos al LCD */ void Dato_String_LCDEx(unsigned char xLine, char *buffer); void Dato_LCDEx(unsigned char xLine, const char *buffer); void GoToXY(unsigned char Line, unsigned char Position); void delay_us(unsigned int time); void clear_LCD(void); void delay_ms(unsigned int time); #endif /* LCD_V1_H_ */
-
The Chilango power got a reaction from Diego Herrera in MSP430 and LCD16X2 My first project
Hola les muestro mi primer proyecto con MSP430 LaunchPad es un simple LCD 16X2
#include #include "LCD_v1.h" #define LED1 BIT0 #define LED2 BIT6 #define B1 BIT3 //void setup(void); unsigned char i; typedef char* cadena; int main(void) { cadena string; WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; P1REN = 0x00; P1SEL = 0x00; P1IE = 0x00; Inicializa_LCD(); while(1){ Comando_LCD(CLEAR); Dato_String_LCDEx(LN1," HOLA MUNDO "); Dato_String_LCDEx(LN2, " **MSP430** "); delay_ms(2000); Comando_LCD(CLEAR); Dato_String_LCDEx(LN1," HECHO POR "); Dato_String_LCDEx(LN2,"=> THE CHILANGO POWER"); for(i = 0;i < 8;i++){ Comando_LCD(SHIFT_DISP_RIGHT); delay_ms(400); } for(i = 0;i < 14;i++){ Comando_LCD(SHIFT_DISP_LEFT); delay_ms(400); } delay_ms(2000); string = "MSP430 LaunchPad "; Comando_LCD(CLEAR); while(*string){ Dato_LCD(*string++); delay_ms(300); } string = "DATE 27/08/2012"; GoToXY(2,1); while(*string){ Dato_LCD(*string++); delay_ms(300); } delay_ms(1000); for(i=0;i<5;i++){ Comando_LCD(DOFF); delay_ms(200); Comando_LCD(DON); delay_ms(200); } Comando_LCD(DON); delay_ms(1500); } }
/* * LCD_V1.c * * Created on: 13/08/2012 * Author: THE CHILANGO POWER */ #include "LCD_V1.h" //********************************************************** /* Inicializacion del LCD segun fabricante */ //********************************************************** void Inicializa_LCD(void){ PDIR_LCD = 0; POUT_LCD = 0; delay_ms(100); PDIR_LCD |= PDIR_BIT1_LCD | PDIR_BIT2_LCD | PDIR_BIT3_LCD | PDIR_BIT4_LCD; PDIR_LCD |= PDIR_PIN_RS | PDIR_PIN_E; POUT_LCD &= ~POUT_PIN_E; POUT_LCD &= ~POUT_PIN_RS; Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_ms(5); Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Flex_port(NIBLE); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Comando_LCD(0x28); Comando_LCD(0x08); Comando_LCD(0x01); // Comando_LCD(LINES_5X7 & FOUR_BIT); // Comando_LCD(DON & CURSOR_OFF & BLINK_OFF); // Comando_LCD(CLEAR); Comando_LCD(0x06); /* Entry Mode Set */ /* Incremento del cursor */ Comando_LCD(0x0C); return; } //********************************************************** /* Indica al LCD comandos */ //********************************************************** void Comando_LCD(unsigned char dato) { volatile unsigned char temp; /* variable auxiliar */ //delay_ms(10); /* Retardo de 10 mseg. */ POUT_LCD &=~POUT_PIN_RS; temp = dato; /* Respaldo del dato original */ dato = dato >> 4; /* Corrimiento del nible alto */ Flex_port(dato); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; Flex_port(temp); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; delay_us(2000); return; } //********************************************************** /* Manda datos al LCD */ //********************************************************** void Dato_LCD(unsigned char dato) { volatile unsigned char temp; /* variable auxiliar */ POUT_LCD |= POUT_PIN_RS; // delay_ms(10); /* Retardo de 10 mseg. */ temp = dato; /* Respaldo del dato original */ dato = dato >> 4; /* Corrimiento del nible alto */ Flex_port(dato); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; Flex_port(temp); delay_us(50); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; POUT_LCD &=~ POUT_PIN_RS; delay_us(50); return; } //********************************************************** // Escribe una cadena desde memoria de programa al LCD //********************************************************** void Datos_LCD(const char *buffer) { while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } //********************************************************** // Escribe una cadena desde memoria de datos al LCD //********************************************************** void Dato_String_LCD(char *buffer) { while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void Flex_port(unsigned char data){ POUT_LCD &= ~BIT1_LCD; POUT_LCD &= ~BIT2_LCD; POUT_LCD &= ~BIT3_LCD; POUT_LCD &= ~BIT4_LCD; if(data & BIT0)POUT_LCD |= BIT1_LCD; if(data & BIT1)POUT_LCD |= BIT2_LCD; if(data & BIT2)POUT_LCD |= BIT3_LCD; if(data & BIT3)POUT_LCD |= BIT4_LCD; return; } void Dato_String_LCDEx(unsigned char xLine, char *buffer) { Comando_LCD(xLine); while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void Dato_LCDEx(unsigned char xLine, const char *buffer) { Comando_LCD(xLine); while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void GoToXY(unsigned char Line, unsigned char Position) { switch(Line) { case 1: Position += 128; Comando_LCD(Position); break; case 2: Position +=167; Comando_LCD(Position); break; } return; } void clear_LCD(void){ Dato_String_LCDEx(LN1," "); Dato_String_LCDEx(LN2," "); GoToXY(1,0); return; } void delay_us(unsigned int time){ while(--time)__delay_cycles (1); return; } void delay_ms(unsigned int time){ while(--time)__delay_cycles (1000); return; }
#ifndef LCD_V1_H_ #define LCD_V1_H_ #include /* * File: LCD_v1.h * Author: THE CHILANGO POWER * * Created on 13 de julio de 2012, 03:32 PM */ // Manejo de un Display de Cristal Liquido LCD 16X4 // de 16 caracteres por 4 lineas, con una interface // de 4 lineas: // // Conexiones del LCD al Microcontrolador #define POUT_LCD P1OUT #define PDIR_LCD P1DIR #define POUT_PIN_RS BIT0 // Define la Columna 1 #define POUT_PIN_E BIT1 // Define la Columna 3 #define PDIR_PIN_RS BIT0 // Define la Columna 1 #define PDIR_PIN_E BIT1 // Define la Columna 3 #define BIT1_LCD BIT4 #define BIT2_LCD BIT5 #define BIT3_LCD BIT6 #define BIT4_LCD BIT7 #define PDIR_BIT1_LCD BIT4 #define PDIR_BIT2_LCD BIT5 #define PDIR_BIT3_LCD BIT6 #define PDIR_BIT4_LCD BIT7 /* Configuracion del Display y cursor */ #define DON 0X0F //0b00001111 /* Display encendido */ #define DOFF 0X0B //0b00001011 /* Display apagado */ #define CURSOR_HOME 0X02 //0b00000010 /* Cursor encendido */ #define CURSOR_ON 0X0F //0b00001111 /* Cursor encendido */ #define CURSOR_OFF 0X0C //0b00001100 /* Cursor apagado */ #define BLINK_ON 0X0F //0b00001111 /* Cursor con parpadeo */ #define BLINK_OFF 0X0E //0b00001110 /* Cursor sin parpadeo */ #define CLEAR 0X01 //0b00000001 /* Display encendido */ /* Modo de entrada */ #define INCREMENT 0X06 //0b00000110 /* Incrementa la posicion del cursor */ #define DECREMENT 0X04 //0b00000100 /* Decrementa la posicion del cursor */ /* Configuracion de los desplazamientos del cursor y del Display*/ #define SHIFT_CUR_LEFT 0X13 //0b00010011 /* Corrimiento del cursor a la izquierda */ #define SHIFT_CUR_RIGHT 0X17 //0b00010111 /* Corrimiento del cursor a la derecha */ #define SHIFT_DISP_LEFT 0X1B //0b00011011 /* Corrimiento del display a la izquierda */ #define SHIFT_DISP_RIGHT 0X1F //0b00011111 /* Corrimiento del display a la derecha */ /* Funciones de inicializacion */ #define NIBLE 0X02 //0b00000010 /* interface a 4 bits */ #define FOUR_BIT 0X2F //0b00101111 /* Interface a 4-bit */ #define EIGHT_BIT 0X3F //0b00111111 /* Interface a 8-bit */ #define LINE_5X7 0X33 //0b00110011 /* Una linea, caracter 5x7 */ #define LINE_5X10 0X37 //0b00110111 /* Una linea, caracter 5x10 */ #define LINES_5X7 0X3B //0b00111011 /* Dos lineas. character 5x7 */ /* Lineas de trabajo */ #define DDRAM_LINEA_1 0X80 //0b10000000 /* Linea 1 */ #define DDRAM_LINEA_2 0XC0 //0b11000000 /* Linea 2 */ #define DDRAM_LINEA_3 0X90 //0b10010000 /* Linea 3 */ #define DDRAM_LINEA_4 0XD0 //0b11010000 /* Linea 4 */ #define LN1 DDRAM_LINEA_1 #define LN2 DDRAM_LINEA_2 /// Configuracion del puerto // /////////////////////////////////////////////////////////////////////////////// //Prototipos de funciones /////////////////////////////////////////////////////////////////////////////// void Flex_port(unsigned char data); void Inicializa_LCD(void); /* Inicializa LCD */ void Comando_LCD(unsigned char dato); /* Indica al LCD un comando */ void Dato_LCD(unsigned char dato); /* Indica al LCD un caracter */ void Datos_LCD(const char *buffer); /* escribe una cadena desde la memoria de programa al LCD */ void Dato_String_LCD(char *buffer); /* escribe una cadena desde la memoria de datos al LCD */ void Dato_String_LCDEx(unsigned char xLine, char *buffer); void Dato_LCDEx(unsigned char xLine, const char *buffer); void GoToXY(unsigned char Line, unsigned char Position); void delay_us(unsigned int time); void clear_LCD(void); void delay_ms(unsigned int time); #endif /* LCD_V1_H_ */
-
The Chilango power got a reaction from dacoffey in MSP430 and LCD16X2 My first project
Hola les muestro mi primer proyecto con MSP430 LaunchPad es un simple LCD 16X2
#include #include "LCD_v1.h" #define LED1 BIT0 #define LED2 BIT6 #define B1 BIT3 //void setup(void); unsigned char i; typedef char* cadena; int main(void) { cadena string; WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; P1REN = 0x00; P1SEL = 0x00; P1IE = 0x00; Inicializa_LCD(); while(1){ Comando_LCD(CLEAR); Dato_String_LCDEx(LN1," HOLA MUNDO "); Dato_String_LCDEx(LN2, " **MSP430** "); delay_ms(2000); Comando_LCD(CLEAR); Dato_String_LCDEx(LN1," HECHO POR "); Dato_String_LCDEx(LN2,"=> THE CHILANGO POWER"); for(i = 0;i < 8;i++){ Comando_LCD(SHIFT_DISP_RIGHT); delay_ms(400); } for(i = 0;i < 14;i++){ Comando_LCD(SHIFT_DISP_LEFT); delay_ms(400); } delay_ms(2000); string = "MSP430 LaunchPad "; Comando_LCD(CLEAR); while(*string){ Dato_LCD(*string++); delay_ms(300); } string = "DATE 27/08/2012"; GoToXY(2,1); while(*string){ Dato_LCD(*string++); delay_ms(300); } delay_ms(1000); for(i=0;i<5;i++){ Comando_LCD(DOFF); delay_ms(200); Comando_LCD(DON); delay_ms(200); } Comando_LCD(DON); delay_ms(1500); } }
/* * LCD_V1.c * * Created on: 13/08/2012 * Author: THE CHILANGO POWER */ #include "LCD_V1.h" //********************************************************** /* Inicializacion del LCD segun fabricante */ //********************************************************** void Inicializa_LCD(void){ PDIR_LCD = 0; POUT_LCD = 0; delay_ms(100); PDIR_LCD |= PDIR_BIT1_LCD | PDIR_BIT2_LCD | PDIR_BIT3_LCD | PDIR_BIT4_LCD; PDIR_LCD |= PDIR_PIN_RS | PDIR_PIN_E; POUT_LCD &= ~POUT_PIN_E; POUT_LCD &= ~POUT_PIN_RS; Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_ms(5); Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Flex_port(NIBLE); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Comando_LCD(0x28); Comando_LCD(0x08); Comando_LCD(0x01); // Comando_LCD(LINES_5X7 & FOUR_BIT); // Comando_LCD(DON & CURSOR_OFF & BLINK_OFF); // Comando_LCD(CLEAR); Comando_LCD(0x06); /* Entry Mode Set */ /* Incremento del cursor */ Comando_LCD(0x0C); return; } //********************************************************** /* Indica al LCD comandos */ //********************************************************** void Comando_LCD(unsigned char dato) { volatile unsigned char temp; /* variable auxiliar */ //delay_ms(10); /* Retardo de 10 mseg. */ POUT_LCD &=~POUT_PIN_RS; temp = dato; /* Respaldo del dato original */ dato = dato >> 4; /* Corrimiento del nible alto */ Flex_port(dato); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; Flex_port(temp); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; delay_us(2000); return; } //********************************************************** /* Manda datos al LCD */ //********************************************************** void Dato_LCD(unsigned char dato) { volatile unsigned char temp; /* variable auxiliar */ POUT_LCD |= POUT_PIN_RS; // delay_ms(10); /* Retardo de 10 mseg. */ temp = dato; /* Respaldo del dato original */ dato = dato >> 4; /* Corrimiento del nible alto */ Flex_port(dato); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; Flex_port(temp); delay_us(50); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; POUT_LCD &=~ POUT_PIN_RS; delay_us(50); return; } //********************************************************** // Escribe una cadena desde memoria de programa al LCD //********************************************************** void Datos_LCD(const char *buffer) { while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } //********************************************************** // Escribe una cadena desde memoria de datos al LCD //********************************************************** void Dato_String_LCD(char *buffer) { while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void Flex_port(unsigned char data){ POUT_LCD &= ~BIT1_LCD; POUT_LCD &= ~BIT2_LCD; POUT_LCD &= ~BIT3_LCD; POUT_LCD &= ~BIT4_LCD; if(data & BIT0)POUT_LCD |= BIT1_LCD; if(data & BIT1)POUT_LCD |= BIT2_LCD; if(data & BIT2)POUT_LCD |= BIT3_LCD; if(data & BIT3)POUT_LCD |= BIT4_LCD; return; } void Dato_String_LCDEx(unsigned char xLine, char *buffer) { Comando_LCD(xLine); while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void Dato_LCDEx(unsigned char xLine, const char *buffer) { Comando_LCD(xLine); while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void GoToXY(unsigned char Line, unsigned char Position) { switch(Line) { case 1: Position += 128; Comando_LCD(Position); break; case 2: Position +=167; Comando_LCD(Position); break; } return; } void clear_LCD(void){ Dato_String_LCDEx(LN1," "); Dato_String_LCDEx(LN2," "); GoToXY(1,0); return; } void delay_us(unsigned int time){ while(--time)__delay_cycles (1); return; } void delay_ms(unsigned int time){ while(--time)__delay_cycles (1000); return; }
#ifndef LCD_V1_H_ #define LCD_V1_H_ #include /* * File: LCD_v1.h * Author: THE CHILANGO POWER * * Created on 13 de julio de 2012, 03:32 PM */ // Manejo de un Display de Cristal Liquido LCD 16X4 // de 16 caracteres por 4 lineas, con una interface // de 4 lineas: // // Conexiones del LCD al Microcontrolador #define POUT_LCD P1OUT #define PDIR_LCD P1DIR #define POUT_PIN_RS BIT0 // Define la Columna 1 #define POUT_PIN_E BIT1 // Define la Columna 3 #define PDIR_PIN_RS BIT0 // Define la Columna 1 #define PDIR_PIN_E BIT1 // Define la Columna 3 #define BIT1_LCD BIT4 #define BIT2_LCD BIT5 #define BIT3_LCD BIT6 #define BIT4_LCD BIT7 #define PDIR_BIT1_LCD BIT4 #define PDIR_BIT2_LCD BIT5 #define PDIR_BIT3_LCD BIT6 #define PDIR_BIT4_LCD BIT7 /* Configuracion del Display y cursor */ #define DON 0X0F //0b00001111 /* Display encendido */ #define DOFF 0X0B //0b00001011 /* Display apagado */ #define CURSOR_HOME 0X02 //0b00000010 /* Cursor encendido */ #define CURSOR_ON 0X0F //0b00001111 /* Cursor encendido */ #define CURSOR_OFF 0X0C //0b00001100 /* Cursor apagado */ #define BLINK_ON 0X0F //0b00001111 /* Cursor con parpadeo */ #define BLINK_OFF 0X0E //0b00001110 /* Cursor sin parpadeo */ #define CLEAR 0X01 //0b00000001 /* Display encendido */ /* Modo de entrada */ #define INCREMENT 0X06 //0b00000110 /* Incrementa la posicion del cursor */ #define DECREMENT 0X04 //0b00000100 /* Decrementa la posicion del cursor */ /* Configuracion de los desplazamientos del cursor y del Display*/ #define SHIFT_CUR_LEFT 0X13 //0b00010011 /* Corrimiento del cursor a la izquierda */ #define SHIFT_CUR_RIGHT 0X17 //0b00010111 /* Corrimiento del cursor a la derecha */ #define SHIFT_DISP_LEFT 0X1B //0b00011011 /* Corrimiento del display a la izquierda */ #define SHIFT_DISP_RIGHT 0X1F //0b00011111 /* Corrimiento del display a la derecha */ /* Funciones de inicializacion */ #define NIBLE 0X02 //0b00000010 /* interface a 4 bits */ #define FOUR_BIT 0X2F //0b00101111 /* Interface a 4-bit */ #define EIGHT_BIT 0X3F //0b00111111 /* Interface a 8-bit */ #define LINE_5X7 0X33 //0b00110011 /* Una linea, caracter 5x7 */ #define LINE_5X10 0X37 //0b00110111 /* Una linea, caracter 5x10 */ #define LINES_5X7 0X3B //0b00111011 /* Dos lineas. character 5x7 */ /* Lineas de trabajo */ #define DDRAM_LINEA_1 0X80 //0b10000000 /* Linea 1 */ #define DDRAM_LINEA_2 0XC0 //0b11000000 /* Linea 2 */ #define DDRAM_LINEA_3 0X90 //0b10010000 /* Linea 3 */ #define DDRAM_LINEA_4 0XD0 //0b11010000 /* Linea 4 */ #define LN1 DDRAM_LINEA_1 #define LN2 DDRAM_LINEA_2 /// Configuracion del puerto // /////////////////////////////////////////////////////////////////////////////// //Prototipos de funciones /////////////////////////////////////////////////////////////////////////////// void Flex_port(unsigned char data); void Inicializa_LCD(void); /* Inicializa LCD */ void Comando_LCD(unsigned char dato); /* Indica al LCD un comando */ void Dato_LCD(unsigned char dato); /* Indica al LCD un caracter */ void Datos_LCD(const char *buffer); /* escribe una cadena desde la memoria de programa al LCD */ void Dato_String_LCD(char *buffer); /* escribe una cadena desde la memoria de datos al LCD */ void Dato_String_LCDEx(unsigned char xLine, char *buffer); void Dato_LCDEx(unsigned char xLine, const char *buffer); void GoToXY(unsigned char Line, unsigned char Position); void delay_us(unsigned int time); void clear_LCD(void); void delay_ms(unsigned int time); #endif /* LCD_V1_H_ */
-
The Chilango power got a reaction from larsie in MSP430 and LCD16X2 My first project
Hola les muestro mi primer proyecto con MSP430 LaunchPad es un simple LCD 16X2
#include #include "LCD_v1.h" #define LED1 BIT0 #define LED2 BIT6 #define B1 BIT3 //void setup(void); unsigned char i; typedef char* cadena; int main(void) { cadena string; WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; P1REN = 0x00; P1SEL = 0x00; P1IE = 0x00; Inicializa_LCD(); while(1){ Comando_LCD(CLEAR); Dato_String_LCDEx(LN1," HOLA MUNDO "); Dato_String_LCDEx(LN2, " **MSP430** "); delay_ms(2000); Comando_LCD(CLEAR); Dato_String_LCDEx(LN1," HECHO POR "); Dato_String_LCDEx(LN2,"=> THE CHILANGO POWER"); for(i = 0;i < 8;i++){ Comando_LCD(SHIFT_DISP_RIGHT); delay_ms(400); } for(i = 0;i < 14;i++){ Comando_LCD(SHIFT_DISP_LEFT); delay_ms(400); } delay_ms(2000); string = "MSP430 LaunchPad "; Comando_LCD(CLEAR); while(*string){ Dato_LCD(*string++); delay_ms(300); } string = "DATE 27/08/2012"; GoToXY(2,1); while(*string){ Dato_LCD(*string++); delay_ms(300); } delay_ms(1000); for(i=0;i<5;i++){ Comando_LCD(DOFF); delay_ms(200); Comando_LCD(DON); delay_ms(200); } Comando_LCD(DON); delay_ms(1500); } }
/* * LCD_V1.c * * Created on: 13/08/2012 * Author: THE CHILANGO POWER */ #include "LCD_V1.h" //********************************************************** /* Inicializacion del LCD segun fabricante */ //********************************************************** void Inicializa_LCD(void){ PDIR_LCD = 0; POUT_LCD = 0; delay_ms(100); PDIR_LCD |= PDIR_BIT1_LCD | PDIR_BIT2_LCD | PDIR_BIT3_LCD | PDIR_BIT4_LCD; PDIR_LCD |= PDIR_PIN_RS | PDIR_PIN_E; POUT_LCD &= ~POUT_PIN_E; POUT_LCD &= ~POUT_PIN_RS; Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_ms(5); Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Flex_port(NIBLE); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Comando_LCD(0x28); Comando_LCD(0x08); Comando_LCD(0x01); // Comando_LCD(LINES_5X7 & FOUR_BIT); // Comando_LCD(DON & CURSOR_OFF & BLINK_OFF); // Comando_LCD(CLEAR); Comando_LCD(0x06); /* Entry Mode Set */ /* Incremento del cursor */ Comando_LCD(0x0C); return; } //********************************************************** /* Indica al LCD comandos */ //********************************************************** void Comando_LCD(unsigned char dato) { volatile unsigned char temp; /* variable auxiliar */ //delay_ms(10); /* Retardo de 10 mseg. */ POUT_LCD &=~POUT_PIN_RS; temp = dato; /* Respaldo del dato original */ dato = dato >> 4; /* Corrimiento del nible alto */ Flex_port(dato); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; Flex_port(temp); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; delay_us(2000); return; } //********************************************************** /* Manda datos al LCD */ //********************************************************** void Dato_LCD(unsigned char dato) { volatile unsigned char temp; /* variable auxiliar */ POUT_LCD |= POUT_PIN_RS; // delay_ms(10); /* Retardo de 10 mseg. */ temp = dato; /* Respaldo del dato original */ dato = dato >> 4; /* Corrimiento del nible alto */ Flex_port(dato); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; Flex_port(temp); delay_us(50); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; POUT_LCD &=~ POUT_PIN_RS; delay_us(50); return; } //********************************************************** // Escribe una cadena desde memoria de programa al LCD //********************************************************** void Datos_LCD(const char *buffer) { while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } //********************************************************** // Escribe una cadena desde memoria de datos al LCD //********************************************************** void Dato_String_LCD(char *buffer) { while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void Flex_port(unsigned char data){ POUT_LCD &= ~BIT1_LCD; POUT_LCD &= ~BIT2_LCD; POUT_LCD &= ~BIT3_LCD; POUT_LCD &= ~BIT4_LCD; if(data & BIT0)POUT_LCD |= BIT1_LCD; if(data & BIT1)POUT_LCD |= BIT2_LCD; if(data & BIT2)POUT_LCD |= BIT3_LCD; if(data & BIT3)POUT_LCD |= BIT4_LCD; return; } void Dato_String_LCDEx(unsigned char xLine, char *buffer) { Comando_LCD(xLine); while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void Dato_LCDEx(unsigned char xLine, const char *buffer) { Comando_LCD(xLine); while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void GoToXY(unsigned char Line, unsigned char Position) { switch(Line) { case 1: Position += 128; Comando_LCD(Position); break; case 2: Position +=167; Comando_LCD(Position); break; } return; } void clear_LCD(void){ Dato_String_LCDEx(LN1," "); Dato_String_LCDEx(LN2," "); GoToXY(1,0); return; } void delay_us(unsigned int time){ while(--time)__delay_cycles (1); return; } void delay_ms(unsigned int time){ while(--time)__delay_cycles (1000); return; }
#ifndef LCD_V1_H_ #define LCD_V1_H_ #include /* * File: LCD_v1.h * Author: THE CHILANGO POWER * * Created on 13 de julio de 2012, 03:32 PM */ // Manejo de un Display de Cristal Liquido LCD 16X4 // de 16 caracteres por 4 lineas, con una interface // de 4 lineas: // // Conexiones del LCD al Microcontrolador #define POUT_LCD P1OUT #define PDIR_LCD P1DIR #define POUT_PIN_RS BIT0 // Define la Columna 1 #define POUT_PIN_E BIT1 // Define la Columna 3 #define PDIR_PIN_RS BIT0 // Define la Columna 1 #define PDIR_PIN_E BIT1 // Define la Columna 3 #define BIT1_LCD BIT4 #define BIT2_LCD BIT5 #define BIT3_LCD BIT6 #define BIT4_LCD BIT7 #define PDIR_BIT1_LCD BIT4 #define PDIR_BIT2_LCD BIT5 #define PDIR_BIT3_LCD BIT6 #define PDIR_BIT4_LCD BIT7 /* Configuracion del Display y cursor */ #define DON 0X0F //0b00001111 /* Display encendido */ #define DOFF 0X0B //0b00001011 /* Display apagado */ #define CURSOR_HOME 0X02 //0b00000010 /* Cursor encendido */ #define CURSOR_ON 0X0F //0b00001111 /* Cursor encendido */ #define CURSOR_OFF 0X0C //0b00001100 /* Cursor apagado */ #define BLINK_ON 0X0F //0b00001111 /* Cursor con parpadeo */ #define BLINK_OFF 0X0E //0b00001110 /* Cursor sin parpadeo */ #define CLEAR 0X01 //0b00000001 /* Display encendido */ /* Modo de entrada */ #define INCREMENT 0X06 //0b00000110 /* Incrementa la posicion del cursor */ #define DECREMENT 0X04 //0b00000100 /* Decrementa la posicion del cursor */ /* Configuracion de los desplazamientos del cursor y del Display*/ #define SHIFT_CUR_LEFT 0X13 //0b00010011 /* Corrimiento del cursor a la izquierda */ #define SHIFT_CUR_RIGHT 0X17 //0b00010111 /* Corrimiento del cursor a la derecha */ #define SHIFT_DISP_LEFT 0X1B //0b00011011 /* Corrimiento del display a la izquierda */ #define SHIFT_DISP_RIGHT 0X1F //0b00011111 /* Corrimiento del display a la derecha */ /* Funciones de inicializacion */ #define NIBLE 0X02 //0b00000010 /* interface a 4 bits */ #define FOUR_BIT 0X2F //0b00101111 /* Interface a 4-bit */ #define EIGHT_BIT 0X3F //0b00111111 /* Interface a 8-bit */ #define LINE_5X7 0X33 //0b00110011 /* Una linea, caracter 5x7 */ #define LINE_5X10 0X37 //0b00110111 /* Una linea, caracter 5x10 */ #define LINES_5X7 0X3B //0b00111011 /* Dos lineas. character 5x7 */ /* Lineas de trabajo */ #define DDRAM_LINEA_1 0X80 //0b10000000 /* Linea 1 */ #define DDRAM_LINEA_2 0XC0 //0b11000000 /* Linea 2 */ #define DDRAM_LINEA_3 0X90 //0b10010000 /* Linea 3 */ #define DDRAM_LINEA_4 0XD0 //0b11010000 /* Linea 4 */ #define LN1 DDRAM_LINEA_1 #define LN2 DDRAM_LINEA_2 /// Configuracion del puerto // /////////////////////////////////////////////////////////////////////////////// //Prototipos de funciones /////////////////////////////////////////////////////////////////////////////// void Flex_port(unsigned char data); void Inicializa_LCD(void); /* Inicializa LCD */ void Comando_LCD(unsigned char dato); /* Indica al LCD un comando */ void Dato_LCD(unsigned char dato); /* Indica al LCD un caracter */ void Datos_LCD(const char *buffer); /* escribe una cadena desde la memoria de programa al LCD */ void Dato_String_LCD(char *buffer); /* escribe una cadena desde la memoria de datos al LCD */ void Dato_String_LCDEx(unsigned char xLine, char *buffer); void Dato_LCDEx(unsigned char xLine, const char *buffer); void GoToXY(unsigned char Line, unsigned char Position); void delay_us(unsigned int time); void clear_LCD(void); void delay_ms(unsigned int time); #endif /* LCD_V1_H_ */
-
The Chilango power got a reaction from chibiace in MSP430 and LCD16X2 My first project
Hola les muestro mi primer proyecto con MSP430 LaunchPad es un simple LCD 16X2
#include #include "LCD_v1.h" #define LED1 BIT0 #define LED2 BIT6 #define B1 BIT3 //void setup(void); unsigned char i; typedef char* cadena; int main(void) { cadena string; WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; P1REN = 0x00; P1SEL = 0x00; P1IE = 0x00; Inicializa_LCD(); while(1){ Comando_LCD(CLEAR); Dato_String_LCDEx(LN1," HOLA MUNDO "); Dato_String_LCDEx(LN2, " **MSP430** "); delay_ms(2000); Comando_LCD(CLEAR); Dato_String_LCDEx(LN1," HECHO POR "); Dato_String_LCDEx(LN2,"=> THE CHILANGO POWER"); for(i = 0;i < 8;i++){ Comando_LCD(SHIFT_DISP_RIGHT); delay_ms(400); } for(i = 0;i < 14;i++){ Comando_LCD(SHIFT_DISP_LEFT); delay_ms(400); } delay_ms(2000); string = "MSP430 LaunchPad "; Comando_LCD(CLEAR); while(*string){ Dato_LCD(*string++); delay_ms(300); } string = "DATE 27/08/2012"; GoToXY(2,1); while(*string){ Dato_LCD(*string++); delay_ms(300); } delay_ms(1000); for(i=0;i<5;i++){ Comando_LCD(DOFF); delay_ms(200); Comando_LCD(DON); delay_ms(200); } Comando_LCD(DON); delay_ms(1500); } }
/* * LCD_V1.c * * Created on: 13/08/2012 * Author: THE CHILANGO POWER */ #include "LCD_V1.h" //********************************************************** /* Inicializacion del LCD segun fabricante */ //********************************************************** void Inicializa_LCD(void){ PDIR_LCD = 0; POUT_LCD = 0; delay_ms(100); PDIR_LCD |= PDIR_BIT1_LCD | PDIR_BIT2_LCD | PDIR_BIT3_LCD | PDIR_BIT4_LCD; PDIR_LCD |= PDIR_PIN_RS | PDIR_PIN_E; POUT_LCD &= ~POUT_PIN_E; POUT_LCD &= ~POUT_PIN_RS; Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_ms(5); Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Flex_port(NIBLE); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Comando_LCD(0x28); Comando_LCD(0x08); Comando_LCD(0x01); // Comando_LCD(LINES_5X7 & FOUR_BIT); // Comando_LCD(DON & CURSOR_OFF & BLINK_OFF); // Comando_LCD(CLEAR); Comando_LCD(0x06); /* Entry Mode Set */ /* Incremento del cursor */ Comando_LCD(0x0C); return; } //********************************************************** /* Indica al LCD comandos */ //********************************************************** void Comando_LCD(unsigned char dato) { volatile unsigned char temp; /* variable auxiliar */ //delay_ms(10); /* Retardo de 10 mseg. */ POUT_LCD &=~POUT_PIN_RS; temp = dato; /* Respaldo del dato original */ dato = dato >> 4; /* Corrimiento del nible alto */ Flex_port(dato); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; Flex_port(temp); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; delay_us(2000); return; } //********************************************************** /* Manda datos al LCD */ //********************************************************** void Dato_LCD(unsigned char dato) { volatile unsigned char temp; /* variable auxiliar */ POUT_LCD |= POUT_PIN_RS; // delay_ms(10); /* Retardo de 10 mseg. */ temp = dato; /* Respaldo del dato original */ dato = dato >> 4; /* Corrimiento del nible alto */ Flex_port(dato); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; Flex_port(temp); delay_us(50); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; POUT_LCD &=~ POUT_PIN_RS; delay_us(50); return; } //********************************************************** // Escribe una cadena desde memoria de programa al LCD //********************************************************** void Datos_LCD(const char *buffer) { while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } //********************************************************** // Escribe una cadena desde memoria de datos al LCD //********************************************************** void Dato_String_LCD(char *buffer) { while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void Flex_port(unsigned char data){ POUT_LCD &= ~BIT1_LCD; POUT_LCD &= ~BIT2_LCD; POUT_LCD &= ~BIT3_LCD; POUT_LCD &= ~BIT4_LCD; if(data & BIT0)POUT_LCD |= BIT1_LCD; if(data & BIT1)POUT_LCD |= BIT2_LCD; if(data & BIT2)POUT_LCD |= BIT3_LCD; if(data & BIT3)POUT_LCD |= BIT4_LCD; return; } void Dato_String_LCDEx(unsigned char xLine, char *buffer) { Comando_LCD(xLine); while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void Dato_LCDEx(unsigned char xLine, const char *buffer) { Comando_LCD(xLine); while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void GoToXY(unsigned char Line, unsigned char Position) { switch(Line) { case 1: Position += 128; Comando_LCD(Position); break; case 2: Position +=167; Comando_LCD(Position); break; } return; } void clear_LCD(void){ Dato_String_LCDEx(LN1," "); Dato_String_LCDEx(LN2," "); GoToXY(1,0); return; } void delay_us(unsigned int time){ while(--time)__delay_cycles (1); return; } void delay_ms(unsigned int time){ while(--time)__delay_cycles (1000); return; }
#ifndef LCD_V1_H_ #define LCD_V1_H_ #include /* * File: LCD_v1.h * Author: THE CHILANGO POWER * * Created on 13 de julio de 2012, 03:32 PM */ // Manejo de un Display de Cristal Liquido LCD 16X4 // de 16 caracteres por 4 lineas, con una interface // de 4 lineas: // // Conexiones del LCD al Microcontrolador #define POUT_LCD P1OUT #define PDIR_LCD P1DIR #define POUT_PIN_RS BIT0 // Define la Columna 1 #define POUT_PIN_E BIT1 // Define la Columna 3 #define PDIR_PIN_RS BIT0 // Define la Columna 1 #define PDIR_PIN_E BIT1 // Define la Columna 3 #define BIT1_LCD BIT4 #define BIT2_LCD BIT5 #define BIT3_LCD BIT6 #define BIT4_LCD BIT7 #define PDIR_BIT1_LCD BIT4 #define PDIR_BIT2_LCD BIT5 #define PDIR_BIT3_LCD BIT6 #define PDIR_BIT4_LCD BIT7 /* Configuracion del Display y cursor */ #define DON 0X0F //0b00001111 /* Display encendido */ #define DOFF 0X0B //0b00001011 /* Display apagado */ #define CURSOR_HOME 0X02 //0b00000010 /* Cursor encendido */ #define CURSOR_ON 0X0F //0b00001111 /* Cursor encendido */ #define CURSOR_OFF 0X0C //0b00001100 /* Cursor apagado */ #define BLINK_ON 0X0F //0b00001111 /* Cursor con parpadeo */ #define BLINK_OFF 0X0E //0b00001110 /* Cursor sin parpadeo */ #define CLEAR 0X01 //0b00000001 /* Display encendido */ /* Modo de entrada */ #define INCREMENT 0X06 //0b00000110 /* Incrementa la posicion del cursor */ #define DECREMENT 0X04 //0b00000100 /* Decrementa la posicion del cursor */ /* Configuracion de los desplazamientos del cursor y del Display*/ #define SHIFT_CUR_LEFT 0X13 //0b00010011 /* Corrimiento del cursor a la izquierda */ #define SHIFT_CUR_RIGHT 0X17 //0b00010111 /* Corrimiento del cursor a la derecha */ #define SHIFT_DISP_LEFT 0X1B //0b00011011 /* Corrimiento del display a la izquierda */ #define SHIFT_DISP_RIGHT 0X1F //0b00011111 /* Corrimiento del display a la derecha */ /* Funciones de inicializacion */ #define NIBLE 0X02 //0b00000010 /* interface a 4 bits */ #define FOUR_BIT 0X2F //0b00101111 /* Interface a 4-bit */ #define EIGHT_BIT 0X3F //0b00111111 /* Interface a 8-bit */ #define LINE_5X7 0X33 //0b00110011 /* Una linea, caracter 5x7 */ #define LINE_5X10 0X37 //0b00110111 /* Una linea, caracter 5x10 */ #define LINES_5X7 0X3B //0b00111011 /* Dos lineas. character 5x7 */ /* Lineas de trabajo */ #define DDRAM_LINEA_1 0X80 //0b10000000 /* Linea 1 */ #define DDRAM_LINEA_2 0XC0 //0b11000000 /* Linea 2 */ #define DDRAM_LINEA_3 0X90 //0b10010000 /* Linea 3 */ #define DDRAM_LINEA_4 0XD0 //0b11010000 /* Linea 4 */ #define LN1 DDRAM_LINEA_1 #define LN2 DDRAM_LINEA_2 /// Configuracion del puerto // /////////////////////////////////////////////////////////////////////////////// //Prototipos de funciones /////////////////////////////////////////////////////////////////////////////// void Flex_port(unsigned char data); void Inicializa_LCD(void); /* Inicializa LCD */ void Comando_LCD(unsigned char dato); /* Indica al LCD un comando */ void Dato_LCD(unsigned char dato); /* Indica al LCD un caracter */ void Datos_LCD(const char *buffer); /* escribe una cadena desde la memoria de programa al LCD */ void Dato_String_LCD(char *buffer); /* escribe una cadena desde la memoria de datos al LCD */ void Dato_String_LCDEx(unsigned char xLine, char *buffer); void Dato_LCDEx(unsigned char xLine, const char *buffer); void GoToXY(unsigned char Line, unsigned char Position); void delay_us(unsigned int time); void clear_LCD(void); void delay_ms(unsigned int time); #endif /* LCD_V1_H_ */
-
The Chilango power got a reaction from bluehash in MSP430 and LCD16X2 My first project
Hola les muestro mi primer proyecto con MSP430 LaunchPad es un simple LCD 16X2
#include #include "LCD_v1.h" #define LED1 BIT0 #define LED2 BIT6 #define B1 BIT3 //void setup(void); unsigned char i; typedef char* cadena; int main(void) { cadena string; WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; P1REN = 0x00; P1SEL = 0x00; P1IE = 0x00; Inicializa_LCD(); while(1){ Comando_LCD(CLEAR); Dato_String_LCDEx(LN1," HOLA MUNDO "); Dato_String_LCDEx(LN2, " **MSP430** "); delay_ms(2000); Comando_LCD(CLEAR); Dato_String_LCDEx(LN1," HECHO POR "); Dato_String_LCDEx(LN2,"=> THE CHILANGO POWER"); for(i = 0;i < 8;i++){ Comando_LCD(SHIFT_DISP_RIGHT); delay_ms(400); } for(i = 0;i < 14;i++){ Comando_LCD(SHIFT_DISP_LEFT); delay_ms(400); } delay_ms(2000); string = "MSP430 LaunchPad "; Comando_LCD(CLEAR); while(*string){ Dato_LCD(*string++); delay_ms(300); } string = "DATE 27/08/2012"; GoToXY(2,1); while(*string){ Dato_LCD(*string++); delay_ms(300); } delay_ms(1000); for(i=0;i<5;i++){ Comando_LCD(DOFF); delay_ms(200); Comando_LCD(DON); delay_ms(200); } Comando_LCD(DON); delay_ms(1500); } }
/* * LCD_V1.c * * Created on: 13/08/2012 * Author: THE CHILANGO POWER */ #include "LCD_V1.h" //********************************************************** /* Inicializacion del LCD segun fabricante */ //********************************************************** void Inicializa_LCD(void){ PDIR_LCD = 0; POUT_LCD = 0; delay_ms(100); PDIR_LCD |= PDIR_BIT1_LCD | PDIR_BIT2_LCD | PDIR_BIT3_LCD | PDIR_BIT4_LCD; PDIR_LCD |= PDIR_PIN_RS | PDIR_PIN_E; POUT_LCD &= ~POUT_PIN_E; POUT_LCD &= ~POUT_PIN_RS; Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_ms(5); Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Flex_port(0X03); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Flex_port(NIBLE); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &= ~POUT_PIN_E; delay_us(160); Comando_LCD(0x28); Comando_LCD(0x08); Comando_LCD(0x01); // Comando_LCD(LINES_5X7 & FOUR_BIT); // Comando_LCD(DON & CURSOR_OFF & BLINK_OFF); // Comando_LCD(CLEAR); Comando_LCD(0x06); /* Entry Mode Set */ /* Incremento del cursor */ Comando_LCD(0x0C); return; } //********************************************************** /* Indica al LCD comandos */ //********************************************************** void Comando_LCD(unsigned char dato) { volatile unsigned char temp; /* variable auxiliar */ //delay_ms(10); /* Retardo de 10 mseg. */ POUT_LCD &=~POUT_PIN_RS; temp = dato; /* Respaldo del dato original */ dato = dato >> 4; /* Corrimiento del nible alto */ Flex_port(dato); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; Flex_port(temp); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; delay_us(2000); return; } //********************************************************** /* Manda datos al LCD */ //********************************************************** void Dato_LCD(unsigned char dato) { volatile unsigned char temp; /* variable auxiliar */ POUT_LCD |= POUT_PIN_RS; // delay_ms(10); /* Retardo de 10 mseg. */ temp = dato; /* Respaldo del dato original */ dato = dato >> 4; /* Corrimiento del nible alto */ Flex_port(dato); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; Flex_port(temp); delay_us(50); POUT_LCD |= POUT_PIN_E; delay_us(1); POUT_LCD &=~POUT_PIN_E; POUT_LCD &=~ POUT_PIN_RS; delay_us(50); return; } //********************************************************** // Escribe una cadena desde memoria de programa al LCD //********************************************************** void Datos_LCD(const char *buffer) { while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } //********************************************************** // Escribe una cadena desde memoria de datos al LCD //********************************************************** void Dato_String_LCD(char *buffer) { while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void Flex_port(unsigned char data){ POUT_LCD &= ~BIT1_LCD; POUT_LCD &= ~BIT2_LCD; POUT_LCD &= ~BIT3_LCD; POUT_LCD &= ~BIT4_LCD; if(data & BIT0)POUT_LCD |= BIT1_LCD; if(data & BIT1)POUT_LCD |= BIT2_LCD; if(data & BIT2)POUT_LCD |= BIT3_LCD; if(data & BIT3)POUT_LCD |= BIT4_LCD; return; } void Dato_String_LCDEx(unsigned char xLine, char *buffer) { Comando_LCD(xLine); while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void Dato_LCDEx(unsigned char xLine, const char *buffer) { Comando_LCD(xLine); while(*buffer) // Write data to LCD up to null { Dato_LCD(*buffer); // Write character to LCD buffer++; // Increment buffer } return; } void GoToXY(unsigned char Line, unsigned char Position) { switch(Line) { case 1: Position += 128; Comando_LCD(Position); break; case 2: Position +=167; Comando_LCD(Position); break; } return; } void clear_LCD(void){ Dato_String_LCDEx(LN1," "); Dato_String_LCDEx(LN2," "); GoToXY(1,0); return; } void delay_us(unsigned int time){ while(--time)__delay_cycles (1); return; } void delay_ms(unsigned int time){ while(--time)__delay_cycles (1000); return; }
#ifndef LCD_V1_H_ #define LCD_V1_H_ #include /* * File: LCD_v1.h * Author: THE CHILANGO POWER * * Created on 13 de julio de 2012, 03:32 PM */ // Manejo de un Display de Cristal Liquido LCD 16X4 // de 16 caracteres por 4 lineas, con una interface // de 4 lineas: // // Conexiones del LCD al Microcontrolador #define POUT_LCD P1OUT #define PDIR_LCD P1DIR #define POUT_PIN_RS BIT0 // Define la Columna 1 #define POUT_PIN_E BIT1 // Define la Columna 3 #define PDIR_PIN_RS BIT0 // Define la Columna 1 #define PDIR_PIN_E BIT1 // Define la Columna 3 #define BIT1_LCD BIT4 #define BIT2_LCD BIT5 #define BIT3_LCD BIT6 #define BIT4_LCD BIT7 #define PDIR_BIT1_LCD BIT4 #define PDIR_BIT2_LCD BIT5 #define PDIR_BIT3_LCD BIT6 #define PDIR_BIT4_LCD BIT7 /* Configuracion del Display y cursor */ #define DON 0X0F //0b00001111 /* Display encendido */ #define DOFF 0X0B //0b00001011 /* Display apagado */ #define CURSOR_HOME 0X02 //0b00000010 /* Cursor encendido */ #define CURSOR_ON 0X0F //0b00001111 /* Cursor encendido */ #define CURSOR_OFF 0X0C //0b00001100 /* Cursor apagado */ #define BLINK_ON 0X0F //0b00001111 /* Cursor con parpadeo */ #define BLINK_OFF 0X0E //0b00001110 /* Cursor sin parpadeo */ #define CLEAR 0X01 //0b00000001 /* Display encendido */ /* Modo de entrada */ #define INCREMENT 0X06 //0b00000110 /* Incrementa la posicion del cursor */ #define DECREMENT 0X04 //0b00000100 /* Decrementa la posicion del cursor */ /* Configuracion de los desplazamientos del cursor y del Display*/ #define SHIFT_CUR_LEFT 0X13 //0b00010011 /* Corrimiento del cursor a la izquierda */ #define SHIFT_CUR_RIGHT 0X17 //0b00010111 /* Corrimiento del cursor a la derecha */ #define SHIFT_DISP_LEFT 0X1B //0b00011011 /* Corrimiento del display a la izquierda */ #define SHIFT_DISP_RIGHT 0X1F //0b00011111 /* Corrimiento del display a la derecha */ /* Funciones de inicializacion */ #define NIBLE 0X02 //0b00000010 /* interface a 4 bits */ #define FOUR_BIT 0X2F //0b00101111 /* Interface a 4-bit */ #define EIGHT_BIT 0X3F //0b00111111 /* Interface a 8-bit */ #define LINE_5X7 0X33 //0b00110011 /* Una linea, caracter 5x7 */ #define LINE_5X10 0X37 //0b00110111 /* Una linea, caracter 5x10 */ #define LINES_5X7 0X3B //0b00111011 /* Dos lineas. character 5x7 */ /* Lineas de trabajo */ #define DDRAM_LINEA_1 0X80 //0b10000000 /* Linea 1 */ #define DDRAM_LINEA_2 0XC0 //0b11000000 /* Linea 2 */ #define DDRAM_LINEA_3 0X90 //0b10010000 /* Linea 3 */ #define DDRAM_LINEA_4 0XD0 //0b11010000 /* Linea 4 */ #define LN1 DDRAM_LINEA_1 #define LN2 DDRAM_LINEA_2 /// Configuracion del puerto // /////////////////////////////////////////////////////////////////////////////// //Prototipos de funciones /////////////////////////////////////////////////////////////////////////////// void Flex_port(unsigned char data); void Inicializa_LCD(void); /* Inicializa LCD */ void Comando_LCD(unsigned char dato); /* Indica al LCD un comando */ void Dato_LCD(unsigned char dato); /* Indica al LCD un caracter */ void Datos_LCD(const char *buffer); /* escribe una cadena desde la memoria de programa al LCD */ void Dato_String_LCD(char *buffer); /* escribe una cadena desde la memoria de datos al LCD */ void Dato_String_LCDEx(unsigned char xLine, char *buffer); void Dato_LCDEx(unsigned char xLine, const char *buffer); void GoToXY(unsigned char Line, unsigned char Position); void delay_us(unsigned int time); void clear_LCD(void); void delay_ms(unsigned int time); #endif /* LCD_V1_H_ */