代码和仿真图如下,求各位帮忙看看是什么问题,谢谢。
主机代码
#include<reg51.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar key_bpard;
uchar D_ADDR;
/********************************************************************/
void delay(uint tt)
{
uchar i;
for(;tt>0;tt--)
{
for(i=0;i<2;i++);
}
}
/********************************************************************/
uchar GET_KEY(void)
{
uchar lin_on,lin_tw;
P1=0XF0;
if((P1&0x0f)!=0xf0)
{
delay(20);
if((P1&0x0f)!=0xf0)
{
lin_on=0xfe;
while((lin_on&0x10)!=0)
{
P1=lin_on;
if((P1&0XF0)!=0XF0)
{
lin_tw=(P1&0XF0)|0X0F;
return((~lin_tw)+(~lin_on));
}
else
{
lin_on=(lin_on<<1)|0x01;
}
}
}
}
return(0);
}
/********************************************************************/
void CHOSE_key(void)
{
uchar i;
P1=0XF0;
if((P1&0x0f)!=0xf0)
{
i=GET_KEY();
P1=0XF0;
while((P1&0xf0)!=0xf0);
}
switch(i)
{
case 136:key_bpard=1;
break;
case 72:key_bpard=2;
break;
case 40:key_bpard=3;
break;
case 24:key_bpard=4;
break;
case 132:key_bpard=5;
break;
case 68:key_bpard=6;
break;
case 36:key_bpard=7;
break;
case 20:key_bpard=8;
break;
case 130:key_bpard=9;
break;
case 66:key_bpard=0;
break;
case 34:break;
case 18:break;
case 129:break;
case 65:break;
case 33:D_ADDR=0x02;break;
case 17:D_ADDR=0x01;break;
}
}
void send_buf(void)
{
SBUF=D_ADDR;
while(!ti);
TI=0;
SBUF=key_bpard;
while(!TI);
TI=0;
delay(3000);
}
void main(void)
{
IP=0x00;
TMOD = 0x21; /*定时器1工作方式2;定时器0工作方式0*/
SCON = 0x50; /*串口工作方式1,接收允许*/
PCON = 0x00; /*波特率 不 加倍*/
TH1 = 0xFD; /*波特率 9600*/
TL1 = 0xFD;
TR1 = 1;/*定时器1开*/
PS = 1; /*串口中断优先级 高*/
EA = 1; /*开总中断*/
//ES = 1; /*开串口中断*/
while(1)
{
CHOSE_key();
send_buf();
}
}
void dushu(void) interrupt 4 using 1 //串口接收中断
{
while(RI==0);
P2=SBUF;
RI=0;
}
从机1代码
#include<reg51.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar count;
uchar rbuf[3];
uchar KEY_BORD;
uchar tab[10]={0x40,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x00,0x98};
/********************************************************************/
void delay(uint tt)
{
uchar i;
for(;tt>0;tt--)
{
for(i=0;i<2;i++);
}
}
void main(void)
{
IP=0x00;
TMOD = 0x21; /*定时器1工作方式2;定时器0工作方式0*/
SCON = 0x50; /*串口工作方式1,接收允许*/
PCON = 0x00; /*波特率 不加倍*/
TH1 = 0xFD; /*波特率 9600*/
TL1 = 0xFD;
TR1 = 1;/*定时器1开*/
PS = 1; /*串口中断优先级 高*/
EA = 1; /*开总中断*/
ES = 1; /*开串口中断*/
while(1)
{
KEY_BORD=P1;
delay(2);
P2=tab[rbuf[1]];
}
}
void dushu(void) interrupt 4 using 1 //串口接收中断
{
while(RI==0);
rbuf[count]=SBUF;
RI=0;
if(rbuf[0]==0x01)
{
count=count+1;
if(count>1)
{
count=0;
SBUF=KEY_BORD;
while(!TI);
TI=0;
}
}
else
{
count=0;
}
}
从机2代码
#include<reg51.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar count;
uchar rbuf[3];
uchar KEY_BORD;
uchar tab[10]={0x40,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x00,0x98};
/********************************************************************/
void delay(uint tt)
{
uchar i;
for(;tt>0;tt--)
{
for(i=0;i<2;i++);
}
}
void main(void)
{
IP=0x00;
TMOD = 0x21; /*定时器1工作方式2;定时器0工作方式0*/
SCON = 0x50; /*串口工作方式1,接收允许*/
PCON = 0x00; /*波特率 不加倍*/
TH1 = 0xFD; /*波特率 9600*/
TL1 = 0xFD;
TR1 = 1;/*定时器1开*/
PS = 1; /*串口中断优先级 高*/
EA = 1; /*开总中断*/
ES = 1; /*开串口中断*/
while(1)
{
KEY_BORD=P1;
delay(2);
P2=tab[rbuf[1]];
}
}
void dushu(void) interrupt 4 using 1 //串口接收中断
{
while(RI==0);
rbuf[count]=SBUF;
RI=0;
if(rbuf[0]==0x02)
{
count=count+1;
if(count>1)
{
count=0;
SBUF=KEY_BORD;
while(!TI);
TI=0;
}
}
else
{
count=0;
}
}
-
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>