2. 点屏示例(LVDS)

本章节主要介绍点亮LVDS 2Port接口的模组,显示 SD 卡.BMP 图片、程序代码产生的画面,按键上翻 下翻 切换画面、 ON/OFF 开关显示。

主要内容: - 1 硬件初始化

  • 2 初始化IO口,设置IO口电压。

  • 3 LCD 参数设置。包括接口模式,分辨率,RGB 时序(Video mode)

  • 4 加载画面。调用 SD 卡.BMP (必须是 24 位 bmp),和代码产生规则画面。

  • 5 实现 按键“上翻”、“下翻”切换画面,ON/OFF 开关显示

注意

while 循环里需要放置10ms的延时,来维持系统的正常运行。

2.1. 硬件初始化

初始化K2000板载各种外设,电源板,背光板,信号板。

############硬件初始化###############
bsp_info = SHARP_Bsp_Init()
SHARP_user.Power_Flag = bsp_info.Power_Flag

2.2. 初始化IO口,设置IO口电压

设置IO口电压

SHARP_IOVOL_Set(SHARP_user.Power_Flag,1.8)

初始化IO口

def IO_Configuration():
    user_io = str_user_io()
    user_io.IO_PIN = LCD_TXS_OE|IO_ON|IO_RESX|IO_TP_RST
    user_io.IO_Mode = OUTPUT_DIR
    SHARP_UserIO_Conf(user_io)
    SHARP_UserIO_BitSet(LCD_TXS_OE)       #使能转换IC

2.3. LCD 屏幕参数设置

点屏前需要对屏幕参数设置,通过配置 lvds_panel_par 点屏参数类对象,并通过 SHARP_Display_Lvds_Init 方法生效。

点屏参数类 具体有以下几个参数:

pclk:屏幕pclk时钟 单位:Mhz,支持小数

h_active:水平同步信号的的有效像素

h_pulse_width:水平同步信号的脉冲宽度

h_front_porch: 水平同步信号的前沿

h_back_porch: 水平同步信号的前沿

v_active: 垂直同步信号的有效像素

v_pulse_width: 垂直同步信号的脉冲宽度

v_front_porch: 垂直同步信号的前沿

v_back_porch: 垂直同步信号的后沿

bit_mode: 数据位数

  • MiPi_18_BIT = 0 # 18 Bit

  • MiPi_24_BIT = 1 # 24 Bit

  • MiPi_30_BIT = 2 # 30 Bit

pclk_edge: pclk锁存边缘

  • MiPi_FALLING_EDGE = 0 # 下降沿锁存数据

  • MiPi_RISING_EDGE = 1 # 上升沿锁存数据

h_active_edge: 水平同步信号的有效电平

  • MiPi_LOW_ACTIVE = 0 # 低电平有效

  • MiPi_HIGH_ACTIVE = 1 # 高电平有效

v_active_edge: 垂直同步信号的有效电平

  • MiPi_LOW_ACTIVE = 0 # 低电平有效

  • MiPi_HIGH_ACTIVE = 1 # 高电平有效

de_active_edge: de脉冲有效电平

  • MiPi_LOW_ACTIVE = 0 # 低电平有效

  • MiPi_HIGH_ACTIVE = 1 # 高电平有效

display_mode: 显示模式

  • LVDS_1Port_Display = 0 # 1port

  • LVDS_2Port_Display = 1 # 2port

  • LVDS_3Port_Display = 2 # 3port

  • LVDS_4Port_Display = 3 # 4port

  • LVDS_2Port_Split_Display = 4 # 2port 左右分屏

  • LVDS_3Port_Split_Display = 5 # 3port 三分屏

  • LVDS_4Port_Split_Display = 6 # 4port 左右分屏

dat_format: 数据格式

  • LVDS_VESA = 0 # 标准显示

  • LVDS_JEIDA = 1 # JEIDA格式

rgb_dir: RGB方向

  • LVDS_DIR_RGB = 0 # RGB

  • LVDS_DIR_BGR = 1 # BGR

port_dir: port顺序

  • LVDS_PortDir_Normal = 0 #port顺序正向

  • LVDS_PortDir_Opposite = 1 #port顺序反向

