中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-10-31 15:54
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行
DOS开发编程 & 发展交流 (开发室) » [原创]我写的键盘程序,呵呵,还很幼稚哦!
可打印版本  1,216 / 6
第1楼 xy_god 发表于 2003-10-26 00:00
中级用户 发帖 56 积分 276
[原创]我写的键盘程序,呵呵,还很幼稚哦!
/************************************************/
/* 通过8042芯片与键盘通信示例程序 */
/* 作者:xy_god */
/************************************************/
#include "dos.h"
#include "stdio.h"
#include "conio.h"

int iCode=0;
int blKey=0;
void interrupt ( *oldhandler)(void);/*中断处理函数指针*/

void interrupt handler(void);
int getbit(char c,int i);
void getkeystate();

int main(void)/***********************主函数***********************/
{
int a;
oldhandler = getvect(0X09);/*取得原先键盘中断地址*/
setvect(0X09, handler);/*安装新的键盘中断*/
getkeystate();
printf("*********************************************\n";
while (1)
{
if(blKey==1)
{
blKey=0;
printf("%X",iCode);
printf("****";
getkeystate();
}
}
setvect(0X09, oldhandler);/*恢复键盘中断*/
return 0;
}/*****************************************************************/

void interrupt handler(void)/*键盘中断处理程序*/
{
blKey=1;
iCode=inport(0x60);
oldhandler();
}
int getbit(char c,int i)/*获取字节的第i位的值*/
{
int mi;
mi=c<127)
return 1;
else
return 0;
}

void getkeystate()/*获取键盘状态*/
{
int i,ic=0,bitvalue;
for(ic=0;ic<8;ic++)
{
i=inport(0x64);
bitvalue=getbit(i,ic);
switch(ic)
{
case 0:
if(bitvalue) printf("OBF=TRUE\n"; else printf("OBF=FALSE\n";
break;
case 1:
if(bitvalue) printf("IBF=TRUE\n"; else printf("IBF=FALSE\n";
break;
case 2:
if(bitvalue) printf("SYS=TRUE\n"; else printf("SYS=FALSE\n";
break;
case 3:
if(bitvalue) printf("A2=TRUE\n"; else printf("A2=FALSE\n";
break;
case 4:
if(bitvalue) printf("INTH=TRUE\n"; else printf("INH=FALSE\n";
break;
case 5:
if(bitvalue) printf("TxTO=TRUE\n"; else printf("TxTO=FALSE\n";
break;
case 6:
if(bitvalue) printf("RxTO=TRUE\n"; else printf("RxTO=FALSE\n";
break;
case 7:
if(bitvalue) printf("PERR=TRUE\n"; else printf("PERR=FALSE\n";
break;
}
}
}
第2楼 xy_god 发表于 2003-10-26 00:00
中级用户 发帖 56 积分 276
这个程序是用TC2。0写的,开发环境是吴进的WIN-TC172,呵呵!
本来可读性是很好的,可是不知道怎么回事情发到论坛上就变了样,凑合看吧!
其实大家仔细看一看,这个程序和用SDK 开发WINDOWS程序是的结构很相似的,用他就可以实现DOS程序的多线程,注意,我说的是多线程,不是多任务哦,呵呵!
这是一个8042的PS2键盘的程序,等我看完关于鼠标的内容,我会写个鼠标的驱动给大家,
不过,现在真的很忙,没空写,所以要等一段时间了,真的很无奈!TMD!
第3楼 lemonhall 发表于 2003-10-27 00:00
高级用户 发帖 183 积分 639
it's only a console program, but not a dos program.
第4楼 xy_god 发表于 2003-10-27 00:00
中级用户 发帖 56 积分 276
拜托啦,楼上的,我是用TC20写的,什么CONSOLE程序啊,纯粹的DOS程序好不啦!
你仔细看了没有啊,老天爷!
我是在模仿WIN32 SDK的程序结构啦!
第5楼 lemonhall 发表于 2003-10-27 00:00
高级用户 发帖 183 积分 639
it's my fault, sorry.it's really a hardware programm
第6楼 xy_god 发表于 2003-10-27 00:00
中级用户 发帖 56 积分 276
我曾经用这个结构写过一个DOS图形系统,
定义了好多消息结构,也挺好玩的,
实现了多线程,不过要处理和初始化好多中断!
完全是以消息为基础的,我希望有人受到这个启发,开发一个函数库,以后开发DOS
程序的时候就有一个图形化标准了,而且程序的框架都是统一的!

第7楼 alhan 发表于 2004-05-12 00:00
初级用户 发帖 11 积分 125
>我曾经用这个结构写过一个DOS图形系统
放上来,让我们看看.
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023