#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
/***********按键声明************/
sbit key_0=P0^0;
sbit key_1=P0^1;
sbit key_2=P0^2;
sbit key_3=P0^3;
sbit key_4=P0^4;
sbit key_5=P0^5;
sbit key_6=P0^6;
sbit key_7=P0^7;
uint Transmit_data=0; //传输数据
bit TXDflag=0; //发送标志位,等于1时发送
/*****************************
1ms基准延时程序
*****************************/
void delay_ms(unsigned int i)
{
uchar j;
while(i--)
{
for(j=0;j<125;j++)
{
;
}
}
}
/*****************************
函数声明
*****************************/
void Init_serial(); //串口初始化
void Key_test(); //按键检测
/**********************************
主函数
***********************************/
void main()
{
Init_serial();
// P0=0xff;
P1=0xff; //按键初始化
while (1)
{
Key_test();
}
}
/**********************************************
函数名: 按键检测
功能: 轮流检测按键, 并发送相应的键码
**********************************************/
void Key_test()
{
if(P0!=0xff)
{
delay_ms(10);
if(P0!=0xff)
{
if(key_0==0)
Transmit_data= 'a';
else if(key_1==0)
Transmit_data= 'b';
else if(key_2==0)
Transmit_data= 'c';
else if(key_3==0)
Transmit_data= 'd';
else if(key_4==0)
Transmit_data= 'e';
else if(key_5==0)
Transmit_data= 'f';
else if(key_6==0)
Transmit_data= 'g';
else if(key_7==0)
Transmit_data= 'h';
}
while(P1!=0xff);
TXDflag=1;
}
if(TXDflag==1)
{
SBUF=Transmit_data;
TXDflag=0;
}
}
/**********************************************
函数名: 串口初始化
功能: 设置串口通讯相关的寄存器, 只发送, 不使用中断功能
**********************************************/
void Init_serial()
{
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
SCON = 0x40;
TR1 = 1;
}
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint Received_data=0; //接收数据
/*****************************
函数声明
*****************************/
void Init_serial(); //串口中断 寄存器准备
void Process_data(); //数据处理函数
/**************************************
主函数
***************************************/
void main()
{
Init_serial(); //串口中断 寄存器准备
while (1)
{
Process_data(); //数据处理
}
}
/****************************************************************
函数名: 数据处理函数
功能: 判断接收到的字符, 并作出对应的处理
*****************************************************************/
void Process_data()
{
if(Received_data==0)
P0=0xff;
else if(Received_data=='a')
P0=0xfe;
else if(Received_data=='b')
P0=0xfd;
else if(Received_data=='c')
P0=0xfb;
else if(Received_data=='d')
P0=0xf7;
else if(Received_data=='e')
P0=0xef;
else if(Received_data=='f')
P0=0xdf;
else if(Received_data=='g')
P0=0xbf;
else if(Received_data=='h')
P0=0x7f;
}
/*****************************************************************
函数名:串口通讯初始化
功能: 设置串口通讯相关的寄存器
******************************************************************/
void Init_serial()
{
EA = 1; //开总中断
ES = 1; //开串口中断
SCON = 0x40; //串口通信方式1
REN = 1; //允许接受位
TMOD |= 0x20; //定时器1用于产生波特率,八位自动重装模式, 用与运算, 不至于干扰定时器0的设置
TH1 = TL1 = 0xfd; //9600波特率初值
TR1 = 1; //注意千万不要使用定时器1, 不然会与串口冲突
}
/*****************************************************************
函数名:串口中断执行函数
功能:接收主控机发的字符并储存
******************************************************************/
void Serial() interrupt 4
{
if (RI) RI = 0; //中断标志位清零
Received_data = SBUF; //保存接收的字符
}
|