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

📄 1797 05 protocol

📁 计算机ps.2 计算机ps.2
💻
字号:
//接收子函数
#include <head.c>
#define SECRET 0X89
unsigned char bdata s_buf,r_buf;
unsigned char data  last_s;
extern bit scan_on,secret_f;
extern unsigned char delay_count;
sbit s_buf0=s_buf^0;
sbit r_buf7=r_buf^7;
//sbit r_buf0=r_buf^0;
//sbit r_buf1=r_buf^1;
//sbit r_buf2=r_buf^2;

unsigned char bdata parity_buf;

sbit parity_buf0=parity_buf^0;

unsigned char data first_delay,old_delay;
extern unsigned char data delay_count;


unsigned char bdata scan_v,temp1,temp2;
sbit c0=scan_v^5;
sbit c1=scan_v^6;
sbit a0=scan_v^0;
sbit a1=scan_v^1;
sbit a2=scan_v^2;
sbit b0=scan_v^3;
sbit b1=scan_v^4;
sbit temp1_0=temp1^0;
sbit temp1_1=temp1^1;
sbit temp1_2=temp1^2;
sbit temp2_0=temp2^0;
sbit temp2_1=temp2^1;

void set_scan_v(unsigned char vv)
{
 scan_v=vv;
 temp1=0;
 temp1_0=c0;
 temp1_1=c1;
 first_delay=(1+temp1)*60;
 first_delay=first_delay/6*Frequence;
 temp1=0;
 temp2=0;
 temp1_0=a0;
 temp1_1=a1;
 temp1_2=a2;
 temp2_0=b0;
 temp2_1=b1;
 old_delay=(8+temp1)*(1<<temp2);  
 old_delay=old_delay/6*Frequence;
}
//unsigned char data counter=0,counter1=0,counter2=0;

void set_led(unsigned char c)
{
//  counter++;
  temp1=c;
  scroll_led=!temp1_0;
  num_led=!temp1_1;
  caps_led=!temp1_2;
}

void set_default()
{
  KBCLK=1;
  KBDATA=1;
  clr_buf();
  set_scan_v(SCAN_V_DEFAULT);
}

bit parity()
 {
  bit PARITY=1;
  unsigned char data c;
  for(c=0;c<8;c++)
    {
      PARITY^=parity_buf0;
      parity_buf=parity_buf>>1;
    }
  return PARITY; 
 }
void delay()//reentrant       //延时24us  
 {
   unsigned char data t=DELAY;
   for(;--t;);
 }

 void sleep()       //延时16us
 {
   unsigned char data t=SLEEP;
   for(;--t;);
 }

unsigned char receive(void)      //接收子函数
{
    unsigned char data i;
    bit PARITY;
    ET1=0;
    r_buf=0;
    while(!KBCLK);
    delay();
    if(KBDATA) 
     { send(0xfe);
       return 0;}
    delay();
    sleep();
    KBCLK=0;
    for(i=0;i<8;i++)
      {
        delay();
        sleep();
        KBCLK=1;
        sleep();
        if(!KBCLK) return 1; //接收中断
		r_buf7=KBDATA;
        if(i!=7)
           r_buf=r_buf>>1;
        delay();
        KBCLK=0;
      }
    delay();
    sleep();
    KBCLK=1;
    sleep();
    PARITY=KBDATA;
    delay();
    KBCLK=0;

    delay();
    sleep();
    KBCLK=1;
	//停止位
    delay();
    if(!KBDATA) {send(0xfe);return 0;}
    KBDATA=0;

    sleep();

    KBCLK=0;
    sleep();
    delay();
    KBCLK=1; 
    sleep();
    KBDATA=1;
    sleep();
    ET1=1;
    parity_buf=r_buf;
    if(PARITY==parity())
           return r_buf;
    else {send(0xfe);return 0;}
	//缺错误处理 *
}

bit send(unsigned char c)       //发送子函数
{
    unsigned char data i;
    bit PARITY;
    
    ET1=0;
    parity_buf=c;
    PARITY=parity();
    last_s=c;
    s_buf=c;
    if(command_s()) 
      return 0;
    KBDATA=0;
    sleep();
    KBCLK=0;
    for(i=0;i<8;i++)
    {
        sleep();
	    delay();
        KBCLK=1;
        sleep();
        if(!KBCLK)
	    return 0;
        KBDATA=s_buf0;
        s_buf=s_buf>>1;
        sleep();
        KBCLK=0;       
    }
    delay();
	sleep();
    KBCLK=1;
    sleep();
    if(!KBCLK)  
      return 0;
    KBDATA=PARITY;
    delay();
    KBCLK=0;

    delay();
    KBCLK=1;
    sleep();
    KBDATA=1;
    delay();
    KBCLK=0;
    delay();//延时60us
    delay();
    sleep();
    KBCLK=1;
    sleep();
    ET1=1;
	return 1;
}

void receive_v()
{
 scan_on=0;
 set_timer1(); 
 while(delay_count<200)
   {
    if(command_s())
      {
	   set_scan_v(receive());
	   send(0xfa);
	   scan_on=1;
	   break;
	}
   }
}
void receive_led()
{
  set_timer1();
  while(delay_count<200)
    {
	 if(command_s())
      {
	   set_led(receive());
	   send(0xfa);
	   break;
	  }
    }    
}
re_send()
{
  send(last_s);
}
void receive_process()
{
  unsigned char data command;
  if(!command_s())  return;
  command=receive();
  if(!command) return;
  switch(command)
    {
      case 0xff:
        send(0xfa);////////////////
        reset();
        break;
      case 0xfe:
	    send(0xfa);
        re_send();
        break;
      case 0xf6:
	    send(0xfa);
        set_default();
        scan_on=1;
        break;
      case 0xf5:
	    send(0xfa);
        set_default();
        scan_on=0;
        break;
      case 0xf4:
	    send(0xfa);
        scan_on=1;
        clr_buf();
        break;
      case 0xf3:
        send(0xfa);
	  receive_v();
        break;
      case 0xee:
        send(0xee);
        break;
      case 0xed:
        send(0xfa);
        receive_led();
		break;
	  case SECRET:
	    secret_f=1;
		break;
      default:
        send(0xfe);
    }
}

⌨️ 快捷键说明

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