![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-31 19:17 |
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 在DOS下如何用C实现键盘某键的按下 |
| 可打印版本 3,844 / 22 |
| 第16楼 hebecoco | 发表于 2006-12-27 03:00 |
| 初级用户 发帖 25 积分 63 | |
|
dear zly910:
你好! 感谢你提供的宝贵资料! 我有将你这段代码进行编译和运行,可以抓到那几个键而且有相应的响应,因本人知识的贫乏对中断还不是很懂,所以有几个问题还要请教下 http://www.computer-engineering.org/ps2keyboard/scancodes1.html 你应该有看过,对于一般的按键makecode和breakcode都只有1个字节,读出来的值是正常的,但是有很多有2个字节的,比如说播放键是EO,22和E0,2A,但是这里只能抓出2个E0来,也就是说只能取出他们的前面一个字节,是否可以改成抓出2个字节的,因为我不知道你用中断是如何实现的,还请你指点一下. |
|
| 第17楼 hebecoco | 发表于 2006-12-27 03:49 |
| 初级用户 发帖 25 积分 63 | |
|
我有试过将char换成int,将inportb(0x60)换成inport(0x60),效果还是一样
|
|
| 第18楼 hebecoco | 发表于 2006-12-27 05:20 |
| 初级用户 发帖 25 积分 63 | |
|
还是要修改中断?该如何改?
|
|
| 第19楼 AlwaysInherit | 发表于 2006-12-27 06:13 |
| 初级用户 发帖 46 积分 112 | |
|
偷偷google再来顶帖!
http://www.osdev.org/osfaq2/index.php/Getting%20Keyboard%20Input
|
|
| 第20楼 hebecoco | 发表于 2006-12-27 06:27 |
| 初级用户 发帖 25 积分 63 | |
|
谢谢,在study中.
还想问下zly910,你那段代码中加入的那2行汇编是起什么作用? 如果有看到,麻烦解答下,谢谢 有知道的大虾也帮看下 |
|
| 第21楼 AlwaysInherit | 发表于 2006-12-27 06:44 |
| 初级用户 发帖 46 积分 112 | |
|
disable interrupt -> 避免被其他发生的interrupt切换走 , 应该是避免跟ISRs race
|
|
| 第22楼 hebecoco | 发表于 2006-12-27 08:44 |
| 初级用户 发帖 25 积分 63 | |
|
问题解决了,读2次0X60,因为中断程序没次只能是读1个字节,就算是换成inport()也是没用的,象那些有2个字节的键,会先进去高位,一般高位都是E0,然后再进去低,如果没有新的中断近来,低位会一直驻留在0X60的PORT中!!
很高兴问题解决,感谢AlwaysInherit和zly910的顶立支持,感谢CCTV,感谢ChinaV!! |
|
| 第23楼 hebecoco | 发表于 2007-03-23 04:57 |
| 初级用户 发帖 25 积分 63 | |
|
提上来看下
|
|
| 上一页 1 2 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |