定时关LCD背光的问题?请高手指点.

liming1130 2007-12-07 06:12:34
使用的是winCE5.0 ARM9核, 应用程序用EVC4.0开发;
我通过应用程序(set.exe)设置一个时间值(例如5S),设定完后马上关掉这个set.exe程序.当5S内没有任何的操作就关掉LCD的背光电源,然后我点击下触摸屏能马上打开LCD背光电源.请问用怎样的方法实现比较好?
方法一:在应用程序里定时,将应用程序隐藏在后台运行,驱动只负责开关的动作;
方法二:应用程序发送一个时间值给驱动,让驱动定时,当时间到了后执行开关的动作.

...全文
484 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ricky_hu 2008-12-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hzdysymbol 的回复:]
如果你的系统支持电源管理比较好的话,你的事情只是简单的做一个注册表键值的修改,然后更新一下系统的定时器
MS的PM已经完全支持这样的操作,详细请查看电源管理相关部分代码或文档
现在我们都已经把背光驱动中的定时线程拿掉了
[/Quote]

支持hzdysymbol的这种做法,把这个事情交给系统的电源管理来做是最简单和安全的。当然,前提是你的系统支持电源管理。这样的话,你只需要实现一个写注册表的接口就行了,把要设定的值写到电源管理中系统状态对应的键值下面即可。比如,
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\Timeouts]
"ACUserIdle"=dword:3c ; in seconds
"BattUserIdle"=dword:3c ; in seconds
你可以设定这个时间,然后当背光驱动收到系统进入useridle模式的消息的时候,你在驱动里面把背光关掉就OK了。
xajhuang 2008-12-18
  • 打赏
  • 举报
回复
在触摸屏驱动加打开背光的控制。
ggsddu_1997 2008-12-15
  • 打赏
  • 举报
回复
应用层加一个定时器,定时器到,调用LCD的IOCTL就OK了。
swaiwwb 2008-12-13
  • 打赏
  • 举报
回复
用GPIO直接关闭LCD背光,不管是驱动还是应用层都可以实现,但是前提是GPIO已经接到LCD背光控制的硬件接口上
hzdysymbol 2008-12-11
  • 打赏
  • 举报
回复
如果你的系统支持电源管理比较好的话,你的事情只是简单的做一个注册表键值的修改,然后更新一下系统的定时器
MS的PM已经完全支持这样的操作,详细请查看电源管理相关部分代码或文档
现在我们都已经把背光驱动中的定时线程拿掉了
iwillbeback008 2008-12-11
  • 打赏
  • 举报
回复
楼主的问题解决了么?论坛里有这个文章:
"win ce5.0如何实现一个简单的背光驱动,假设一个GPIO的高低电平控制为LCD的背光控制。"
你可以去看看。

我现在刚忙完从三星官方2440的CE5.0 BSP移植CE到mini2440的工作,准备也想做做你们说的LCD背光控制。
fengwx 2007-12-15
  • 打赏
  • 举报
回复
#include <windows.h>
#include <pm.h>
#include <types.h>
#include <winddi.h>
#include <gpe.h>

static const TCHAR g_szRegKey[] = TEXT("ControlPanel\\BackLight");
static const TCHAR g_szBatTimeout[] = TEXT("BatteryTimeout");
static const TCHAR g_szExtTimeout[] = TEXT("ACTimeout");
static const TCHAR g_szUseBattery[] = TEXT("UseBattery");
static const TCHAR g_szUseExt[] = TEXT("UseExt");

