提交SMOD ATSC IMX APP版本 V122
This commit is contained in:
Executable
+306
@@ -0,0 +1,306 @@
|
||||
#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**************************************/
|
||||
|
||||
|
||||
Reference in New Issue
Block a user