port_group: port组合

  • LVDS_PortGroup_Left = 0 #靠左组合port

  • LVDS_PortGroup_Right = 1 #靠右组合port

更多详情可参考 LVDS点屏模块

def parameter_settings():

    # ''' 点屏参数配置 '''
    LVDS_struct = lvds_panel_par()

    LVDS_struct.autoPanelFre = 60  # 屏幕刷新率 ,此值设置之后,pclk设置无效
    LVDS_struct.pclk = 69  # PCLK时钟

    LVDS_struct.h_active = 1920  # 水平的有效像素
    LVDS_struct.h_back_porch = 60  # 水平的后沿
    LVDS_struct.h_front_porch = 90  # 水平的前沿
    LVDS_struct.h_pulse_width = 30  # 水平的脉冲

    LVDS_struct.v_active = 1080  # 垂直的有效像素
    LVDS_struct.v_back_porch = 8  # 垂直的后沿
    LVDS_struct.v_front_porch = 8  # 垂直的前沿
    LVDS_struct.v_pulse_width = 5  # 垂直的脉冲

    LVDS_struct.display_mode = LVDS_2Port_Display  # 显示模式
    LVDS_struct.bit_mode = LVDS_24_BIT  # 数据位数
    LVDS_struct.dat_format = LVDS_VESA  # 数据格式
    LVDS_struct.rgb_dir = LVDS_DIR_RGB  # RGB方向

    LVDS_struct.pclk_edge = LVDS_RISING_EDGE  # pclk锁存边缘
    LVDS_struct.h_active_edge = LVDS_LOW_ACTIVE  # h脉冲有效电平
    LVDS_struct.v_active_edge = LVDS_LOW_ACTIVE  # v脉冲有效电平
    LVDS_struct.de_active_edge = LVDS_HIGH_ACTIVE  # de脉冲有效电平

    SHARP_Display_Lvds_Init(LVDS_struct.autoPanelFre, LVDS_struct)

2.4. 加载画面

K2000的画面,需要开机先预加载。

  • 1.方法 SHARP_GPU_LoadFrame(frame) 用于声明要开始加载画面了,其参数指定了加载的画面为第几张画面。

  • 2.加载的画面数据可来自 SD 卡图片或程序代码产生的画面。

    • 加载来自 SD 卡的图像,可以为.bmp 格式的图片或经过转换的二进制(.BIN)文件。使用的方法为 SHARP_SDCard_BMP(file_name)SHARP_SDCard_BIN(file_name),这两个方法位于 通用上位机 模块中

    • 若要加载程序代码编写的画面,在 通用上位机 模块中 我们有提供了一些程序代码编写的规则画面.

  • 3.类对象 SHARP_user 里 列表 rame_hold_ms 表示切换画面时画面显示的时间,单位 ms。

  • 4.类对象 SHARP_user 里 变量 auto_switch_mode 表示画面模式, 0--手动 1--自动

注意

if(P[0] == 0xC0 && P[1] == 0x00 && P[2] == 0x00)

目前K2000还不支持预加载用户自行编写的画面,相信在不远的将来能实现这个功能。

SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Full(255, 255, 255)
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1

SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Full(255, 0, 0)
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1

SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Full(0, 255, 0)
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1

SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Full(0, 0, 255)
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1

SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_GREEN256_H()
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1

SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_RED256_H()
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1

SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_BLUE256_H()
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1

SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_SDCard_BMP('/sdcard/1_1920_1080.bmp')
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1

SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_SDCard_BMP('/sdcard/2_1920_1080.bmp')
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1

SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_SDCard_BMP('/sdcard/3_1920_1080.bmp')
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1

2.5. 上下电控制

设置液晶模组所需的电源电压、背光电流,输出图像信号等。体现在 Display_ON_Trad() 和 Display_OFF()两个函数。

设置电源电压

设置某VDD通道电压使用的方法为 SHARP_POWER_SetVDD(group, ch, v)

group:选中板子。类对象 SHARP_user里的变量 Power_Flag 为默认已接上的板子。 ch :通道号, =1 代表VDD1 v :要输出的电压值,单位V,精度 0.1V

更多电源功能函数使用可参考 电源板功能

