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 代表VDD1v:要输出的电压值,单位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()