UINT ThreadProc(LPVOID ptr)
{
HANDLE hUserActive;
HANDLE hUserInactive;
HANDLE hRegEvent;
HKEY hKey;

DWORD dwBatTimeout = 0;
DWORD dwExtTimeout = 0;
DWORD dwUseBattery = 0;
DWORD dwUseExt = 0;
hKey = NULL;

Sleep(2000);

hUserActive = OpenEvent(EVENT_ALL_ACCESS, FALSE, _T("PowerManager/UserActivity_Active"));
hUserInactive = OpenEvent(EVENT_ALL_ACCESS, FALSE, _T("PowerManager/UserActivity_Inactive"));
RETAILMSG(0, (L"## hUserActive=0x%x hUserInactive=0x%x\r\n", hUserActive, hUserInactive) );

if(hUserActive && hUserInactive && (RegOpenKeyEx(HKEY_CURRENT_USER, g_szRegKey, 0, 0, &hKey) == ERROR_SUCCESS) )
{
HANDLE hEvs[1];
DWORD dwTimeout;
HINSTANCE hInst;

hEvs[0] = hUserActive;
dwTimeout = INFINITE;

while(hKey)
{
switch(WaitForMultipleObjects(1, hEvs, FALSE, dwTimeout))
{
case WAIT_OBJECT_0:
RETAILMSG(0, (L"## WAIT_OBJECT_0 hEvs[0]=0x%x\r\n", hEvs[0]) );
if(hEvs[0] == hUserActive)
{
dwTimeout = INFINITE;
hEvs[0] = hUserInactive;
//lcd on
LCDON();
RETAILMSG(0, (L"## hUserActive dwTimeout=%d\r\n", dwTimeout) );
}
else
{
DWORD dwType, dwSize;
dwSize = sizeof(DWORD);
RegQueryValueEx(hKey, g_szBatTimeout, NULL, &dwType, (LPBYTE)&dwBatTimeout, &dwSize);
RegQueryValueEx(hKey, g_szExtTimeout, NULL, &dwType, (LPBYTE)&dwExtTimeout, &dwSize);
RegQueryValueEx(hKey, g_szUseBattery, NULL, &dwType, (LPBYTE)&dwUseBattery, &dwSize);
RegQueryValueEx(hKey, g_szUseExt , NULL, &dwType, (LPBYTE)&dwUseExt , &dwSize);
RETAILMSG(0, (L"## dwBatTimeout=%d dwExtTimeout=%d dwUseBattery=%d dwUseExt=%d\r\n",
dwBatTimeout, dwExtTimeout, dwUseBattery, dwUseExt) );

if(dwUseExt && dwExtTimeout)
dwTimeout = dwExtTimeout * 1000;
else if(dwUseBattery && dwBatTimeout)
dwTimeout = dwBatTimeout * 1000;
else
dwTimeout = INFINITE;
hEvs[0] = hUserActive;
RETAILMSG(0, (L"## hUserInactive dwTimeout=%d\r\n", dwTimeout) );
}
break;

case WAIT_TIMEOUT:
RETAILMSG(0, (L"## WAIT_TIMEOUT hEvs[0]=0x%x\r\n", hEvs[0]) );
if(hEvs[0] == hUserActive)
{
//lcd off
LCDOFF();
dwTimeout = INFINITE;
}
break;

case WAIT_FAILED:
RETAILMSG(0, (L"## WAIT_FAILED\r\n"));
RegCloseKey(hKey);
hKey = NULL;
break;
}
}
}
CloseHandle(hUserActive);
CloseHandle(hUserInactive);
CloseHandle(hRegEvent);
return 0;
}

BOOL StartBacklightThread(void)
{
//SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL);
if( CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, NULL, 0, NULL))
{
RETAILMSG(1, (TEXT("Display: StartBacklightThread OK\r\n")));
return TRUE;
}
return FALSE;
}
liming1130 2007-12-15
  • 打赏
  • 举报
回复
老斩:我邮箱是lim1130@126.com 谢谢!
感谢各位的建议,我现在是在应用程序里做定时,发现很麻烦,好几个应用都要加这部分代码.
enjoyalan 2007-12-15
  • 打赏
  • 举报
回复
在触摸的驱动里加一个触发事件,点亮LCD
yashi 2007-12-10
  • 打赏
  • 举报
回复
嗯,wince自带的2410的BSP下确实没有,你需要samsumg提供的2410或者2440的BSP,如果你没有的话,可以留一个邮箱,我发给你---当然是背光驱动部分,整个BSP太大了。
liming1130 2007-12-10
  • 打赏
  • 举报
回复
老斩:我在PB5.0软件的wince500\platform\smdk2410\src\下没找到你说的背光驱动这一部分的代码呢?
麻烦告诉我具体在哪个文件里面?
谢谢!
yashi 2007-12-08
  • 打赏
  • 举报
回复
建议你找一份smdk2410的BSP看一下它的背光驱动,里面实现了这个功能,不是你上面说的那2种方法。
载舟之水 2007-12-07
  • 打赏
  • 举报
回复
方法一我用过。

放在驱动里定时是不好的做法,你需要考虑驱动是否block系统和影响电源管理,但是你仍然需要注意的是,睡眠和唤醒时的临界情况。
设计总说明 这次课程设计的任务是是利用MCS51系列单片外加必要的辅助电路从而设计一个 带有LCD显示的定时闹钟。 该闹钟应具有的功能是:当定时闹钟到了人为设定好的时间后,它就发出声音, 并且在LCD显示器上显示出你所设定的闹钟时间以及当前时间,并能够随时调整时间 。 本课设所用器件有:AT89C52单片机、LCD显示器(LM016L)、上拉电阻(Respack- 8)、晶振电路、复位电路(带有复位键)以及四个控制键。 1、在控制时分电路设计中,分别设置了四个键: K1键-用来设置当前时间以及在设置中用来设置时钟 K2键-显示闹钟时间以及在设置中用来设置分钟 K3键-设置闹钟时间 K4键-控制闹铃的开 2、 在控制时分秒电路的设计中,分别设置了五个键,即在1的基础上增加了一个控制秒的 按键。 当然本课程设计中所用到的元器件还可以应用其他的一些器件。比如AT89C52完 全可以用AT89C51来代替,LM016L型号的LCD显示器可以用LM017L型号的LCD显示器来代 替(其他一些显示器也可以用),上来电阻也可以用分电阻来表示。 初次做课程设计,肯定会有许多不足之处,希望老师们指点键字: AT89C52单片机 LCD显示器 闹钟 目录 1. 主要内容……………………………………………………………………3 2. 目的和意义…………………………………………………………………3 3. 基本要求……………………………………………………………………3 3.1、显示时-分功能………………………………………………………3 3.2、 显示时-分-秒功能…………………………………………………3 4. 系统设计 4.1 AT89C52单片机简介…………………………………………………4 4.2 电路总体设计…………………………………………………………6 4.3 主程序流程图…………………………………………………………7 5. 详细设计 5.1 设计电路图……………………………………………………………7 5.2 程序代码………………………………………………………………12 5.2.1 时-分程序代码…………………………………………………12 5.2.2 时-分-秒程序代码……………………………………………23 6. 结论 6.1 结果分析………………………………………………………………33 6.2 心得体会………………………………………………………………33 7. 设计总结……………………………………………………………………34 8. 参考文献……………………………………………………………………34 1. 主要内容: 本次课程设计的内容为设计一个以MCS51单片机为核心的带有LCD显示的定时闹钟, 完成原理图设计,软件编制及设计报告。 设使用AT89C52单片机结合字符型LCD显示器设计一个简易的定时闹钟LCD时钟,若LC D选择有背光显示的模块,在夜晚或黑暗的场合中也可以使用。 2. 设计本电子定时闹钟的目的和意义 本课程设计的目的和意义在于提高对单片机课程的认识以及对该课程的实践应用能力 。 通过本次课程设计的实践,了解单片机工作的原理及应用技术,掌握根据硬件电路设 计软件的方法,了解设计过程中的各个基本环节,也为今后的实际应用奠定基础 3、基本要求: .字符型LCD(16*2)显示器 .显示格式"时时:分分:秒秒"。 .一旦时间到则发出声响,表示程序开始执行,LCD显示"00 00",按下操作键K1- k4动作如下: 3.1、显示时-分功能: 1. K1—设置现在的时间。 2. K2—显示闹铃的时间 3. K3—设置闹铃的时间。。 4. K4—闹铃ON/OFF(即按下k4键可以开启或停止声响)的状态设置,定时"开始"按键, 启动定时。 5. K5—复位键 设置当前时间或闹铃时间如下: 1. K1—对时的调整。 2. K2—对分的调整。 3. K3—设置完成。 3.2、 显示时-分-秒功能: 6. K1—设置现在的时间。 7. K2—显示闹铃的时间 8. K3—设置闹铃的时间。。 9. K4—设置完成。 10. K5—闹铃ON/OFF(即按下k4键可以开启或停止声响)的状态设置,定时"开始"按键, 启动定时 11. K6—复位键 设置当前时间或闹铃时间如下: 4. K1—对时的调整。 5. K2—对分的调整。 6. K3—对秒的调整。 7. K4—设置完成。 4、系统设计 4.1 AT89C52单片机简介 许多由硬件设计中都使用到单片机AT89C52,其功能比以往的单片机强大 的多。 AT89C52是一种高性能低功耗的采用CMOS工艺制造的8位微控制器,它提供下 列标准特征:4K字节的程序存储器,128字节的RAM,32条I/O线,2个
设计总说明 这次课程设计的任务是是利用MCS51系列单片外加必要的辅助电路从而设计一个 带有LCD显示的定时闹钟。 该闹钟应具有的功能是:当定时闹钟到了人为设定好的时间后,它就发出声音, 并且在LCD显示器上显示出你所设定的闹钟时间以及当前时间,并能够随时调整时间 。 本课设所用器件有:AT89C52单片机、LCD显示器(LM016L)、上拉电阻(Respack- 8)、晶振电路、复位电路(带有复位键)以及四个控制键。 1、在控制时分电路设计中,分别设置了四个键: K1键-用来设置当前时间以及在设置中用来设置时钟 K2键-显示闹钟时间以及在设置中用来设置分钟 K3键-设置闹钟时间 K4键-控制闹铃的开 2、 在控制时分秒电路的设计中,分别设置了五个键,即在1的基础上增加了一个控制秒的 按键。 当然本课程设计中所用到的元器件还可以应用其他的一些器件。比如AT89C52完 全可以用AT89C51来代替,LM016L型号的LCD显示器可以用LM017L型号的LCD显示器来代 替(其他一些显示器也可以用),上来电阻也可以用分电阻来表示。 初次做课程设计,肯定会有许多不足之处,希望老师们指点键字: AT89C52单片机 LCD显示器 闹钟 目录 1. 主要内容……………………………………………………………………3 2. 目的和意义…………………………………………………………………3 3. 基本要求……………………………………………………………………3 3.1、显示时-分功能………………………………………………………3 3.2、 显示时-分-秒功能…………………………………………………3 4. 系统设计 4.1 AT89C52单片机简介…………………………………………………4 4.2 电路总体设计…………………………………………………………6 4.3 主程序流程图…………………………………………………………7 5. 详细设计 5.1 设计电路图……………………………………………………………7 5.2 程序代码………………………………………………………………12 5.2.1 时-分程序代码…………………………………………………12 5.2.2 时-分-秒程序代码……………………………………………23 6. 结论 6.1 结果分析………………………………………………………………33 6.2 心得体会………………………………………………………………33 7. 设计总结……………………………………………………………………34 8. 参考文献……………………………………………………………………34 1. 主要内容: 本次课程设计的内容为设计一个以MCS51单片机为核心的带有LCD显示的定时闹钟, 完成原理图设计,软件编制及设计报告。 设使用AT89C52单片机结合字符型LCD显示器设计一个简易的定时闹钟LCD时钟,若LC D选择有背光显示的模块,在夜晚或黑暗的场合中也可以使用。 2. 设计本电子定时闹钟的目的和意义 本课程设计的目的和意义在于提高对单片机课程的认识以及对该课程的实践应用能力 。 通过本次课程设计的实践,了解单片机工作的原理及应用技术,掌握根据硬件电路设 计软件的方法,了解设计过程中的各个基本环节,也为今后的实际应用奠定基础 3、基本要求: .字符型LCD(16*2)显示器 .显示格式"时时:分分:秒秒"。 .一旦时间到则发出声响,表示程序开始执行,LCD显示"00 00",按下操作键K1- k4动作如下: 3.1、显示时-分功能: 1. K1—设置现在的时间。 2. K2—显示闹铃的时间 3. K3—设置闹铃的时间。。 4. K4—闹铃ON/OFF(即按下k4键可以开启或停止声响)的状态设置,定时"开始"按键, 启动定时。 5. K5—复位键 设置当前时间或闹铃时间如下: 1. K1—对时的调整。 2. K2—对分的调整。 3. K3—设置完成。 3.2、 显示时-分-秒功能: 6. K1—设置现在的时间。 7. K2—显示闹铃的时间 8. K3—设置闹铃的时间。。 9. K4—设置完成。 10. K5—闹铃ON/OFF(即按下k4键可以开启或停止声响)的状态设置,定时"开始"按键, 启动定时 11. K6—复位键 设置当前时间或闹铃时间如下: 4. K1—对时的调整。 5. K2—对分的调整。 6. K3—对秒的调整。 7. K4—设置完成。 4、系统设计 4.1 AT89C52单片机简介 许多由硬件设计中都使用到单片机AT89C52,其功能比以往的单片机强大 的多。 AT89C52是一种高性能低功耗的采用CMOS工艺制造的8位微控制器,它提供下 列标准特征:4K字节的程序存储器,128字节的RAM,32条I/O线,2个
设计总说明 这次课程设计的任务是是利用 MCS51 系列单片外加必要的辅助电路从而设 计一个带有 LCD 显示的定时闹钟。 该闹钟应具有的功能是:当定时闹钟到了人为设定好的时间后,它就发出声 音,并且在 LCD 显示器上显示出你所设定的闹钟时间以及当前时间,并能够随时 调整时间。 本课设所用器件有:AT89C52 单片机、LCD 显示器(LM016L)、上拉电阻 (Respack-8)、晶振电路、复位电路(带有复位键)以及四个控制键。 1、在控制时分电路设计中,分别设置了四个键: K1 键-用来设置当前时间以及在设置中用来设置时钟 K2 键-显示闹钟时间以及在设置中用来设置分钟 K3 键-设置闹钟时间 K4 键-控制闹铃的开 2、 在控制时分秒电路的设计中,分别设置了五个键,即在 1 的基础上增加了 一个控制秒的按键。 当然本课程设计中所用到的元器件还可以应用其他的一些器件。比如 AT89C52 完全可以用 AT89C51 来代替,LM016L 型号的 LCD 显示器可以用 LM017L 型 号的 LCD 显示器来代替(其他一些显示器也可以用),上来电阻也可以用分电阻来 表示。 初次做课程设计,肯定会有许多不足之处,希望老师们指点键字: AT89C52 单片机 LCD 显示器 闹钟 共 33 页 第 2 页 目录 1、 主要内容 3 2、 目的和意义 3 3、 基本要求 3 3.1、显示时-分功能 3 3.2、 显示时-分-秒功能 3 4、 系统设计 4.1 AT89C52 单片机简介 4 4.2 电路总体设计 6 4.3 主程序流程图 7 5、 详细设计 5.1 设计电路图 7 5.2 程序代码 12 5.2.1 时-分程序代码 12 5.2.2 时-分-秒程序代码 23 6、 结论 6.1 结果分析 33 6.2 心得体会 33 7、 设计总结 34 8、 参考文献 34 共 33 页 第 3 页 1、 主要内容: 本次课程设计的内容为设计一个以 MCS51 单片机为核心的带有 LCD 显示的定时闹钟, 完 成原理图设计,软件编制及设计报告。 设使用 AT89C52 单片机结合字符型 LCD 显示器设计一个简易的定时闹钟 LCD 时钟, 若 LCD 选择有背光显示的模块,在夜晚或黑暗的场合中也可以使用。 2、 设计本电子定时闹钟的目的和意义 本课程设计的目的和意义在于提高对单片机课程的认识以及对该课程的实践应用能力。 通过本次课程设计的实践,了解单片机工作的原理及应用技术,掌握根据硬件电路设 计软件的方法,了解设计过程中的各个基本环节,也为今后的实际应用奠定基础 3、基本要求: .字符型 LCD(16*2)显示器 .显示格式"时时:分分:秒秒" 。 .一旦时间到则发出声响,表示程序开始执行,LCD 显示"00 00" ,按下操作键 K1-k4 动 作如下: 3.1、显示时-分功能: (1) K1—设置现在的时间。 (2) K2—显示闹铃的时间 (3) K3—设置闹铃的时间。 。 (4) K4—闹铃 ON/OFF(即按下 k4 键可以开启或停止声响)的状态设置,定时"开始"按 键,启动定时。 (5) K5—复位键 设置当前时间或闹铃时间如下: K1—对时的调整。 K2—对分的调整。 K3—设置完成。 3.2、 显示时-分-秒功能: (6) K1—设置现在的时间。 (7) K2—显示闹铃的时间 (8) K3—设置闹铃的时间。 。 (9) K4—设置完成。 (10) K5—闹铃 ON/OFF(即按下 k4 键可以开启或停止声响)的状态设置,定时"开始"按 键,启动定时 (11) K6—复位键 设置当前时间或闹铃时间如下: K1—对时的调整。 K2—对分的调整。 K3—对秒的调整。 K4—设置完成。 4、系统设计 共 33 页 第 4 页 4.1 AT89C52 单片机简介 许多由硬件设计中都使用到单片机 AT89C52,其功能比以往的单片机强大的多。 AT89C52 是一种高性能低功耗的采用 CMOS 工艺制造的 8 位微控制器,它提供下列标准 特征:4K 字节的程序存储器,128 字节的 RAM,32 条 I/O 线,2 个 16 位定时器/计数器, 一个 5 中断源和两个优先级的中断结构,一个双工的串行口, 片上震荡器和时钟电路。 引脚说明: ·VCC:电源电压 ·GND:地 ·P0 口:P0 口是一组 8 位漏极开路型双向 I/O 口, 作为输出口用时, 每个引脚能驱动 8 个 TTL 逻辑门电路。 当对 0 端口写入 1 时,可以作为高阻抗输入端使用。 当 P0 口访问外部程序存储器或数据存储器时,它 还可设定成地址数据总线复用的形式。在这种模式下, P0 口具有内部上拉电阻。 在 EPROM 编程时,P0 口

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