阅读:1455回复:5
请教:关于在C里面嵌套汇编语言关闭显示的问题。
我用BC写了一段代码,里面嵌套了一些汇编,用于关闭显示的输出,有点类似与WINDOWS的黑屏屏保。
代码如下: void LCD_OFF() { static int flag=-1; if(LCD_flag==flag)return; flag=LCD_flag; if(LCD_flag==1) asm{ mov ah,0x4f //;使用VESA mov al,0x10 //;选择节能子功能号 mov bl,0x01 //;设置显示器的电源状态 mov bh,0x00 //;选择节能方式(挂起) int 0x10 //;调用VESA程序 } else asm{ mov ah,0x4f //;使用VESA mov al,0x10 //;选择节能子功能号 mov bl,0x01 //;设置显示器的电源状态 mov bh,0x00 //;选择节能方式(挂起) int 0x10 //;调用VESA程序 } /* 开启: BH=0x00; 挂起: BH=0x01; 睡眠: BH=0x02; 关闭: BH=0x04; LCD OFF: BH=0x08; BL=0x01 设置显示器的电源状态 BL=0x02 获得显示器当前电源状态*/ } 但是我发现这段代码不具有同用性。在PC上运行一切正常,在PC104板(工控386主板)DOS6.22环境下经常会发生屏保几个小时后不能唤醒,在一个小时左右的时间内唤醒没有问题。 请问,该问题该如何解决?望指点! :( :( :( :( :( |
|
|
沙发#
发布于:2002-11-11 13:36
是否与PC104有关?
|
|
|
板凳#
发布于:2002-11-11 14:12
是否与PC104有关? 我想WIN98在写屏保时不会去考虑每一款显卡吧? PC104板采用的是F65545显示芯片。 芯片上印有如下文字: CHIPS F65545 B2 W65545AE3 0105-W KOREA IQ06E -5 我上面的代码在CRT显示器上工作正常,对LCD显示器(如笔记本)者不太正常。 有没有谁写过类似功能的代码,拿出来分享一下啊。 :D |
|
|
地板#
发布于:2002-11-11 17:47
在Win98中不要去调用int 10直接写寄存器好了,可以用来关闭显示的,可以参考VESA标准。显卡都支持的。
还有一种办法可以使用APM/ACPI的功能调用可以用来关设备电源如IDE硬盘、显示设备等。找到它们的标准规范都可以操作的。 |
|
|
地下室#
发布于:2002-11-13 09:00
在Win98中不要去调用int 10直接写寄存器好了,可以用来关闭显示的,可以参考VESA标准。显卡都支持的。 那么好心的 minsoft 不知你能否提供一些关于VESA的标准或APM/ACPI方面的资料呢? 找了一下没找着。 :) :D :) :D |
|
|
5楼#
发布于:2002-11-13 09:40
VESA specification用 google应该可以搜索得到。
APM的调用可以在中断调用大全(interrupt.hlp)中查到,好象本站有。它有16b/32b两种调用接口,DOS用16,WIN用32 ACPI/APM的调用可看MSDN中power manager部分。 |
|
|