标题: 基于51单片机双机通信Proteus仿真+AB机程序 [打印本页]

作者: 1234567892    时间: 2019-5-19 22:46
标题: 基于51单片机双机通信Proteus仿真+AB机程序
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


                                //A机程序
#include<reg51.h>
       //包含单片机寄存器的头文件
typedef unsigned char uchar;
typedef unsigned int  uint;
sbit K5=P2^2;
sbit K6=P2^1;
int ddata[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xF8,0x80,0x98};
/*0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xF8,0x80,0x98*/
void delay(void)   
{
           unsigned char m,n;
        for(m=0;m<200;m++)
        for(n=0;n<250;n++)           
           ;
}
/************************
函数功能:发送一个字节数据
*************************/
void Send(unsigned char dat)

{

         SBUF=dat;
   while(TI==0)
      ;                        //等待
    TI=0;
}





void keyscan()
{
        if(K5==0)     //K3按下H.T分数加一
        {         delay();
                  while(K5==0);
                Send(0x03);                 //区别  发送 03
                  if(K5==0)    //松手检测
                  {                 delay();        
                           while(K5==0);
                        

                  }
        }
        else if(K6==0)    //S4按下H.T分数加二
        {        delay();
                  while(K6==0);
                Send(0x04);                           //区别  发送 04

                  if(K6==0)
                  {                   delay();
                           while(K6==0);
                        

                  }
        }

}


/***********************
函数功能:接收一个字节数据
************************/
unsigned char Receive(void)
{
          unsigned char dat;
  if(RI==1)  
   {
           RI=0;      //为了接收下一帧数据,需将RI清0
    dat=SBUF;  //将接收缓冲器中的数据存于dat
        return dat;
   }          //等待,直至接收完毕(RI=1)

}        
/**********************
函数功能:延时约150ms
***********************/

/*****************
函数功能:主函数
******************/
void main(void)

{        unsigned char dat;
           unsigned char i;
           TMOD=0x20;  //TMOD=0010 0000B,定时器T1工作于方式2
           SCON=0x50;  //SCON=0101 0000B,串口工作方式1,允许接收
           PCON=0x00;  
           TH1=0xfd;   //定时器TH1赋初值,波特率9600
           TL1=0xfd;   //定时器TL1赋初值
           TR1=1;      //启动定时器T1  
        P2=0XFF;   //置P2.0口为高电平
                P0=0xff;        
          while(1)
   {
    keyscan();
    dat=Receive();
        P0=ddata[dat]; //将接收到的数据送P0口显示  

   }
}

全部资料51hei下载地址:
双机通信.rar (228.49 KB, 下载次数: 108)

作者: 张然Adolf    时间: 2020-5-19 00:26
你能说明一下,你的程序f发的是什么吗?
作者: csrawd    时间: 2020-6-8 00:29
压缩包里两个proteus的电路图都给清空了,小伙子有点遮遮掩掩的感觉啊




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1