/****************************************************************************************************************
*************************
*Author:JYW
*Time:2019_02_18
*Describe:LetAllLinesOfCodeSpeak
*****************************************************/
/***********************************************
*TX_51单片机入门教程P225练习笔记
*Describe:发送方程序,双机通信一方将检测到的按键值发送出去
另一方接收到发送方的数字后显示出来
**************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delayms(uint xms)
{
uint i,j;
for(i = xms; i>0;i--)
for(j= 110; j>0;j--);
}//i=xms即延时约xms毫秒
void send(uchar key_num)
{
SBUF = key_num;
while(!TI);
TI = 0;
}
void GetKey_num()
{
uchar temp,key;
P3 = 0xFE;//1111 1110 即P3^0为0;
temp = P3;
temp = temp & 0xF0;
if(temp != 0xF0)//说明按键按下改变了P3口的高四位
{
delayms(10);
temp = P3;
temp = temp &0xF0;
if(temp!= 0xF0)
{
temp = P3;
switch(temp)
{
case 0xEE: //1110 1110
{
key = 0;
break;
}
case 0xDE://1101 1110
{
key = 1;
break;
}
case 0xBE: //1011 1110
{
key = 2;
break;
}
case 0x7E: //0111 1110
{
key = 3;
break;
}
}
while(temp !=0xF0)
{
temp = P3;
temp = temp & 0xF0;
}
send(key);
}
}
P3 = 0xFD;//1111 1101
temp = P3;
temp = temp & 0xF0;
if(temp != 0xF0)
{
delayms(10);
temp = P3;
temp = temp & 0xF0;
if(temp != 0xF0)
{
temp = P3;
switch(temp)
{
case 0xED://1110 1101
{
key = 4;
break;
}
case 0xDD:
{
key = 5;
break;
}
case 0xBD:
{
key = 6;
break;
}
case 0x7D:
{
key = 7;
break;
}
}
while(temp != 0xF0)
{
temp = P3;
temp = temp & 0xF0;
}
send(key);
}
}
P3 = 0xFB;//1111 1011
temp = P3;
temp = temp & 0xF0;
if(temp != 0xF0)
{
delayms(10);
temp = P3;
temp = temp & 0xF0;
if(temp != 0xF0)
{
temp = P3;
switch(temp)
{
case 0xFB:
{
key = 8;
break;
}
case 0xDB:
{
key = 9;
break;
}
case 0xBB:
{
key = 10;
break;
}
case 0x7B:
{
key = 11;
break;
}
}
while(temp != 0xF0)
{
temp = P3;
temp = temp & 0xF0;
}
send(key);
}
}
P3 = 0xF7;
temp = P3;
temp = temp &0xF0;
if(temp != 0xF0)
{
delayms(10);
temp = P3;
temp = temp & 0xF0;
if(temp != 0xF0)
{
temp = P3;
switch(temp)
{
case 0xE7:
{
key = 12;
break;
}
case 0xD7:
{
key = 13;
break;
}
case 0xB7:
{
key = 14;
break;
}
case 0x77:
{
key = 15;
break;
}
}
while(temp & 0xF0)
{
temp = P3;
temp = temp & 0xF0;
}
send(key);
}
}
}
void main()
{
TMOD = 0x20;
TH1 =TL1 = 0xFD;
TR1 = 1;
SM0 = 0;
SM1 = 1;
EA = 1;
ES = 1;
while(1)
{
GetKey_num();
}
}