1. 点屏示例(MIPI)
本章节主要介绍点亮执行K2000的所有初始化(包括背光板,主控板等等的初始化),User_Fun()类解析,加载画面,写初始化代码,上下电控制,按键控制程序,整体点屏示例。
主要内容:
1 执行K2000的所有初始化(包括背光板,主控板等等的初始化)
2 User_Fun()类解析。
3 run函数解析
4 加载画面。
5 写初始化代码。
6 上下电控制.
7 按键控制程序:实现 按键“上翻”、“下翻”切换画面,ON/OFF 开关显示
8 整体点屏示例
注意
while 循环里需要放置10ms的延时,来维持系统的正常运行。
1.1. 执行K2000的所有初始化(包括背光板,主控板等等的初始化)
先创建了一个名为 SHARP_user 的 User_Fun 对象。然后,通过检查
__main__模块是否为当前模块,如果当前模块是主程序(即直接运行的脚本文件),则会输出 “Enter Python OK !” 这条调试信息,并调用 run() 函数来执行主要的代码逻辑。SHARP_user=User_Fun() if __name__ == '__main__': user_mode.DEBUG("Enter Python OK !") run()
1.2. User_Fun()类解析
这是一个名为User_Fun的类定义,包含了一些属性和方法。以下是该类的一些说明:
Project_Site_Name:字符串类型,表示项目站点名称。
GetLockCodestr:字符串类型,表示获取锁代码的字符串。
My_Board:Set_Board_All()类型的对象,表示主控板对象,包含电源板、背光板和GPU板。
My_MIPI_Board:MIPI类型的对象,表示mipi板对象,但在此处还没有被初始化。
My_Rest_Pin、My_PORTSWAO_Pin、My_EN1PORT_Pin、My_IT_ON_OFF_Pin、My_IT_MTP_Pin、My_QR_Pin:Pin_Device类型的对象,分别表示重置引脚、端口切换引脚、使能1引脚、IT开关引脚、IT MTP引脚和QR引脚。
frame、display_on、auto_switch_mode:整数类型,表示帧数、显示开关和自动切换模式。class User_Fun(): Project_Site_Name = '2.56_D1_B_V0.7.5' GetLockCodestr = "0" My_Board = Set_Board_All() # 主控板对象 里面包含电源板 背光板 GPU板 My_MIPI_Board : MIPI # mipi板对象 此时还没初始化 My_Rest_Pin = Pin_Device(REST,Pin_Device.OUT) My_PORTSWAO_Pin = Pin_Device(PORTSWAO,Pin_Device.OUT) My_EN1PORT_Pin = Pin_Device(EN1PORT,Pin_Device.OUT) My_IT_ON_OFF_Pin = Pin_Device(IT_ON_OFF,Pin_Device.IN) My_IT_MTP_Pin = Pin_Device(IT_MTP,Pin_Device.IN) frame = 0 display_on = 0 auto_switch_mode = 0
1.3. run函数解析
该函数中包含了一些硬件初始化、屏幕参数配置、中断处理和异常处理等操作。具体来说,以下是主要的步骤:
初始化
调用 SHARP_user.My_Board.IOVOL_Set(1.8) 来设置 IO 电压为 1.8V。
定义并设置项目名称为 “2.56_D1_B_V0.7.5”。
##########################初始化########################## SHARP_user.My_Board.IOVOL_Set(1.8) Boxui.Project_Name_Page3("2.56_D1_B_V0.7.5") #第三页显示工程名配置 MiPi 屏幕参数
创建 MiPi_struct 结构体,并为其设置各种参数,如刷新率、时钟频率、传输速率、同步模式、数据位数等。
##########################配置MIPI屏幕参数########################## MiPi_struct = mipi_panel_par() ''' 点屏参数配置 ''' MiPi_struct.autoPanelFre = 90 # 屏幕刷新率 ,此值设置之后,pclk设置无效 MiPi_struct.pclk = 0 # PCLK时钟 MiPi_struct.HS_Mbps = 1100 # MIPI传输速率 MiPi_struct.Burst = MIPI.NONBURST_SYNC_EVENTS # 突发还是非突发 MiPi_struct.CmdOrVideo = MIPI.VIDEO # Video还是Command模式 MiPi_struct.TypeLane = MIPI.D_PHY_4LANE # DPHY或者CPHY类型与Lane数 MiPi_struct.h_active = 720 # 水平的有效像素 MiPi_struct.h_back_porch = 33 # 水平的后沿 MiPi_struct.h_front_porch = 54 # 水平的前沿 MiPi_struct.h_pulse_width = 20 # 水平的脉冲 MiPi_struct.v_active = 2160 # 垂直的有效像素 MiPi_struct.v_back_porch = 4 # 垂直的后沿 29 MiPi_struct.v_front_porch = 57 # 垂直的前沿220 MiPi_struct.v_pulse_width = 4 # 垂直的脉冲 1 MiPi_struct.bit_mode = MIPI.MiPi_24_BIT # 数据位数 MiPi_struct.pclk_edge = MIPI.MiPi_FALLING_EDGE # pclk锁存边缘 MiPi_struct.h_active_edge = MIPI.MiPi_LOW_ACTIVE # h脉冲有效电平 MiPi_struct.v_active_edge = MIPI.MiPi_LOW_ACTIVE # v脉冲有效电平 MiPi_struct.de_active_edge = MIPI.MiPi_HIGH_ACTIVE # de脉冲有效电平初始化 MiPi
创建 SHARP_user.My_MIPI_Board 实例,通过传入 MiPi_struct 参数进行初始化。
调用一些函数获取或设置 MiPi 相关参数,并将结果输出到调试信息中。
##########################初始化MIPI########################## SHARP_user.My_MIPI_Board = MIPI(MiPi_struct.autoPanelFre, MiPi_struct) user_mode.DEBUG("Frame Pclk %.3fMhz\n"%MiPi_struct.pclk) user_mode.DEBUG("FPS:%.2fhz\n"%SHARP_user.My_MIPI_Board.UserMipi_GetPanelFre(MiPi_struct)) user_mode.DEBUG("Need PHY HS:%.2fMbps\n"%SHARP_user.My_MIPI_Board.UserMipi_GetPanelHS_Mbps(MiPi_struct)) user_mode.DEBUG("Set PHY HS:%.2fMbps\n"%MiPi_struct.HS_Mbps) SHARP_user.auto_switch_mode = 0中断处理和异常处理配置
设置两个引脚的中断处理函数(ON_OFF_IRQHandler 和 MTP_IRQHandler)。
调用 LoadFrame() 函数加载帧,可能是显示屏相关的操作
###################中断处理和异常处理配置#################### SHARP_user.My_IT_ON_OFF_Pin.IO_irq(Pin_Device.EDGE_UP,ON_OFF_IRQHandler) SHARP_user.My_IT_MTP_Pin.IO_irq(Pin_Device.EDGE_UP,MTP_IRQHandler) LoadFrame()#加载图片运行循环
进入一个无限循环,不断调用 run_while() 函数。
捕获 ITException 和其他异常,并进行相应的处理和输出
#########################运行循环########################### while True: try: run_while() # SHARP_user.My_Board[2].MONITOR_SetBee(1) except ITException as e: #IO口中断异常处理 不可修改 user_mode.DEBUG("ITException ERR\r") except Exception as e: #其他异常处理 不可修改 user_mode.DEBUG("Exception ERR\r") traceback = user_mode.traceback_exception(e) #获取异常信息 user_mode.DEBUG(traceback) #显示盒打印异常信息 user_mode.DEBUG("\n") #打印换行 不可删除 raise e #上报错误信息更多详情可参考 MIPI点屏模块
1.4. 加载画面
这段代码是一个名为LoadFrame的函数,主要是用于加载画面。本示例程序画面加载的是来自 SD 卡的图片。
Img_SDCard_BMP函数第一个参数是加载画面的文件名,第二个参数是画面保持时间,通过调用image.Img_SDCard_BMP函数来实现图像文件的加载。加载完成后,会输出调试信息”Load image OK”表示加载完成。
注意
目前K2000还不支持预加载用户自行编写的画面,相信在不远的将来能实现这个功能。
user_mode.DEBUG("Load image..\r\n") image.Img_SDCard_BMP('/sdcard/Full Red_compresed.bmp',0) image.Img_SDCard_BMP('/sdcard/Full Green_compresed.bmp',0) image.Img_SDCard_BMP('/sdcard/Full Blue_compresed.bmp',0) image.Img_SDCard_BMP('/sdcard/Flicker_compresed.bmp',0) user_mode.DEBUG("Load image OK\n")
1.5. 写初始化代码
写初始化代码使用的是方法
SHARP_MIPI_WR(mp_tuple),参数 mp_tuple为元组不定长数据,格式: mipi_data = ((0x29,0x11),(0x29,0x29))。此段代码将在后续使用display_on函数时用到
mipi_90HZ_data = ( (0x29,0xB0,0x04), (0x29,0xB1,0x00), (0x29,0xB2,0x00,0x00,0x00,0x00,0x00,0x01,0x00), (0x29,0xB3,0x00), (0x29,0xB4,0x00,0x00,0x0A), (0x29,0xB5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x26,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00), (0x29,0xB6,0x30,0x6B,0x00,0x06,0x33,0x8A,0x00,0x1A,0x7A), (0x29,0xB7,0x54,0x00,0x00,0x00), (0x29,0xB9,0x15,0x8E,0x02,0x64), )def MIPI_90_Init(): for i in mipi_90HZ_data: SHARP_user.My_MIPI_Board.MIPI_WR(i) return 1
1.6. 上下电控制
设置液晶模组所需的电源电压、背光电流,上下电顺序等。体现在 Display_ON_Trad() 和 Display_OFF()两个函数。
设置电源电压
- 设置某VDD通道电压使用的方法为
POWER_SetVDD( ch, v)
ch:通道号, =1 代表VDD1v:要输出的电压值,单位V,精度 0.1V更多电源功能函数使用可参考 电源板功能
Display_ON_Trad()代码如下:def Display_ON_Trad(): user_mode.DEBUG("Display_ON ...\n") SHARP_user.My_Board.POWER_SetVDD(1, 1.8) user_mode.Delay_ms(10) LCD_PORTSWAO_H() LCD_EN1PORT_H() SHARP_user.My_Board.POWER_SetVDD(4, 5.8) user_mode.Delay_ms(5) SHARP_user.My_Board.POWER_SetVDD(5, -5.8) user_mode.Delay_ms(40) LCD_RST_1() user_mode.Delay_ms(10) LCD_RST_0() user_mode.Delay_ms(10) LCD_RST_1() user_mode.Delay_ms(70) SwitchFrame(SHARP_user.frame) SHARP_user.My_MIPI_Board.UserMipi_ON() SHARP_user.My_MIPI_Board.SSD28_LP() Panel_Read()#回读屏幕寄存器 MIPI_90_Init() ########################向MIPI总线写入一系列特定的命令和参数######################## SHARP_user.My_MIPI_Board.MIPI_WR((0x29,0xB0,0x04)) if SHARP_user.All_Test_Mask['OTPEnable']== 0 :#烧录前才会调用默认值 # MIPI_WR((0x29,0xD5,0x02,0x4A,0x02,0x4A,0x02,0x4A)) SHARP_user.My_MIPI_Board.MIPI_WR((0x29,0xD5,0x02,0x65,0x02,0x65,0x02,0x65)) SHARP_user.My_MIPI_Board.MIPI_WR((0x29,0xD6,0x00)) SHARP_user.My_MIPI_Board.MIPI_WR((0x29,0xB0,0x03)) SHARP_user.My_MIPI_Board.MIPI_WR((0x15,0x35,0x00))# 开TE信号 SHARP_user.My_MIPI_Board.MIPI_WR((0x15,0x36,0x01)) SHARP_user.My_MIPI_Board.MIPI_WR((0x15,0x26,0x01)) SHARP_user.My_MIPI_Board.MIPI_WR((0x15,0x03,0x01)) user_mode.Delay_ms(20) SHARP_user.My_MIPI_Board.MIPI_WR((0x29,0xB0,0x04)) SHARP_user.My_MIPI_Board.MIPI_WR((0x05,0x11)) user_mode.Delay_ms(20) SHARP_user.My_MIPI_Board.MIPI_WR((0x05,0x29)) ################################################################################# user_mode.Delay_ms(30) SHARP_user.My_MIPI_Board.SSD28_EnterConfigMode() SHARP_user.frame=0 #设置为第0个画面 SwitchFrame(SHARP_user.frame)#显示画面 for i in range(1,13): SHARP_user.My_Board.LED_SetI(i, 47.7) SHARP_user.My_Board.Set_blHorL(1) SHARP_user.My_Board.LED_ON(0xff) SHARP_user.My_Board.LED_ExPWMOn() user_mode.Delay_ms(300) SHARP_user.display_on = 1 user_mode.DEBUG("Display_ON END\n")
Display_OFF()代码如下:def Display_OFF(): SHARP_user.display_on = 0 SHARP_user.frame = 0 SHARP_DEBUG("Display_OFF ...\n") res=SHARP_LED_OFF(SHARP_user.Power_Flag) SHARP_DEBUG("LED_OFF res=%d\r\n"%res) SHARP_MIPI_WR((0x39, 0XFF, 0X10)) SHARP_MIPI_WR((0x05, 0x28)) SHARP_Delay_ms(20) SHARP_MIPI_WR((0x05, 0x10)) SHARP_Delay_ms(120) SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 5, 0) SHARP_Delay_ms(70) LCD_RST_0() SHARP_Delay_ms(15) SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 4, 0) SHARP_Delay_ms(10) SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 2, 0) SHARP_Delay_ms(20) SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 1, 0) SHARP_Delay_ms(10) SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 3, 0) SHARP_Delay_ms(10) SHARP_UserMipi_OFF() SHARP_DEBUG("Display_OFF END\n")
1.7. 按键控制程序
按键需要实时回读,实时处理.因此需要放在while循环里执行。
key_str = Key_Device.read_key_lift(500) if key_str.find('key_onoff_lift') != -1: print('key_onoff_lift') if SHARP_user.display_on == 0: user_mode.Delay_ms(50) # 上电时序 Display_ON_Trad() SHARP_user.display_on = 1 frame_hold_cnt = user_mode.MeasureTimeStart_ms() else : print('KEY_OFF') # 下电时序 Display_OFF() elif key_str.find('key_down_lift') != -1: print('key_down_lift') if SHARP_user.auto_switch_mode == 0 and SHARP_user.display_on == 1 : if user_mode.GetMeasureTime_ms(frame_hold_cnt) >= image.frame_hold_cnt[SHARP_user.frame] : frame_hold_cnt = user_mode.MeasureTimeStart_ms() print('KEY_DOWN') SHARP_user.frame += 1 if SHARP_user.frame >= image.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 user_mode.GetMeasureTime_ms(frame_hold_cnt) >= image.frame_hold_cnt[SHARP_user.frame] : frame_hold_cnt = user_mode.MeasureTimeStart_ms() print('KEY_DOWN') if SHARP_user.frame == 0 : SHARP_user.frame = image.frame_num - 1 else : SHARP_user.frame -= 1 SwitchFrame(SHARP_user.frame) elif key_str.find('key_enter_lift') != -1: print('KEY_enter') PowerMea = SHARP_user.My_Board.POWER_GetPowerMea() print(PowerMea[0].VDD_V) PowerMea = SHARP_user.My_Board.POWER_GetLEDMea() print(PowerMea[0].LED_V) elif key_str.find('key_add_lift') != -1: print('KEY5_add') elif key_str.find('key_sub_lift') != -1: print('KEY6_sub') 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 user_mode.GetMeasureTime_ms(frame_hold_cnt) >= image.frame_hold_cnt[SHARP_user.frame] : frame_hold_cnt = user_mode.MeasureTimeStart_ms() if SHARP_user.frame < (image.frame_num - 1) : SHARP_user.frame += 1 else : SHARP_user.frame = 0 SwitchFrame(SHARP_user.frame)
1.8. 整体点屏示例
from sharp_user import Key_Device,Pin_Device,user_mode
from sharp_display_mipi import mipi_panel_par,MIPI
from sharp_boxui import Boxui
from sharp_img import image
from sharp_app_mod import Set_Board_All
REST = Pin_Device.LCD_RST__IO_3
PORTSWAO = Pin_Device.LCD_ID2__IO_2
EN1PORT = Pin_Device.LCD_ID1__IO_1
IT_ON_OFF = Pin_Device.LCD__IO_5
IT_MTP = Pin_Device.LCD__IO_6
QR = Pin_Device.LCD__IO_7|Pin_Device.LCD__IO_8
class User_Fun():
Project_Site_Name = '2.56_D1_B_V0.7.5'
GetLockCodestr = "0"
My_Board = Set_Board_All() # 主控板对象 里面包含电源板 背光板 GPU板
My_MIPI_Board : MIPI # mipi板对象 此时还没初始化
My_Rest_Pin = Pin_Device(REST,Pin_Device.OUT)
My_PORTSWAO_Pin = Pin_Device(PORTSWAO,Pin_Device.OUT)
My_EN1PORT_Pin = Pin_Device(EN1PORT,Pin_Device.OUT)
My_IT_ON_OFF_Pin = Pin_Device(IT_ON_OFF,Pin_Device.IN)
My_IT_MTP_Pin = Pin_Device(IT_MTP,Pin_Device.IN)
frame = 0
display_on = 0
auto_switch_mode = 0
def LCD_RST_1():
SHARP_user.My_Rest_Pin.IO_BitSet()
def LCD_RST_0():
SHARP_user.My_Rest_Pin.IO_BitReset()
def LCD_PORTSWAO_H():
SHARP_user.My_PORTSWAO_Pin.IO_BitSet()
def LCD_PORTSWAO_L():
SHARP_user.My_PORTSWAO_Pin.IO_BitReset()
def LCD_EN1PORT_H():
SHARP_user.My_EN1PORT_Pin.IO_BitSet()
def LCD_EN1PORT_L():
SHARP_user.My_EN1PORT_Pin.IO_BitReset()
def ON_OFF_IRQHandler(index,pin): #中断回调
print('ON_OFF index = %x,pin = %x'%(index,pin))
#===============点亮的情况下才执行中断=======================================================
if pin == Pin_Device.LCD__IO_5 and SHARP_user.display_on == 1:
user_mode.Delay_ms(10)
print('IO_55 ONOFF')
# SHARP_Reset_Run(1)
def MTP_IRQHandler(index,pin): #中断回调
print('MTP index = %x,pin = %x'%(index,pin))
#===============点亮的情况下才执行中断=======================================================
if pin ==Pin_Device.LCD__IO_6 and SHARP_user.display_on == 1:
user_mode.Delay_ms(10)
print('IO_66 MTP')
# SHARP_Reset_Run(1)
def LoadFrame():
user_mode.DEBUG("Load image..\r\n")
image.Img_SDCard_BMP('/sdcard/Full Red_compresed.bmp',0)
image.Img_SDCard_BMP('/sdcard/Full Green_compresed.bmp',0)
image.Img_SDCard_BMP('/sdcard/Full Blue_compresed.bmp',0)
image.Img_SDCard_BMP('/sdcard/Flicker_compresed.bmp',0)
user_mode.DEBUG("Load image OK\n")
def SwitchFrame(frame):
SHARP_user.My_MIPI_Board.SSD28_DisplayFrame(frame) # 切图
def NetWork_read(data,data_len):
if data_len > 0:
# 获取到的字节流 解码 为字符串
data_decode = data.decode()
print(data_decode, end='')
def run():
##########################初始化##########################
SHARP_user.My_Board.IOVOL_Set(1.8)
Boxui.Project_Name_Page3("2.56_D1_B_V0.7.5") #第三页显示工程名
##########################配置MIPI屏幕参数##########################
MiPi_struct = mipi_panel_par()
''' 点屏参数配置 '''
MiPi_struct.autoPanelFre = 90 # 屏幕刷新率 ,此值设置之后,pclk设置无效
MiPi_struct.pclk = 0 # PCLK时钟
MiPi_struct.HS_Mbps = 1100 # MIPI传输速率
MiPi_struct.Burst = MIPI.NONBURST_SYNC_EVENTS # 突发还是非突发
MiPi_struct.CmdOrVideo = MIPI.VIDEO # Video还是Command模式
MiPi_struct.TypeLane = MIPI.D_PHY_4LANE # DPHY或者CPHY类型与Lane数
MiPi_struct.h_active = 720 # 水平的有效像素
MiPi_struct.h_back_porch = 33 # 水平的后沿
MiPi_struct.h_front_porch = 54 # 水平的前沿
MiPi_struct.h_pulse_width = 20 # 水平的脉冲
MiPi_struct.v_active = 2160 # 垂直的有效像素
MiPi_struct.v_back_porch = 4 # 垂直的后沿 29
MiPi_struct.v_front_porch = 57 # 垂直的前沿220
MiPi_struct.v_pulse_width = 4 # 垂直的脉冲 1
MiPi_struct.bit_mode = MIPI.MiPi_24_BIT # 数据位数
MiPi_struct.pclk_edge = MIPI.MiPi_FALLING_EDGE # pclk锁存边缘
MiPi_struct.h_active_edge = MIPI.MiPi_LOW_ACTIVE # h脉冲有效电平
MiPi_struct.v_active_edge = MIPI.MiPi_LOW_ACTIVE # v脉冲有效电平
MiPi_struct.de_active_edge = MIPI.MiPi_HIGH_ACTIVE # de脉冲有效电平
##########################初始化MIPI##########################
SHARP_user.My_MIPI_Board = MIPI(MiPi_struct.autoPanelFre, MiPi_struct)
user_mode.DEBUG("Frame Pclk %.3fMhz\n"%MiPi_struct.pclk)
user_mode.DEBUG("FPS:%.2fhz\n"%SHARP_user.My_MIPI_Board.UserMipi_GetPanelFre(MiPi_struct))
user_mode.DEBUG("Need PHY HS:%.2fMbps\n"%SHARP_user.My_MIPI_Board.UserMipi_GetPanelHS_Mbps(MiPi_struct))
user_mode.DEBUG("Set PHY HS:%.2fMbps\n"%MiPi_struct.HS_Mbps)
SHARP_user.auto_switch_mode = 0
###################中断处理和异常处理配置####################
SHARP_user.My_IT_ON_OFF_Pin.IO_irq(Pin_Device.EDGE_UP,ON_OFF_IRQHandler)
SHARP_user.My_IT_MTP_Pin.IO_irq(Pin_Device.EDGE_UP,MTP_IRQHandler)
LoadFrame()#加载图片
#########################运行循环###########################
while True:
try:
run_while()
# SHARP_user.My_Board[2].MONITOR_SetBee(1)
except ITException as e: #IO口中断异常处理 不可修改
user_mode.DEBUG("ITException ERR\r")
except Exception as e: #其他异常处理 不可修改
user_mode.DEBUG("Exception ERR\r")
traceback = user_mode.traceback_exception(e) #获取异常信息
user_mode.DEBUG(traceback) #显示盒打印异常信息
user_mode.DEBUG("\n") #打印换行 不可删除
raise e #上报错误信息
def run_while():
SHARP_user.My_Board.MONITOR_SetBee(1)
user_mode.Delay_ms(100)
SHARP_user.My_Board.MONITOR_SetBee(0)
while True:
key_str = Key_Device.read_key_lift(500)
if key_str.find('key_onoff_lift') != -1:
print('key_onoff_lift')
if SHARP_user.display_on == 0:
user_mode.Delay_ms(50)
# 上电时序
Display_ON_Trad()
SHARP_user.display_on = 1
frame_hold_cnt = user_mode.MeasureTimeStart_ms()
else :
print('KEY_OFF')
# 下电时序
Display_OFF()
elif key_str.find('key_down_lift') != -1:
print('key_down_lift')
if SHARP_user.auto_switch_mode == 0 and SHARP_user.display_on == 1 :
if user_mode.GetMeasureTime_ms(frame_hold_cnt) >= image.frame_hold_cnt[SHARP_user.frame] :
frame_hold_cnt = user_mode.MeasureTimeStart_ms()
print('KEY_DOWN')
SHARP_user.frame += 1
if SHARP_user.frame >= image.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 user_mode.GetMeasureTime_ms(frame_hold_cnt) >= image.frame_hold_cnt[SHARP_user.frame] :
frame_hold_cnt = user_mode.MeasureTimeStart_ms()
print('KEY_DOWN')
if SHARP_user.frame == 0 :
SHARP_user.frame = image.frame_num - 1
else :
SHARP_user.frame -= 1
SwitchFrame(SHARP_user.frame)
elif key_str.find('key_enter_lift') != -1:
print('KEY_enter')
PowerMea = SHARP_user.My_Board.POWER_GetPowerMea()
print(PowerMea[0].VDD_V)
PowerMea = SHARP_user.My_Board.POWER_GetLEDMea()
print(PowerMea[0].LED_V)
elif key_str.find('key_add_lift') != -1:
print('KEY5_add')
elif key_str.find('key_sub_lift') != -1:
print('KEY6_sub')
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 user_mode.GetMeasureTime_ms(frame_hold_cnt) >= image.frame_hold_cnt[SHARP_user.frame] :
frame_hold_cnt = user_mode.MeasureTimeStart_ms()
if SHARP_user.frame < (image.frame_num - 1) :
SHARP_user.frame += 1
else :
SHARP_user.frame = 0
SwitchFrame(SHARP_user.frame)
'''
* 函数名: Panel_Read
* 描述 : 读取模组的寄存器
* 参数 : 无
* 返回 : 无
'''
def Panel_Read():
Read_Code = []
SHARP_user.My_MIPI_Board.SSD28_LP()
SHARP_user.My_MIPI_Board.MIPI_WR((0x29, 0xB0, 0x04))
Read_Code = SHARP_user.My_MIPI_Board.DcsReadDT06(1,0XD5,2) # 1 mipi端口 A口 0xD5获取寄存器 2-数据个数
# if len(Read_Code) !=0:
# SHARP_user.All_Test_Mask['RVCOM_Val'] = Read_Code[0][0]<<8|Read_Code[0][1]
# user_mode.DEBUG("VCOM = 0x%04X\r"%(SHARP_user.All_Test_Mask['RVCOM_Val']))
def Display_ON_Trad():
user_mode.DEBUG("Display_ON ...\n")
SHARP_user.My_Board.POWER_SetVDD(1, 1.8)
user_mode.Delay_ms(10)
LCD_PORTSWAO_H()
LCD_EN1PORT_H()
SHARP_user.My_Board.POWER_SetVDD(4, 5.8)
user_mode.Delay_ms(5)
SHARP_user.My_Board.POWER_SetVDD(5, -5.8)
user_mode.Delay_ms(40)
LCD_RST_1()
user_mode.Delay_ms(10)
LCD_RST_0()
user_mode.Delay_ms(10)
LCD_RST_1()
user_mode.Delay_ms(70)
SwitchFrame(SHARP_user.frame)
SHARP_user.My_MIPI_Board.UserMipi_ON()
SHARP_user.My_MIPI_Board.SSD28_LP()
Panel_Read()#回读屏幕寄存器
MIPI_90_Init()
########################向MIPI总线写入一系列特定的命令和参数########################
SHARP_user.My_MIPI_Board.MIPI_WR((0x29,0xB0,0x04))
# if SHARP_user.All_Test_Mask['OTPEnable']== 0 :#烧录前才会调用默认值
# # MIPI_WR((0x29,0xD5,0x02,0x4A,0x02,0x4A,0x02,0x4A))
# SHARP_user.My_MIPI_Board.MIPI_WR((0x29,0xD5,0x02,0x65,0x02,0x65,0x02,0x65))
SHARP_user.My_MIPI_Board.MIPI_WR((0x29,0xD6,0x00))
SHARP_user.My_MIPI_Board.MIPI_WR((0x29,0xB0,0x03))
SHARP_user.My_MIPI_Board.MIPI_WR((0x15,0x35,0x00))# 开TE信号
SHARP_user.My_MIPI_Board.MIPI_WR((0x15,0x36,0x01))
SHARP_user.My_MIPI_Board.MIPI_WR((0x15,0x26,0x01))
SHARP_user.My_MIPI_Board.MIPI_WR((0x15,0x03,0x01))
user_mode.Delay_ms(20)
SHARP_user.My_MIPI_Board.MIPI_WR((0x29,0xB0,0x04))
SHARP_user.My_MIPI_Board.MIPI_WR((0x05,0x11))
user_mode.Delay_ms(20)
SHARP_user.My_MIPI_Board.MIPI_WR((0x05,0x29))
#################################################################################
user_mode.Delay_ms(30)
SHARP_user.My_MIPI_Board.SSD28_EnterConfigMode()
SHARP_user.frame=0 #设置为第0个画面
SwitchFrame(SHARP_user.frame)#显示画面
for i in range(1,13):
SHARP_user.My_Board.LED_SetI(i, 47.7)
SHARP_user.My_Board.Set_blHorL(1)
SHARP_user.My_Board.LED_ON(0xff)
SHARP_user.My_Board.LED_ExPWMOn()
user_mode.Delay_ms(300)
SHARP_user.display_on = 1
user_mode.DEBUG("Display_ON END\n")
def Display_OFF():
SHARP_user.display_on = 0
SHARP_user.frame = 0
user_mode.DEBUG("Display_OFF ...\n")
SHARP_user.My_Board.LED_ExPWMOff()
SHARP_user.My_Board.LED_OFF()
SHARP_user.My_MIPI_Board.MIPI_WR((0x05, 0x28))
user_mode.Delay_ms(20)
SHARP_user.My_MIPI_Board.MIPI_WR((0x05, 0x10))
user_mode.Delay_ms(120)
SHARP_user.My_Board.POWER_SetVDD(5, 0)
user_mode.Delay_ms(70)
LCD_RST_0()
user_mode.Delay_ms(15)
SHARP_user.My_Board.POWER_SetVDD(5, 0)
user_mode.Delay_ms(10)
SHARP_user.My_Board.POWER_SetVDD(4, 0)
user_mode.Delay_ms(20)
SHARP_user.My_Board.POWER_SetVDD(1, 0)
user_mode.Delay_ms(10)
LCD_PORTSWAO_H()
LCD_EN1PORT_L()
user_mode.Delay_ms(10)
SHARP_user.My_MIPI_Board.UserMipi_OFF()
user_mode.DEBUG("Display_OFF END\n")
mipi_90HZ_data = (
(0x29,0xB0,0x04),
(0x29,0xB1,0x00),
(0x29,0xB2,0x00,0x00,0x00,0x00,0x00,0x01,0x00),
(0x29,0xB3,0x00),
(0x29,0xB4,0x00,0x00,0x0A),
(0x29,0xB5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x26,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00),
)
'''
*函數名:MIPI_90_Init
*描述 :写90HZ初始化
*返回 :无
'''
def MIPI_90_Init():
for i in mipi_90HZ_data:
SHARP_user.My_MIPI_Board.MIPI_WR(i)
return 1
SHARP_user=User_Fun()
if __name__ == '__main__':
user_mode.DEBUG("Enter Python OK !")
run()