输出图像信号

输出图像信号使用的方法为 SHARP_UserLvds_ON(index = None)

# 上电时序
def Display_ON_Trad():

    print('Display ON')

   ############### 设置各路电压上限 ################
    SHARP_POWER_SetVDDLimit(SHARP_user.Power_Flag,1,2000)
    SHARP_POWER_SetVDDLimit(SHARP_user.Power_Flag,2,2000)

    SHARP_POWER_SetVDDLimit(SHARP_user.Power_Flag,3,2000)
    SHARP_POWER_SetVDDLimit(SHARP_user.Power_Flag,4,2000)


    ############### 设置电压 ################
    ret=SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 1, 3.3)
    if ret !=0:
        print('VDD%d NG'%(1))

    ret=SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 2, 12)
    if ret !=0:
        print('VDD%d NG'%(2))

    Delay_ms(5)
    SwitchFrame(SHARP_user.frame)

    SHARP_UserLvds_ON()
    SHARP_Delay_ms(100)

    for i in range(1,13):
        SHARP_LED_SetI(SHARP_user.Power_Flag, i, 10)

    SHARP_Delay_ms(100)

    ret,Error_info = SHARP_LED_ON(SHARP_user.Power_Flag, 0xff)
    for i in range(4):      #适用一拖四 Error_info[0] 1号机 Error_info[0] 1号机
        if Error_info[i]<0:
            print('LED_ON %d NG Error = %d'%(i,Error_info[i]))

    SHARP_user.display_on = 1


# 下电时序
def Display_OFF():
    print('Display OFF')

    ret= SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 1, 0)
    if ret !=0:
        print('VDD%d NG'%(1))
    ret= SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 2, 0)
    if ret !=0:
        print('VDD%d NG'%(2))

    UserLvds_OFF()

    LED_OFF(SHARP_user.Power_Flag)

    SHARP_user.frame=0
    SHARP_user.display_on = 0

2.6. 按键控制程序

按键需要实时回读,实时处理.因此需要放在while循环里执行。

#按键读
while True:

    SHARP_Delay_ms(10)

    key_str = SHARP_read_key_lift(500)

    if key_str.find('key_onoff_lift') != -1:

        if SHARP_user.display_on == 0 :
            print('KEY_ON')
            # 上电时序
            Display_ON_Trad()
            SHARP_user.display_on = 1
            frame_hold_cnt = SHARP_MeasureTimeStart_ms()
        else :
            print('KEY_OFF')
            # 下电时序
            SHARP_Display_OFF()


    elif key_str.find('key_down_lift') != -1:

        if SHARP_user.auto_switch_mode == 0 and SHARP_user.display_on == 1 :
            if SHARP_GetMeasureTime_ms(frame_hold_cnt) >= SHARP_user.frame_hold_ms[SHARP_user.frame] :
                frame_hold_cnt = SHARP_MeasureTimeStart_ms()
                print('KEY_DOWN')
                SHARP_user.frame += 1
                if  SHARP_user.frame >= SHARP_user.frame_num :
                    SHARP_user.frame = 0

                # print('frame = %d' %( SHARP_user.frame))
                SwitchFrame(SHARP_user.frame)

    elif key_str.find('key_up_lift') != -1:
        print('KEY_UP')
        if SHARP_user.auto_switch_mode == 0 and SHARP_user.display_on == 1 :
            if SHARP_GetMeasureTime_ms(frame_hold_cnt) >= SHARP_user.frame_hold_ms[SHARP_user.frame] :
                frame_hold_cnt = SHARP_MeasureTimeStart_ms()
                print('KEY_UP')
                if SHARP_user.frame == 0 :
                    SHARP_user.frame = SHARP_user.frame_num - 1
                else :
                    SHARP_user.frame -= 1
                SwitchFrame(SHARP_user.frame)

    elif key_str.find('key_enter_lift') != -1:
        print('KEY_enter')


    elif key_str.find('key_add_lift') != -1:
        print('KEY5_add')
        SHARP_user.auto_switch_mode = 1

    elif key_str.find('key_sub_lift') != -1:
        print('KEY6_sub')
        SHARP_user.auto_switch_mode = 0

    elif key_str.find('key_spare_lift') != -1:
        print('key_spare_lift')

    if SHARP_user.auto_switch_mode == 1 and SHARP_user.display_on == 1 :
        if SHARP_GetMeasureTime_ms(frame_hold_cnt) >= SHARP_user.frame_hold_ms[SHARP_user.frame] :
            frame_hold_cnt = SHARP_MeasureTimeStart_ms()
            if SHARP_user.frame < (SHARP_user.frame_num - 1) :
                SHARP_user.frame += 1
            else :
                SHARP_user.frame = 0
            SwitchFrame(SHARP_user.frame)

2.7. 整体点屏示例

from mp_img import *
from mp_gpu import *
from mp_user import *
from mp_power import *
from mp_display_mipi import *
from mp_display_lvds import *
from mp_bsp_init import *




class User_Fun():
    Power_Flag = 0
    Backlight_Flag = 0
    frame = 0
    frame_num = 0
    display_on = 0
    auto_switch_mode = 0  # 画面模式  =0 手动  =1 自动
    frame_hold_ms = []  # 画面保持时间 ,在LoadFrame() 函数中赋值


def IO_Configuration():
    user_io = str_user_io()
    user_io.IO_PIN = LCD_TXS_OE
    user_io.IO_Mode = OUTPUT_DIR
    SHARP_UserIO_Conf(user_io)
    SHARP_UserIO_BitSet(LCD_TXS_OE)       #使能转换IC


def parameter_settings():

    # ''' 点屏参数配置 '''
    LVDS_struct = lvds_panel_par()

    LVDS_struct.autoPanelFre = 60  # 屏幕刷新率 ,此值设置之后,pclk设置无效
    LVDS_struct.pclk = 69  # PCLK时钟

    LVDS_struct.h_active = 1920  # 水平的有效像素
    LVDS_struct.h_back_porch = 60  # 水平的后沿
    LVDS_struct.h_front_porch = 90  # 水平的前沿
    LVDS_struct.h_pulse_width = 30  # 水平的脉冲

    LVDS_struct.v_active = 1080  # 垂直的有效像素
    LVDS_struct.v_back_porch = 8  # 垂直的后沿
    LVDS_struct.v_front_porch = 8  # 垂直的前沿
    LVDS_struct.v_pulse_width = 5  # 垂直的脉冲

    LVDS_struct.display_mode = LVDS_2Port_Display  # 显示模式
    LVDS_struct.bit_mode = LVDS_24_BIT  # 数据位数
    LVDS_struct.dat_format = LVDS_VESA  # 数据格式
    LVDS_struct.rgb_dir = LVDS_DIR_RGB  # RGB方向

    LVDS_struct.pclk_edge = LVDS_RISING_EDGE  # pclk锁存边缘
    LVDS_struct.h_active_edge = LVDS_LOW_ACTIVE  # h脉冲有效电平
    LVDS_struct.v_active_edge = LVDS_LOW_ACTIVE  # v脉冲有效电平
    LVDS_struct.de_active_edge = LVDS_HIGH_ACTIVE  # de脉冲有效电平

    SHARP_Display_Lvds_Init(LVDS_struct.autoPanelFre, LVDS_struct)


