/************************************************/
/* 通过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;
}
}
}
/* 通过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;
}
}
}
临河居士
http://www.xygod.pc5.org
http://www.xygod.pc5.org



