⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 串口通信.c

📁 用C语言编程实现的基于at89s51的串口通信
💻 C
字号:
#include<reg52.h>
#include<stdio.h>
//定义变量//
unsigned char dispbuf[]={0,0,0,0};
unsigned char sendbuf[]={0,0,0,0};
unsigned char rec_data[]={0,0,0,0};
unsigned int  j,h;
sbit disp_data=P1^0;//四位数码管送显的数据端
sbit disp_clk=P1^1; //四位数码管送显的时钟端
char dispdata[0x04];
unsigned char cgf2[11]={0x88,0xEB,0x4C,0x49,0x2B,0x19,0x18,0xCB,0x08,0x09,0xFF};//数码管段码;
//***************延时******************//
void delay(unsigned int i)
{
   while(i--);
}
void display4(char dispdata[0x04])  //四位数码管显示程序
{char i,j,temp;
 for(i=0;i<4;i++)
   {temp=cgf2[dispdata[i]];          //取出段码	   
      for(j=0;j<8;j++)                  //循环送出
         {if (temp&0x01)                //判断高低
 		    disp_data=1;
	  else disp_data=0;
	  disp_clk=0;   
      disp_clk=1;	                 //clk端口置高	
	  temp>>=1;                      //段码右移
      }
  }
}
void Dispbuf(unsigned int temper)      //转换程序;
 {
   dispbuf[3]=temper/1000;
   dispbuf[2]=(temper%1000)/100;
   dispbuf[1]=(temper%100)/10;
   dispbuf[0]=temper%10;
  }
void scomre(unsigned char B0,unsigned char B1)//应答会信号//
{
  unsigned char k;
  k=0;
  sendbuf[0]=B0;
  sendbuf[1]=B1;
       while(k<2)
   {
      SBUF=sendbuf[k];
	      while(TI==0);
		  TI=0;
		  k++;
    }
	delay(200);
}
main()
{
  unsigned char i,rec_data,npos=0x01,flag=0;
  TMOD=0X20;//初始化定时/计数器//
  TL1=0xfe;TH1=0xf4;//波特率2400b/s,晶振为11.0592MHz
  SCON=0x50;//串口初始化//
  TR1=1;
  RI=0;
   while(1)
   {
	 if(RI)//是否有信号//
	 {
	   rec_data=SBUF;//送缓存区//
       Dispbuf(rec_data);
	   RI=0;//清接收标志//  
	   delay(300);
       display4(dispbuf);
       flag=1;
	  }
 
	 if(flag==1)
	  {
	   scomre('O','K');
	   flag=0;
	   }
	}
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -