senddata.c

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

C
92
字号
#include "senddata.h"


void senddata(unsigned char keyvalue)
{
	unsigned char result = 1, checkcount = 0, sum = 0;
	bit flag_check=1;
	//delay(5000000);
	for(checkcount = 0; checkcount < 8; checkcount++)
	{
		if((keyvalue & result)!=0)
		{
			flag_check=!flag_check;
		}
		result = result << 1;
	}
	keyclk=1;keyclk1=1;
	/*
	if(!keyclk)
	{
	return;
	}
	*/
	//(1)检测时钟线电平,如果时钟线为低,则延时50μs;
step1:
	while(!keyclk)			//1) Wait for Clock = high.
	{
	}
//step2:
	delay_50us();				//2) Delay 50 microseconds.
	keyclk=1;keyclk1=1;		
	keydata=1;keydata1=1;
//step3:
	if(keyclk==1)			//3) Clock still = high? No--goto step 1
	{
		delay_20us();
	}
	else
	{
		goto step1;
	}
	if(keyclk==1&&keydata==1)
	{
		delay_20us();			// Delay 20 microseconds
		keydata=0;keydata1=0;	//1) Set/Reset Data
		delay_20us();			//2) Delay 20 microseconds
		keyclk=0;keyclk1=0;		//3) Bring Clock low
		delay_40us();			//4) Delay 40 microseconds
		keyclk=1;keyclk1=1;
		delay_20us();

		result=1;
		for(checkcount=0;checkcount<8;checkcount++)
		{
			if((keyvalue&result)!=0)
			{
				keydata=1;keydata1=1;
			}
			else
			{
				keydata=0;keydata1=0;
			}
			delay_20us();
			keyclk=0;keyclk1=0;
			delay_40us();
			result=result<<1;
			keyclk=1;keyclk1=1;
			delay_20us();
		}
//		keyclk=1;keyclk1=1;
//		delay(4);
		//parity bit
		keydata=flag_check;
		keydata1=flag_check;
		delay_20us();
		keyclk=0;keyclk1=0;
		delay_40us();
		keyclk=1;keyclk1=1;
		delay_20us();
		//stop bit
		keydata=1;keydata1=1;
		delay_20us();
		keyclk=0;keyclk1=0;
		delay_40us();
		keyclk=1;keyclk1=1;
		delay_20us();
		keyclk=1;keyclk1=1;
		keydata=1;keydata1=1;
		delay_20us();
	}
//	return;
}

⌨️ 快捷键说明

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