背景说明
在使用柿饼派制作桌面时钟或其他显示设备的时候,发现屏幕一直亮着,就想着能不能制作一个类似手机一样的息屏功能,记得柿饼派的出厂Demo 中有一定时间内不操作屏幕会进入锁屏界面的功能,就想着在这个基础上添加一些背光控制的功能,实现类手机的息屏功能。
话不多说,开干
1.先查看一下柿饼派的电路图,确定 LCD 背光控制的引脚是哪个。
从这里可以看到 LCD_BL_EN 这个引脚是控制 LCD 背光的开关的。
然后看M3模块上的主控的引脚, LCD_BL_EN 的 IO 引脚是 PE5。
2.先写个 C 代码测试一下背光控制
include
include
define LCD_BL_EN_PIN GET_PIN(GPIO_PORT_E, GPIO_PIN_5)//PE5 //44 如果SDK 不支持 GET_PIN获取,可以直接使用IO 编号:
int lcd_on(void)
{
rt_pin_mode(LCD_BL_EN_PIN, PIN_MODE_OUTPUT);
rt_pin_write(LCD_BL_EN_PIN,PIN_HIGH);
rt_kprintf(“LCD ON !!!\n”);
return 0;
}
int lcd_off(void)
{
rt_pin_mode(LCD_BL_EN_PIN, PIN_MODE_OUTPUT);
rt_pin_write(LCD_BL_EN_PIN, PIN_LOW);
rt_kprintf(“LCD OFF!!!\n”);
}
MSH_CMD_EXPORT(lcd_on,lcd_on);
MSH_CMD_EXPORT(lcd_off,lcd_off);
然后编译,更新固件,通过 msh 命令行使用 lcd_on 和 lcd_off 测试验证LCD 背光正常开关。
3.编写 js-c 部分代码
include
include // C与JS交互的API相关头文件
include
include
include
define LCD_BL_EN_PIN GET_PIN(GPIO_PORT_E, GPIO_PIN_5) // 定义需要操作的IO口
static js_object_t js_message_obj = JS_ECMA_VALUE_UNDEFINED;
JS_DECLARE_HANDLER(lcd_on) // lcd_on 方法的具体实现
{
rt_kprintf(“==> lcd blackligt on\n”);
rt_pin_mode(LCD_BL_EN_PIN, PIN_MODE_OUTPUT);
rt_pin_write(LCD_BL_EN_PIN, PIN_HIGH);
return js_create_number(1);
}
JS_DECLARE_HANDLER(lcd_off) //lcd_off 方法的具体实现
{
rt_kprintf(“==> lcd blackligt off\n”);
rt_pin_mode(LCD_BL_EN_PIN, PIN_MODE_OUTPUT);
rt_pin_write(LCD_BL_EN_PIN, PIN_LOW);
return js_create_number(0);
}
js_object_t module_init(void)
{
js_object_t obj = js_create_object();
if (js_resolve_error(obj))
return js_create_null();
rt_kprintf("==> module_init\n");
JS_REGISTER_METHOD_ALIAS(obj, lcd_on,lcd_on_handler); // 注册一个 lcd_on 方法
JS_REGISTER_METHOD_ALIAS(obj, lcd_off, lcd_off_handler); // 注册一个 lcd_off 方法
return obj;
}
//C上实现一个JS的module,名字叫做 mudule_demo,然后JS上便可以require(‘module_demo’)引入使用
JS_MODULE(module_demo, module_init)
4.通过 UI Builder 创建 UI 工程
1.参考柿饼派出厂Demo 的代码,设计锁屏界面
锁屏界面需要注意的是需要把page 的 BindTouch 绑定在 onTounch 函数中处理。
还有点击解锁的按钮的事件绑定在 onBtn 函数中处理,是否进入主页面等操作。
2.设计主页面,这里仅是创建一个页面,放置了一个背景图片。
3.由于 UI 工程的页面和代码需要相对应,这里就直接上传了代码,有兴趣的可以下载试试。
原作者:shadowliang
更多回帖