📄 单片机双机通信.c
字号:
#include<at89x51.h>
/***********整体变量定义************/
int KEY1;
int KEY2;
int KEYCODE;
/*
int move1;
int move2;
unsigned char displaycode[]={0,0,0,0,0,0};
/*******数码管显示相关定义**********/
/*
unsigned char p2key[]={0xfe,0xfd,
0xfb,0xf7,
0xef,0xdf};
unsigned char p0key[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
/*******键盘识别相关定义***********/
unsigned char KEYCODETABLE[]={0xee,0xed,0xeb,0xe7,
0xde,0xdd,0xdb,0xd7,
0xbe,0xbd,0xbb,0xb7,
0x7e,0x7d,0x7b,0x77};
/*********延迟程序****************/
delay(int x)
{
int i;
while(x--)
{
for(i=20;i>0;i--)
{};
}
}
/*********键盘识别程序**********/
int readkey(void)
{
int j;
P1=0x0f;
while(1)
{
while(P1!=0x0f)
{
delay(50);
if(P1!=0x0f)
{
KEY1=P1;
}
P1=0XF0;
while(P1!=0XF0)
{
delay(50);
if(P1!=0XF0)
{
KEY2=P1;
}
KEYCODE=KEY1|KEY2;
}
for(j=15;j>=0;j--)
{
if(KEYCODETABLE[j]==KEYCODE)
return j;
}
P1=0X0F;
}
}
}
/**********串口初始化***************/
void setcom(void)
{
TMOD = 0x21; //使用T1计数器
TL1 = 0xfd; //波特率为9600bps
TH1 = 0xfd;
SCON = 0x50; //串口模式1,允许接收SM1=1,REN=1
PCON = 0x00;
ES = 1; //开串口中断
EA = 1; //总中断有效
TR1 = 1; //TI计数开始
}
/********初始化定时器0用以数码显示****/
/*
void time0(void)
{
TL0= ( 65536-400 ) % 256 ;
TH0= ( 65536-400 ) / 256 ;
TR0=1;
ET0=1;
}
/*******主函数*********************/
main()
{
setcom();
// time0();
while(1)
{
SBUF= readkey()+0X30;
}
}
/********串口中断程序****************/
void com(void) interrupt 4
{
if(RI==1)
{
RI=0;
displaycode[move2++]=SBUF-0X30;
if(move2==6)move2=0;
}
if(TI==1)
{
TI=0;
}
}
/************动态数码显示程序**************/
/*void display(void) interrupt 1
{
TL0= ( 65536-400 ) % 256 ;
TH0= ( 65536-400 ) / 256 ;
P2=p2key[move1];
P0=p0key[displaycode[move1]];
move1++;
if(move1==6)
{
move1=0;
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -