基于51单片机的双机聊天.docx
- 文档编号:29939407
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:21
- 大小:16.96KB
基于51单片机的双机聊天.docx
《基于51单片机的双机聊天.docx》由会员分享,可在线阅读,更多相关《基于51单片机的双机聊天.docx(21页珍藏版)》请在冰豆网上搜索。
基于51单片机的双机聊天
基于51单片机的双机聊天
Protuse仿真图如下:
关于仿真图的几点说明:
1.双机硬件配置一摸一样,是完全对称的,为了简化电路,我只画出了一个显示器,但这并不影响仿真结果。
2.其次,双机的程序是一样的,下载的是同一个HEX文件。
3.由于protuse中的12864不带字库,需要自己编写字库。
源程序如下:
头文件:
#ifndefLCMDRV_12864
#defineLCMDRV_12864
externvoidLCM_Init(uint8f);
externvoidLCM_DispStrXY(uint8bY,uint8bX,char*pStr);
主程序:
#include"LCMDRV_12864.h"
#include
#include
sbitP1_1=P1^1;
sbitP1_2=P1^2;
sbitP1_3=P1^3;
sbitP1_4=P1^4;
sbitP1_5=P1^5;
sbitP1_6=P1^6;
sbitP1_7=P1^7;
sbitP3_2=P3^2;
sbitP3_3=P3^3;
sbitP3_4=P3^4;
sbitP3_5=P3^5;
charL1,L2,L3,L4,L5,H1,H2,H3,H4,H5,H6;
charenter=0,del=0,shift=0,p=0,j=0,i=0,q=0;
charS_DATA[17]="";
charC_DATA[20]="";
charBUFA[]="A:
";
charBUFB[]="B:
";
charR_DATA[17]="";
voidGetHeng(void)
{
H1=P3_2;
H2=P3_3;
H3=P3_4;
H4=P3_5;
H5=P1_1;
H6=P1_2;
}
voidGetLie(void)
{
L1=P1_4;
L2=P1_5;
L3=P1_6;
L4=P1_7;
L5=P1_3;
}
charJianPan(void)
{
P3|=0x3C;
P1|=0x06;
if(L1==0)
{
P1&=0xEF;
GetHeng();
P1|=0x10;
if(!
H1)
{
P3&=0xFB;
while(!
P1_4);
if(shift==1)
{
shift=0;
return'A';
}
else
return'a';
}
if(!
H2)
{
P3&=0xF7;
while(!
P1_4);
if(shift==1)
{
shift=0;
return'B';
}
else
return'b';
}
if(!
H3)
{
P3&=0xEF;
while(!
P1_4);
if(shift==1)
{
shift=0;
return'C';
}
else
return'c';
}
if(!
H4)
{
P3&=0xDF;
while(!
P1_4);
if(shift==1)
{
shift=0;
return'D';
}
else
return'd';
}
if(!
H5)
{
P1&=0xFD;
while(!
P1_4);
if(shift==1)
{
shift=0;
return'E';
}
else
return'e';
}
if(!
H6)
{
P1&=0xFB;
while(!
P1_4);
if(shift==1)
{
shift=0;
return'F';
}
else
return'f';
}
}
if(L2==0)
{
P1&=0xDF;
GetHeng();
P1|=0x20;
if(!
H1)
{
P3&=0xFB;
while(!
P1_5);
if(shift==1)
{
shift=0;
return'G';
}
else
return'g';
}
if(!
H2)
{
P3&=0xF7;
while(!
P1_5);
if(shift==1)
{
shift=0;
return'H';
}
else
return'h';
}
if(!
H3)
{
P3&=0xEF;
while(!
P1_5);
if(shift==1)
{
shift=0;
return'I';
}
else
return'i';
}
if(!
H4)
{
P3&=0xDF;
while(!
P1_5);
if(shift==1)
{
shift=0;
return'J';
}
else
return'j';
}
if(!
H5)
{
P1&=0xFD;
while(!
P1_5);
if(shift==1)
{
shift=0;
return'K';
}
else
return'k';
}
if(!
H6)
{
P1&=0xFB;
while(!
P1_5);
if(shift==1)
{
shift=0;
return'L';
}
else
return'l';
}
}
if(L3==0)
{
P1&=0xBF;
GetHeng();
P1|=0x40;
if(!
H1)
{
P3&=0xFB;
while(!
P1_6);
if(shift==1)
{
shift=0;
return'M';
}
else
return'm';
}
if(!
H2)
{
P3&=0xF7;
while(!
P1_6);
if(shift==1)
{
shift=0;
return'N';
}
else
return'n';
}
if(!
H3)
{
P3&=0xEF;
while(!
P1_6);
if(shift==1)
{
shift=0;
return'O';
}
else
return'o';
}
if(!
H4)
{
P3&=0xDF;
while(!
P1_6);
if(shift==1)
{
shift=0;
return'P';
}
else
return'p';
}
if(!
H5)
{
P1&=0xFD;
while(!
P1_6);
if(shift==1)
{
shift=0;
return'Q';
}
else
return'q';
}
if(!
H6)
{
P1&=0xFB;
while(!
P1_6);
if(shift==1)
{
shift=0;
return'R';
}
else
return'r';
}
}
if(L4==0)
{
P1&=0x7F;
GetHeng();
P1|=0x80;
if(!
H1)
{
P3&=0xFB;
while(!
P1_7);
if(shift==1)
{
shift=0;
return'S';
}
else
return's';
}
if(!
H2)
{
P3&=0xF7;
while(!
P1_7);
if(shift==1)
{
shift=0;
return'T';
}
else
return't';
}
if(!
H3)
{
P3&=0xEF;
while(!
P1_7);
if(shift==1)
{
shift=0;
return'U';
}
else
return'u';
}
if(!
H4)
{
P3&=0xDF;
while(!
P1_7);
if(shift==1)
{
shift=0;
return'V';
}
else
return'v';
}
if(!
H5)
{
P1&=0xFD;
while(!
P1_7);
if(shift==1)
{
shift=0;
return'W';
}
else
return'w';
}
if(!
H6)
{
P1&=0xFB;
while(!
P1_7);
if(shift==1)
{
shift=0;
return'X';
}
else
return'x';
}
}
if(L5==0)
{
P1&=0xF7;
GetHeng();
P1|=0x08;
if(!
H1)
{
P3&=0xFB;
while(!
P1_3);
if(shift==1)
{
shift=0;
return'Y';
}
else
return'y';
}
if(!
H2)
{
P3&=0xF7;
while(!
P1_3);
if(shift==1)
{
shift=0;
return'Z';
}
else
return'z';
}
if(!
H3)
{
P3&=0xEF;
while(!
P1_3);
shift=!
shift;
return'';
}
if(!
H4)
{
P3&=0xDF;
while(!
P1_3);
return'';
}
if(!
H5)
{
P1&=0xFD;
while(!
P1_3);
del=1;
return'';
}
if(!
H6)
{
P1&=0xFB;
while(!
P1_3);
enter=1;
return'';
}
}
}
voidJudgeClear(void)
{
if(p==0)
{
for(p=0;p<6;p++)
LCM_DispStrXY(p,0,C_DATA);
p=0;
}
}
voidGongNengJian(void)
{
if(shift==1)
i--;
if(del==1)
{
i=i-2;
S_DATA[i]='';
del=0;
}
}
voidDisplayEdit_Data(void)
{
GongNengJian();
LCM_DispStrXY(7,0,S_DATA);
}
voidSendData(void)
{
TB8=P;
SBUF=S_DATA[j];
loop:
if(TI==1)
{
j++;
TI=0;
TB8=P;
SBUF=S_DATA[j];
}
if(j<16)
gotoloop;
}
voidDisplaySend_Data(void)
{
enter=0;
if(p==6)
p=0;
JudgeClear();
LCM_DispStrXY(p,0,BUFA);
LCM_DispStrXY(p,2,S_DATA);
p++;
LCM_DispStrXY(7,0,C_DATA);
SendData();
for(j=0;j<17;j++)
S_DATA[j]='';
j=0;
i=0;
}
voidQQ(void)
{
P3&=0xC3;
P1&=0xF9;
GetLie();
if(!
(L1&&L2&&L3&&L4&&L5))
{
S_DATA[i]=JianPan();
i++;
if(enter==0)
DisplayEdit_Data();
else
DisplaySend_Data();
}
}
voidserialInt(void)interrupt4using2
{
loop2:
if(RI==1)
{
RI=0;
R_DATA[q]=SBUF;
q++;
if(q<17)
gotoloop2;
if(p==6)
p=0;
JudgeClear();
LCM_DispStrXY(p,0,BUFB);
LCM_DispStrXY(p,2,R_DATA);
p++;
for(q=0;q<17;q++)
R_DATA[q]='';
q=0;
}
}
voidmain(void)
{
LCM_Init(0);
ES=1;
EA=1;
SCON=0x90;
PCON=0x00;
while
(1)
{
QQ();
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 双机 聊天
![提示](https://static.bdocx.com/images/bang_tan.gif)