⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1okencom.c

📁 读写器软件。用于非接触IC卡的操作和读写。
💻 C
字号:
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <stdlib.h>
#include <bios.h>
#define ESC  27
#define BUF_SIZE    1000
#define OK           '0'
#define CONNECT      '1'
#define RING         '2'
#define NO_CARRIER   '3'
#define ERROR        '4'
#define CONNECT_12   '5'
#define NO_DIAL_TONE '6'
#define BUSY         '7'
#define CONNECT_24  10
#define CONNECT_48  11
#define CONNECT_96  12
#define CONNECT_192 14

#define KB_F1 0x3b00
#define KB_F2 0x3c00
#define KB_F3 0x3d00
#define KB_F4 0x3e00
#define KB_F5 0x3f00
#define KB_F6 0x4000
#define KB_F7 0x4100
#define KB_F8 0x4200
#define KB_F9 0x4300
#define KB_F10 0x4400
#define KB_F11 0x4500
#define KB_F12 0x4600
FILE *fpr ;
int com_n,IRQ_n;
int com_address[8]={0x3f8,0x2f8, 0x3e8,0x2e8, 0x420,0x428, 0x520,0x528 };
char *baud_c[]={"1200","2400","4800","9600","19200","28800","38400","57600","115200","172800"};
int baud[10]={  0x60,  0x30,  0x18,   0x0c,  0x06, 0x04,  0x03,  0x02, 0x01,  0x80};

int blt;
int baud_n;

int maskb;

unsigned char buffer[BUF_SIZE+2];
unsigned char outchar,inchar;
unsigned int  cirin=0,cirout=0,charsinbuf=0;
void interrupt get();
void interrupt (*oldint)();
union REGS regs;
int init()
{
    cirin=0;cirout=0;charsinbuf=0;

    if((com_n==0)||(com_n==2))IRQ_n=4;
    if((com_n==1)||(com_n==3))IRQ_n=3;
    baud_n = 5 ;

    maskb=inportb(0x21);
    printf("Try COM%d\n",com_n+1);
    if(IRQ_n==4)
    {
           oldint=getvect(0x0c);
           setvect(0x0c,get);
           outportb(0x21,maskb&0x0ef);
    }
    else
    {
           oldint=getvect(0x0b);
           setvect(0x0b,get);
           outportb(0x21,maskb&0x0f7);
    }
    outportb(0x20,0x20);
    cirin=0;cirout=0;charsinbuf=0;
    outportb(com_address[com_n]+3,0x80);          //0x3fb,0x80
    outportb(com_address[com_n]+0,baud[baud_n]);  //0x3f8,0x18
    outportb(com_address[com_n]+1,0x00);          //0x3f9,0x00
    outportb(com_address[com_n]+3,0x23);          //0x3fb,0x23
    outportb(com_address[com_n]+4,0x0b);          //0x3fc,0x0b
    outportb(com_address[com_n]+1,0x01);          //0x3f9,0x01
    enable();

}
void clear_buf()
{
    cirin=0;cirout=0;charsinbuf=0;

}
int sendchar(unsigned char ch)
{
    delay(1);
    while(!inportb(com_address[com_n]+5)&0x20);
    outportb(com_address[com_n],ch);
    printf("%02X ",ch);
}
void interrupt get()
{
    outportb(com_address[com_n]+4,0x09);
    if(charsinbuf<BUF_SIZE)
    {

          buffer[cirin]=inportb(com_address[com_n]);
          if(cirin<BUF_SIZE)cirin++;
          else cirin=0;
          charsinbuf++;
          outportb(0x20,0x20);
    }
    outportb(com_address[com_n]+4,0x0b);
}

int sendchars(char chs[])
{
    int i;
    for(i=0;chs[i];i++)sendchar(chs[i]);
}

unsigned char getcharinbuf()
{
     unsigned int ch;
     if(charsinbuf>0)
     {
            ch=buffer[cirout];
            if(cirout<BUF_SIZE)cirout++;
            else cirout=0;
            charsinbuf--;
            return(ch);
      }
     else  return('\0');
}

int convert_hex(unsigned char *s,int i)
{
   int val,l=0;
   unsigned char buf[5],buffer;
   for(l=0;l<i;l++)
   {
       strncpy(buf,s+2*l,2);
       buf[2]   = 0x20;
       buf[3] = 0;
       sscanf(buf,"%x",&val);
       s[l]  = val;
   }
   return(0) ;
}
void send_command(char *string)
{
     int i ,j ,length ;
     unsigned char buffer[60] , checksum ;
     for(;;)
     {
        fgets(string,130,fpr)   ;
	if(strncmp(string,"REM",3))break ;
	//else printf("%s",&string[3]);
     }
     length = strlen(string)-1  ;
     convert_hex(string,length/2) ;
     checksum = 0;
     for(i=0;i<length/2;i++)
     {
        checksum = checksum+string[i] ;
     }
     string[length/2] = checksum ;
     buffer[0] = 0x02 ;

     j = 1 ;
     for(i=0;i<length/2+1;i++)
     {
        if((string[i]==0x02)||(string[i]==0x03)||(string[i]==0x10))
        {
           buffer[j] = 0x10;
           j++ ;
        }
        buffer[j] = string[i] ;
        j++ ;
     }
     buffer[j] = 0x03 ;
     i = 0 ;
     while(1)
     {
         sendchar(buffer[i]);
         if((buffer[i]==0x03)&&(buffer[i-1]!=0x10)) break ;
	 i ++ ;
     }

}

int main(int argv,char *argc[])
{
     unsigned char chs[256] ;
     unsigned int key,j;
     int i,flag,bz ;
     unsigned char a,c ;
     FILE *fp ;
     fp=fopen("lck.txt","wb");
     fpr=fopen("command.txt","r");
     if(argv<2)com_n=0;
     else{
             com_n=argc[1][0]-'1';
             if(com_n>7)com_n=7;
         }
    com_n = 1 ;
     init();
     do{    while(charsinbuf)
            {
                   a =  getcharinbuf();
                   if(a==0xaa)
		   {
			 printf("\n") ;
			 fprintf(fp,"\n");
		   }
		   else
		   {
			 printf("%02x ",a);
			 fprintf(fp,"%02x",a);
		   }
	     }
	     if(kbhit())
	     {
		   key=bioskey(0);
		   if(key==KB_F1)
		   {       printf("\n");
			   fprintf(fp,"\n") ;
			   send_command(chs) ;
			   printf("\n") ;
			   fprintf(fp,"\n") ;

		   }
		   else if(key==KB_F2)
		   {
			fclose(fpr) ;
			fpr=fopen("command.txt","r");
		   }
		   else if(key==KB_F9) clrscr();
		   if((key&0xff)==0)continue;
		   if((key&0xff)==27)
		   {
                        fclose(fpr);
                        fclose(fp) ;
                        break;
                   }
             }

      }while(1);
      if(IRQ_n==4) setvect(0x0c,oldint);
      else setvect(0x0b,oldint);
      outport(0x21,maskb);
      return 1 ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -