说明:
1、所用仿真软件:Proteus 8 Professional
2、实现功能:上位机进行了按键操作后,上位机数码管显示按键数值,下位机通过串口获取按键数值并显示
3、上位机3.1端口(TXD)可直接与下位机3.0(RXD)端口相连,两个单片机需要共地
4、仿真文件下载
上位机(图中左侧MCU):
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x7f};
void Delayms(uint);
void KeyScan();
void SendData(uint num);
void Init();
uchar num=4;
void main(){
Init();
while(1){
keyScan();
P1=table[num];
}
}
void Init(){ //初始化定时器与串口
TMOD=0x20; //设置定时器1 工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1; //启动定时器1 (8位自动重装初始值)
SM0=0;
SM1=1; //使用串口的 方式1 工作
REN=1; // 允许串口接收数据
EA=1; //开全局中断
ES=1; //开串口中断
}
void SendData(uchar num){
SBUF=num;
while(!TI); //串口发送停止位的开始时,内部硬件使TI置1,CPU发出中断申请
TI=0;
}
void Delayms(uint xms){
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void KeyScan(){
if(key1==0)
{
Delayms(10);
if(key1==0)
num=0;
SendData(num);
}
if(key2==0)
{
Delayms(10);
if(key2==0)
num=1;
SendData(num);
}
if(key3==0)
{
Delayms(10);
if(key3==0)
num=2;
SendData(num);
}
if(key4==0)
{
Delayms(10);
if(key4==0)
num=3;
SendData(num);
}
}
下位机(图中右侧MCU):
#include<reg52.h>
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x7f};
void Init();
uchar num=4;
void main(){
Init();
while(1){
P1=table[num];
}
}
void Init(){ //初始化定时器与串口
TMOD=0x20; //设置定时器1 工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1; //启动定时器1 (8位自动重装初始值)
SM0=0;
SM1=1; //使用串口的 方式1 工作
REN=1; // 允许串口接收数据
EA=1; //开全局中断
ES=1; //开串口中断
}
void receive() interrupt 4
{
RI=0;
num=SBUF;
}
仿真结果: