#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; //傳輸數(shù)據(jù)
bit TXDflag=0; //發(fā)送標志位,等于1時發(fā)送
/*****************************
1ms基準延時程序
*****************************/
void delay_ms(unsigned int i)
{
uchar j;
while(i--)
{
for(j=0;j<125;j++)
{
;
}
}
}
/*****************************
函數(shù)聲明
*****************************/
void Init_serial(); //串口初始化
void Key_test(); //按鍵檢測
/**********************************
主函數(shù)
***********************************/
void main()
{
Init_serial();
// P0=0xff;
P1=0xff; //按鍵初始化
while (1)
{
Key_test();
}
}
/**********************************************
函數(shù)名: 按鍵檢測
功能: 輪流檢測按鍵, 并發(fā)送相應的鍵碼
**********************************************/
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;
}
}
/**********************************************
函數(shù)名: 串口初始化
功能: 設置串口通訊相關(guān)的寄存器, 只發(fā)送, 不使用中斷功能
**********************************************/
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; //接收數(shù)據(jù)
/*****************************
函數(shù)聲明
*****************************/
void Init_serial(); //串口中斷 寄存器準備
void Process_data(); //數(shù)據(jù)處理函數(shù)
/**************************************
主函數(shù)
***************************************/
void main()
{
Init_serial(); //串口中斷 寄存器準備
while (1)
{
Process_data(); //數(shù)據(jù)處理
}
}
/****************************************************************
函數(shù)名: 數(shù)據(jù)處理函數(shù)
功能: 判斷接收到的字符, 并作出對應的處理
*****************************************************************/
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;
}
/*****************************************************************
函數(shù)名:串口通訊初始化
功能: 設置串口通訊相關(guān)的寄存器
******************************************************************/
void Init_serial()
{
EA = 1; //開總中斷
ES = 1; //開串口中斷
SCON = 0x40; //串口通信方式1
REN = 1; //允許接受位
TMOD |= 0x20; //定時器1用于產(chǎn)生波特率,八位自動重裝模式, 用與運算, 不至于干擾定時器0的設置
TH1 = TL1 = 0xfd; //9600波特率初值
TR1 = 1; //注意千萬不要使用定時器1, 不然會與串口沖突
}
/*****************************************************************
函數(shù)名:串口中斷執(zhí)行函數(shù)
功能:接收主控機發(fā)的字符并儲存
******************************************************************/
void Serial() interrupt 4
{
if (RI) RI = 0; //中斷標志位清零
Received_data = SBUF; //保存接收的字符
}
|