recvdata.c

来自「PS/2接口转矩阵键盘,51单片机编程实现」· C语言 代码 · 共 84 行

C
84
字号
#include "recvdata.h"


unsigned char recvdata(void)
{
	unsigned char datavalue=0,count=0,temp=1;
	bit flag_checked=1,error=0;

	if(keyclk==1)
	{
		return NORECVDATA;
	}

	/* wait keyclk to high */
	while(!keyclk)
	{
	}

	/* check keydata */
	if(keydata)
	{
		return RECVERROR;
	}

	/*	recv data	*/
	datavalue=0;
	temp=1;
	flag_checked=1;

	for(count=0;count<8;count++)
	{
		delay(4);
		keyclk=0;
		delay(8);
		keyclk=1;
		delay(4);
		if(keydata)
		{
			datavalue=datavalue|(temp<<count);
			flag_checked=!flag_checked;
		}
	}

	/*	recv checkparam	*/
	delay(4);
	keyclk=0;
	delay(8);
	keyclk=1;
	delay(4);

	if(keydata!=flag_checked)
	{
		error=1;
	}

	/*	recv stop bit */
	delay(4);
	keyclk=0;
	delay(8);
	keyclk=1;
	delay(4);

	while(!keydata)
	{
	}

	/*	send ack */
	delay(3);
	keydata=0;
	delay(1);
	keyclk=0;
	delay(8);
	keyclk=1;
	delay(1);
	keydata=1;	
	delay(9);

	if(error==1)
	{
		return RECVERROR;
	}
	
	return datavalue;
}

⌨️ 快捷键说明

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