307 lines
6.0 KiB
C
Executable File
307 lines
6.0 KiB
C
Executable File
#include <string.h>
|
|
#include <stdio.h>
|
|
|
|
#include "../inc/type.h"
|
|
#include "../inc/config.h"
|
|
#include "../inc/lcd.h"
|
|
#include "../inc/os_task.h"
|
|
#include "../inc/delay.h"
|
|
#include "../inc/isys_com.h"
|
|
|
|
|
|
#if USE_LCD_CACHE
|
|
static char lcd_cache[2][42];
|
|
#endif
|
|
|
|
#define LCD_HW_SUPPORT_CHAR_TYPE 88
|
|
|
|
uint8 lcd_show_char[LCD_HW_SUPPORT_CHAR_TYPE] =
|
|
{
|
|
'!','$','$','%','&','(',')','*','+',',','-','.',
|
|
'0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?',
|
|
'@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
|
|
'P','Q','R','S','T','U','V','W','X','Y','Z','[',']','^','_',
|
|
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p',
|
|
'q','r','s','t','u','v','w','x','y','z','{','|','}'
|
|
};
|
|
|
|
const uint32 c_lcd_gpio_arry[8]=
|
|
{
|
|
LCD_D0_GP_NUM,
|
|
LCD_D1_GP_NUM,
|
|
LCD_D2_GP_NUM,
|
|
LCD_D3_GP_NUM,
|
|
LCD_D4_GP_NUM,
|
|
LCD_D5_GP_NUM,
|
|
LCD_D6_GP_NUM,
|
|
LCD_D7_GP_NUM
|
|
};
|
|
|
|
|
|
static void LCD_EN_SET(void)
|
|
{
|
|
set_gpio_value(LCD_E_GP_NUM, E_IO_H);
|
|
}
|
|
static void LCD_EN_CLEAR(void)
|
|
{
|
|
set_gpio_value(LCD_E_GP_NUM, E_IO_L);
|
|
}
|
|
|
|
static void LCD_RW_CLEAR(void)
|
|
{
|
|
set_gpio_value(LCD_RW_GP_NUM, E_IO_L);
|
|
}
|
|
|
|
static void LCD_RS_SET(void)
|
|
{
|
|
set_gpio_value(LCD_RS_GP_NUM, E_IO_H);
|
|
}
|
|
static void LCD_RS_CLEAR(void)
|
|
{
|
|
set_gpio_value(LCD_RS_GP_NUM, E_IO_L);
|
|
}
|
|
|
|
static void LCD_EN_Write(void)
|
|
{
|
|
LCD_EN_SET();
|
|
delay_us(20);
|
|
LCD_EN_CLEAR();
|
|
delay_us(20);
|
|
}
|
|
|
|
static void Lcd_Write_Data(uint8 LCD_DATA)
|
|
{
|
|
uint16 data;
|
|
uint8 temp;
|
|
uint8 i;
|
|
|
|
LCD_RW_CLEAR();
|
|
LCD_RS_SET();
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
temp = (LCD_DATA >> i) & 0x01;
|
|
set_gpio_value(c_lcd_gpio_arry[i], (E_IO_VAL)temp);
|
|
}
|
|
LCD_EN_Write();
|
|
}
|
|
|
|
static void Lcd_Write_Cmd(uint8 LCD_CMD)
|
|
{
|
|
uint16 data;
|
|
uint8 temp;
|
|
uint8 i;
|
|
|
|
LCD_RW_CLEAR();
|
|
LCD_RS_CLEAR();
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
temp = (LCD_CMD >> i) & 0x01;
|
|
set_gpio_value(c_lcd_gpio_arry[i], (E_IO_VAL)temp);
|
|
}
|
|
LCD_EN_Write();
|
|
}
|
|
|
|
#define LCD_INIT_TIME 3//
|
|
|
|
void lcd_init(void)
|
|
{
|
|
int i = 0;
|
|
|
|
log_printf(LOG_INFO, I_SYS_STATUS, "init lcd display.\n");
|
|
do {
|
|
//delay_ms(150);
|
|
Lcd_Write_Cmd(0x38);
|
|
delay_ms(1);
|
|
Lcd_Write_Cmd(0x0c);
|
|
delay_ms(1);
|
|
Lcd_Write_Cmd(0x01);
|
|
delay_ms(500);
|
|
}while(++i<LCD_INIT_TIME);
|
|
log_printf(LOG_INFO, I_SYS_STATUS, "over. init lcd display.\n");
|
|
}
|
|
|
|
|
|
static void LCD_SET_XY(uint8 x,uint8 y)
|
|
{
|
|
if(x==0)
|
|
{
|
|
Lcd_Write_Cmd(0x80+y);
|
|
}
|
|
else
|
|
{
|
|
Lcd_Write_Cmd(0xc0+y);
|
|
}
|
|
}
|
|
|
|
void lcd_write_arrow(uint32 x,uint32 y,ARROW_DIRECTON direct)
|
|
{
|
|
#if USE_LCD_CACHE
|
|
if(direct==ARROW_LEFT)
|
|
{
|
|
lcd_cache[x][y]=0x7f;
|
|
#if ARROW_CHAR_NUM==2
|
|
lcd_cache[x][y+1]=0x2d;
|
|
#endif
|
|
}
|
|
else if(direct==ARROW_RIGHT)
|
|
{
|
|
#if ARROW_CHAR_NUM==2
|
|
lcd_cache[x][y]=0x2d;
|
|
lcd_cache[x][y+1]=0x7e;
|
|
#else
|
|
lcd_cache[x][y]=0x7e;
|
|
#endif
|
|
}
|
|
#else
|
|
if(direct==ARROW_LEFT)
|
|
{
|
|
LCD_SET_XY(x,y);
|
|
delay_us(5);
|
|
Lcd_Write_Data(0x7f);
|
|
#if ARROW_CHAR_NUM==2
|
|
Lcd_Write_Data(0x2D);
|
|
#endif
|
|
}
|
|
else if(direct==ARROW_RIGHT)
|
|
{
|
|
LCD_SET_XY(x,y);
|
|
delay_us(5);
|
|
#if ARROW_CHAR_NUM==2
|
|
Lcd_Write_Data(0x2D);
|
|
#endif
|
|
Lcd_Write_Data(0x7e);
|
|
}
|
|
#endif
|
|
}
|
|
void lcd_write_temp_f(uint8 x,uint8 y)
|
|
{
|
|
#if USE_LCD_CACHE
|
|
if((x==LINE_1)||(x==LINE_2))
|
|
{
|
|
lcd_cache[x][y]=0xdf;
|
|
lcd_cache[x][y+1]='F';
|
|
}
|
|
#else
|
|
LCD_SET_XY(x,y);
|
|
delay_us(5);
|
|
Lcd_Write_Data(0xdf);
|
|
Lcd_Write_Data('F');
|
|
#endif
|
|
}
|
|
void lcd_write_temp_c(uint8 x,uint8 y)
|
|
{
|
|
#if USE_LCD_CACHE
|
|
if((x==LINE_1)||(x==LINE_2))
|
|
{
|
|
lcd_cache[x][y]=0xdf;
|
|
lcd_cache[x][y+1]='C';
|
|
}
|
|
#else
|
|
LCD_SET_XY(x,y);
|
|
delay_us(5);
|
|
Lcd_Write_Data(0xdf);
|
|
Lcd_Write_Data('C');
|
|
#endif
|
|
}
|
|
|
|
|
|
void lcd_write_string(uint8 X,uint8 Y,void *s)
|
|
{
|
|
#if USE_LCD_CACHE
|
|
uint32 i = 0;
|
|
char *pstr = (char*)s;
|
|
|
|
if(1)//sys_ready
|
|
{
|
|
if(X==LINE_1)
|
|
{
|
|
i = strlen((const char *)pstr)>LCD_CHAR_NUM-Y?LCD_CHAR_NUM-Y:strlen((const char *)pstr);
|
|
memcpy(&lcd_cache[0][Y],pstr,i);
|
|
}
|
|
if(X==LINE_2)
|
|
{
|
|
i = strlen((const char *)pstr)>LCD_CHAR_NUM-Y?LCD_CHAR_NUM-Y:strlen((const char *)pstr);
|
|
memcpy(&lcd_cache[1][Y],pstr,i);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
LCD_SET_XY( X, Y );
|
|
delay_us(10);
|
|
while(*pstr)
|
|
{
|
|
Lcd_Write_Data(*pstr++);
|
|
}
|
|
}
|
|
#else
|
|
char *pstr = (char*)s;
|
|
|
|
LCD_SET_XY( X, Y );
|
|
delay_us(10);
|
|
while(*pstr)
|
|
{
|
|
Lcd_Write_Data(*pstr++);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void lcd_write_cache(void)
|
|
{
|
|
#if USE_LCD_CACHE
|
|
uint32 i = 0;
|
|
|
|
if(1)//sys_ready
|
|
{
|
|
LCD_SET_XY(0,0);
|
|
delay_us(10);
|
|
for(i=0;i<LCD_CHAR_NUM;i++)
|
|
{
|
|
Lcd_Write_Data(lcd_cache[0][i]);
|
|
}
|
|
|
|
LCD_SET_XY(1,0);
|
|
delay_us(10);
|
|
for(i=0;i<LCD_CHAR_NUM;i++)
|
|
{
|
|
Lcd_Write_Data(lcd_cache[1][i]);
|
|
}
|
|
}
|
|
#else
|
|
#endif
|
|
}
|
|
|
|
/***********************************/
|
|
// LCD backup light control
|
|
/***********************************/
|
|
|
|
//turn on the light
|
|
void light_on(void)
|
|
{
|
|
//log_printf(LOG_INFO, I_SYS_STATUS, "Turn on LCD light\n");
|
|
set_gpio_value(LCD_CTL_GP_NUM, E_IO_H);
|
|
}
|
|
|
|
void light_off(void)
|
|
{
|
|
log_printf(LOG_INFO, I_SYS_STATUS, "Turn off LCD light\n");
|
|
set_gpio_value(LCD_CTL_GP_NUM, E_IO_L);
|
|
}
|
|
|
|
|
|
|
|
void set_gpio_fpga_reset(uint8 set_val)
|
|
{
|
|
|
|
if(set_val==1){
|
|
printf("set_gpio_fpga_reset High\n");
|
|
set_gpio_value(FPGA_RST_GP_NUM, E_IO_H);
|
|
}
|
|
else{
|
|
printf("set_gpio_fpga_reset Low\n");
|
|
set_gpio_value(FPGA_RST_GP_NUM, E_IO_L);
|
|
}
|
|
}
|
|
/**********************************************END**************************************/
|
|
|
|
|