# 加载图片
def LoadFrame():
    print("Load image..")

    SHARP_GPU_LoadFrame(SHARP_user.frame_num)
    SHARP_Img_Full(255, 255, 255)
    SHARP_user.frame_hold_ms.append(1000)
    SHARP_user.frame_num += 1

    SHARP_GPU_LoadFrame(SHARP_user.frame_num)
    SHARP_Img_Full(255, 0, 0)
    SHARP_user.frame_hold_ms.append(1000)
    SHARP_user.frame_num += 1

    SHARP_GPU_LoadFrame(SHARP_user.frame_num)
    SHARP_Img_Full(0, 255, 0)
    SHARP_user.frame_hold_ms.append(1000)
    SHARP_user.frame_num += 1

    SHARP_GPU_LoadFrame(SHARP_user.frame_num)
    SHARP_Img_Full(0, 0, 255)
    SHARP_user.frame_hold_ms.append(1000)
    SHARP_user.frame_num += 1

    SHARP_GPU_LoadFrame(SHARP_user.frame_num)
    SHARP_Img_GREEN256_H()
    SHARP_user.frame_hold_ms.append(1000)
    SHARP_user.frame_num += 1

    SHARP_GPU_LoadFrame(SHARP_user.frame_num)
    SHARP_Img_RED256_H()
    SHARP_user.frame_hold_ms.append(1000)
    SHARP_user.frame_num += 1

    SHARP_GPU_LoadFrame(SHARP_user.frame_num)
    SHARP_Img_BLUE256_H()
    SHARP_user.frame_hold_ms.append(1000)
    SHARP_user.frame_num += 1

    SHARP_GPU_LoadFrame(SHARP_user.frame_num)
    SHARP_SDCard_BMP('/sdcard/1_1920_1080.bmp')
    SHARP_user.frame_hold_ms.append(1000)
    SHARP_user.frame_num += 1

    SHARP_GPU_LoadFrame(SHARP_user.frame_num)
    SHARP_SDCard_BMP('/sdcard/2_1920_1080.bmp')
    SHARP_user.frame_hold_ms.append(1000)
    SHARP_user.frame_num += 1

    SHARP_GPU_LoadFrame(SHARP_user.frame_num)
    SHARP_SDCard_BMP('/sdcard/3_1920_1080.bmp')
    SHARP_user.frame_hold_ms.append(1000)
    SHARP_user.frame_num += 1

    print("OK")


'''
函数名:FrameBefor
描述  :切图之前要做的事情 (可以用来切换normal,idle模式等等)

'''
def FrameBefor(frame):
    pass


'''
函数名:FrameAfter
描述  :切图之后要做的事情 (可以用来测试电压电流什么的)

'''
def FrameAfter(frame):
    pass


def SwitchFrame(frame):
    # 切图之前
    # FrameBefor(frame)

    SHARP_GPU_DisplayFrame(frame)  # 切图

    # 切图之后
    # FrameAfter(frame)


def run():

    ############硬件初始化###############
    bsp_info = Sky_Bsp_Init()
    SHARP_user.Power_Flag = bsp_info.Power_Flag
    SHARP_IOVOL_Set(SHARP_user.Power_Flag, 3.3)

    ############显示工程名###############
    project_name='LVDS_1920x1080_DEMO'
    SHARP_box_ui_Project_Name_Page3(project_name)

    IO_Configuration()

    # ''' 屏幕参数配置 '''
    parameter_settings()
    # ''' 加载图片 '''
    LoadFrame()

    while True:
        try:
            run_while()

        except ITException as e:    #IO口中断异常处理  不可修改

            SHARP_DEBUG("ITException ERR\r")

        except Exception as e:      #其他异常处理   不可修改
            ##异常里执行的功能  用户可自行更改
            SHARP_DEBUG("Exception ERR\r")

def run_while():

    Display_OFF()
    SHARP_MONITOR_SetBee(SHARP_user.Power_Flag,1)
    SHARP_Delay_ms(500)
    SHARP_MONITOR_SetBee(SHARP_user.Power_Flag,0)

    #按键读
    while True:
        SHARP_Delay_ms(10)

        key_str = SHARP_read_key_lift(500)

        if key_str.find('key_onoff_lift') != -1:

            if SHARP_user.display_on == 0 :
                print('KEY_ON')
                # 上电时序
                Display_ON_Trad()
                SHARP_user.display_on = 1
                frame_hold_cnt = SHARP_MeasureTimeStart_ms()
            else :
                print('KEY_OFF')
                # 下电时序
                Display_OFF()


        elif key_str.find('key_down_lift') != -1:

            if SHARP_user.auto_switch_mode == 0 and SHARP_user.display_on == 1 :
                if SHARP_GetMeasureTime_ms(frame_hold_cnt) >= SHARP_user.frame_hold_ms[SHARP_user.frame] :
                    frame_hold_cnt = SHARP_MeasureTimeStart_ms()
                    print('KEY_DOWN')
                    SHARP_user.frame += 1
                    if  SHARP_user.frame >= SHARP_user.frame_num :
                        SHARP_user.frame = 0

                    SwitchFrame(SHARP_user.frame)

        elif key_str.find('key_up_lift') != -1:
            print('KEY_UP')
            if SHARP_user.auto_switch_mode == 0 and SHARP_user.display_on == 1 :
                if SHARP_GetMeasureTime_ms(frame_hold_cnt) >= SHARP_user.frame_hold_ms[SHARP_user.frame] :
                    frame_hold_cnt = SHARP_MeasureTimeStart_ms()
                    print('KEY_UP')
                    if SHARP_user.frame == 0 :
                        SHARP_user.frame = SHARP_user.frame_num - 1
                    else :
                        SHARP_user.frame -= 1
                    SwitchFrame(SHARP_user.frame)

        elif key_str.find('key_enter_lift') != -1:
            print('KEY_enter')


        elif key_str.find('key_add_lift') != -1:
            print('KEY5_add')
            SHARP_user.auto_switch_mode = 1

        elif key_str.find('key_sub_lift') != -1:
            print('KEY6_sub')
            SHARP_user.auto_switch_mode = 0

        elif key_str.find('key_spare_lift') != -1:
            print('key_spare_lift')

        if SHARP_user.auto_switch_mode == 1 and SHARP_user.display_on == 1 :
            if SHARP_GetMeasureTime_ms(frame_hold_cnt) >= SHARP_user.frame_hold_ms[SHARP_user.frame] :
                frame_hold_cnt = SHARP_MeasureTimeStart_ms()
                if SHARP_user.frame < (SHARP_user.frame_num - 1) :
                    SHARP_user.frame += 1
                else :
                    SHARP_user.frame = 0
                SwitchFrame(SHARP_user.frame)

# 传统上电模式
def Display_ON_Trad():

    print('Display ON')

    SHARP_POWER_SetVDDLimit(SHARP_user.Power_Flag,1,2000)
    SHARP_POWER_SetVDDLimit(SHARP_user.Power_Flag,2,2000)

    SHARP_POWER_SetVDDLimit(SHARP_user.Power_Flag,3,2000)
    SHARP_POWER_SetVDDLimit(SHARP_user.Power_Flag,4,2000)
#     SHARP_IOVOL_Set(SHARP_user.Power_Flag,3.3)

    ret=SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 1, 3.3)
    if ret !=0:
        print('VDD%d NG'%(1))

    ret=SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 2, 12)
    if ret !=0:
        print('VDD%d NG'%(2))

    SHARP_Delay_ms(5)
    SwitchFrame(SHARP_user.frame)

    SHARP_UserLvds_ON()
    SHARP_Delay_ms(100)

    for i in range(1,13):
        SHARP_LED_SetI(SHARP_user.Power_Flag, i, 10)

    SHARP_Delay_ms(100)

    ret,Error_info = SHARP_LED_ON(SHARP_user.Power_Flag, 0xff)
    for i in range(4):      #适用一拖四 Error_info[0] 1号机 Error_info[0] 1号机
        if Error_info[i]<0:
            print('LED_ON %d NG Error = %d'%(i,Error_info[i]))

    SHARP_user.display_on = 1




# 下电时序
def Display_OFF():
    print('Display OFF')

    ret=SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 1, 0)
    if ret !=0:
        print('VDD%d NG'%(1))
    ret=SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 2, 0)
    if ret !=0:
        print('VDD%d NG'%(2))

    SHARP_UserLvds_OFF()

    SHARP_LED_OFF(SHARP_user.Power_Flag)

    SHARP_user.frame=0
    SHARP_user.display_on = 0

#*****************************************************************************************************************************************
#*****************************************************************************************************************************************
#-----------------------------------------------------------------------------------------------------------------------------------------
#-----------------------------------------------------------------------------------------------------------------------------------------
#*****************************************************************************************************************************************
#*****************************************************************************************************************************************
#-----------------------------------------------------------------------------------------------------------------------------------------
#-----------------------------------------------------------------------------------------------------------------------------------------
#--------------------START-------------------------------------

# ''' 初始化配置 '''
SHARP_user=User_Fun()

if __name__ == '__main__':  #主程序入口
    SHARP_DEBUG("Enter Python OK !")
    run()