You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
4.6 KiB
156 lines
4.6 KiB
2 years ago
|
/*
|
||
|
* lib_ENS_II1_lcd.c
|
||
|
*
|
||
|
* Created on: 9 oct. 2018
|
||
|
* Modified on sept 2019
|
||
|
* Author: juton
|
||
|
*/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include "fro.h"
|
||
|
#include "rom_api.h"
|
||
|
#include "syscon.h"
|
||
|
#include "swm.h"
|
||
|
#include "i2c.h"
|
||
|
#include "lib_ENS_II1_lcd.h"
|
||
|
|
||
|
void init_lcd(void){
|
||
|
|
||
|
uint32_t i;
|
||
|
uint8_t I2CMasterBuffer[BUFSIZE];
|
||
|
uint32_t I2CWriteLength;
|
||
|
|
||
|
// Provide main_clk as function clock to I2C0
|
||
|
LPC_SYSCON->I2C0CLKSEL = FCLKSEL_MAIN_CLK;
|
||
|
|
||
|
LPC_SYSCON->SYSAHBCLKCTRL0 |= I2C0|SWM;
|
||
|
|
||
|
//configuration des pins 7 (SDA) et 14 (SCL) en open_drain
|
||
|
LPC_IOCON->PIO0_7 = 0x000004A0;
|
||
|
LPC_IOCON->PIO0_14 = 0x000004A0;
|
||
|
|
||
|
//assignation des pins 7 à SDA et 14 à SCL
|
||
|
LPC_SWM->PINASSIGN5 = 0xFFFF0E07;
|
||
|
|
||
|
// Give I2C0 a reset
|
||
|
LPC_SYSCON->PRESETCTRL0 &= (I2C0_RST_N);
|
||
|
LPC_SYSCON->PRESETCTRL0 |= ~(I2C0_RST_N);
|
||
|
|
||
|
//horloge I2c
|
||
|
LPC_I2C0->DIV = 1;
|
||
|
LPC_I2C0->CFG = CFG_MSTENA;
|
||
|
|
||
|
for(i=0;i<8000;i++);
|
||
|
WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE); // Wait for the master state to be idle
|
||
|
I2CWriteLength = 1;
|
||
|
I2CMasterBuffer[0] = LCD_ADDR;
|
||
|
I2CMasterBuffer[1] = 0x00;
|
||
|
I2CMasterBuffer[2] = 0x38; /* configuration value, no change from default */
|
||
|
I2CmasterWrite( I2CMasterBuffer, I2CWriteLength );
|
||
|
for(i=0;i<8000;i++);
|
||
|
|
||
|
WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE); // Wait for the master state to be idle
|
||
|
I2CWriteLength = 2;
|
||
|
I2CMasterBuffer[0] = LCD_ADDR;
|
||
|
I2CMasterBuffer[1] = 0x00;
|
||
|
I2CMasterBuffer[2] = 0x39;
|
||
|
I2CmasterWrite( I2CMasterBuffer, I2CWriteLength );
|
||
|
for(i=0;i<8000;i++);
|
||
|
|
||
|
WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE); // Wait for the master state to be idle
|
||
|
I2CMasterBuffer[2] = 0x14;
|
||
|
I2CmasterWrite( I2CMasterBuffer, I2CWriteLength );
|
||
|
for(i=0;i<8000;i++);
|
||
|
|
||
|
WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE); // Wait for the master state to be idle
|
||
|
I2CMasterBuffer[2] = 0x74; //contrast
|
||
|
I2CmasterWrite( I2CMasterBuffer, I2CWriteLength );
|
||
|
for(i=0;i<8000;i++);
|
||
|
|
||
|
WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE); // Wait for the master state to be idle
|
||
|
I2CMasterBuffer[2] = 0x54;
|
||
|
I2CmasterWrite( I2CMasterBuffer, I2CWriteLength );
|
||
|
for(i=0;i<8000;i++);
|
||
|
|
||
|
WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE); // Wait for the master state to be idle
|
||
|
I2CMasterBuffer[2] = 0x6F; //follower
|
||
|
I2CmasterWrite( I2CMasterBuffer, I2CWriteLength );
|
||
|
for(i=0;i<8000;i++);
|
||
|
|
||
|
WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE); // Wait for the master state to be idle
|
||
|
I2CMasterBuffer[2] = 0x0E;
|
||
|
I2CmasterWrite( I2CMasterBuffer, I2CWriteLength );
|
||
|
for(i=0;i<8000;i++);
|
||
|
|
||
|
WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE); // Wait for the master state to be idle
|
||
|
I2CMasterBuffer[2] = 0x01;
|
||
|
I2CmasterWrite( I2CMasterBuffer, I2CWriteLength );
|
||
|
for(i=0;i<8000;i++);
|
||
|
|
||
|
WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE); // Wait for the master state to be idle
|
||
|
I2CMasterBuffer[2] = 0x06;
|
||
|
I2CmasterWrite( I2CMasterBuffer, I2CWriteLength );
|
||
|
for(i=0;i<8000;i++);
|
||
|
|
||
|
WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE); // Wait for the master state to be idle
|
||
|
I2CMasterBuffer[2] = 0x02;
|
||
|
I2CmasterWrite( I2CMasterBuffer, I2CWriteLength );
|
||
|
for(i=0;i<8000;i++);
|
||
|
}
|
||
|
|
||
|
void lcd_puts(char* text_input)
|
||
|
{
|
||
|
uint8_t I2CMasterBuffer[BUFSIZE];
|
||
|
uint32_t I2CWriteLength;
|
||
|
int i=0;
|
||
|
while(text_input[i]!=0)
|
||
|
{
|
||
|
WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE); // Wait for the master state to be idle
|
||
|
I2CWriteLength = 2;
|
||
|
I2CMasterBuffer[0] = LCD_ADDR;
|
||
|
I2CMasterBuffer[1] = 0x40;
|
||
|
I2CMasterBuffer[2] = text_input[i];
|
||
|
I2CmasterWrite( I2CMasterBuffer, I2CWriteLength );
|
||
|
i++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void lcd_putc(char c)
|
||
|
{
|
||
|
uint8_t I2CMasterBuffer[BUFSIZE];
|
||
|
uint32_t I2CWriteLength;
|
||
|
WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE); // Wait for the master state to be idle
|
||
|
I2CWriteLength = 2;
|
||
|
I2CMasterBuffer[0] = LCD_ADDR;
|
||
|
I2CMasterBuffer[1] = 0x40;
|
||
|
I2CMasterBuffer[2] = c;
|
||
|
I2CmasterWrite( I2CMasterBuffer, I2CWriteLength );
|
||
|
}
|
||
|
|
||
|
void lcd_gohome(void){
|
||
|
uint8_t I2CMasterBuffer[BUFSIZE];
|
||
|
uint32_t I2CWriteLength,i;
|
||
|
WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE); // Wait for the master state to be idle
|
||
|
I2CWriteLength = 2;
|
||
|
I2CMasterBuffer[0] = LCD_ADDR;
|
||
|
I2CMasterBuffer[1] = 0x0;
|
||
|
I2CMasterBuffer[2] = 0x02;
|
||
|
I2CmasterWrite( I2CMasterBuffer, I2CWriteLength );
|
||
|
for(i=0;i<8000;i++);
|
||
|
}
|
||
|
|
||
|
void lcd_position(char ligne, char colonne){
|
||
|
uint8_t I2CMasterBuffer[BUFSIZE];
|
||
|
uint32_t I2CWriteLength;
|
||
|
char cmd;
|
||
|
if (ligne > 1) ligne=1;
|
||
|
if (colonne >16) colonne = 16;
|
||
|
cmd = 0x80+(ligne*0x40)+colonne;
|
||
|
WaitI2CMasterState(LPC_I2C0, I2C_STAT_MSTST_IDLE); // Wait for the master state to be idle
|
||
|
I2CWriteLength = 2;
|
||
|
I2CMasterBuffer[0] = LCD_ADDR;
|
||
|
I2CMasterBuffer[1] = 0x0;
|
||
|
I2CMasterBuffer[2] = cmd;
|
||
|
I2CmasterWrite( I2CMasterBuffer, I2CWriteLength );
|
||
|
}
|