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

📄 receive2.c

📁 一台单片机主机和两台单片机丛机相互通信
💻 C
字号:
#include<reg51.h>
#include<stdio.h>
#include<absacc.h>
#define uchar unsigned char
#define uint  unsigned int
sbit  COL_RCK=P1^0;	//列时钟控制端
sbit  COL_DS=P1^1;	//列数据发送端
sbit  COL_SCK=P1^2;	//74HC595列数据控制端
sbit  ROW_RCK=P1^7;	//行时钟控制端
sbit  ROW_DS=P1^6; //行数据发送端
sbit  ROW_SCK=P1^5;	//74HC595行数据控制端
uchar number[56];
//从机的波特率设置为4800bit/s,并将串行口设为允许接房事,收,SM2设为1
void init_scon()
{
 TMOD=0x20;
 TH1=0xf3;
 TL1=0xf3;
 SCON=0xf0;
 PCON=0x80;
 TR1=1;
}
//从机串行接收
uchar receive()
{
 uchar temp;
 while(RI==0);
 RI=0;
 temp=SBUF;
   return temp;
}
//从机串行发送
void send(uchar x)
{
 SBUF=x;
 while(TI==0);
 TI=0;
} 
void delay()
{
 uint i,j;
 for(i=0;i<20;i++)
  for(j=0;j<15;j++);
} 
void col_send_data(uchar *p)
{
 uint i;
 uchar temp;
 temp=*p;
 COL_SCK=0;
 for(i=0;i<8;i++)
 {
  if(temp&0x80)
     COL_DS=1;
  else
     COL_DS=0;
  COL_RCK=0;
  COL_RCK=1;
  temp=temp<<1;
 }
 COL_SCK=1;
} 
void row_send_data(uchar value)
{
 uint i;
 ROW_SCK=0;
 for(i=0;i<8;i++)
 {
  if(value&0x80)
     ROW_DS=1;
  else
     ROW_DS=0;
  ROW_RCK=0;
  ROW_RCK=1;
  value=value<<1;
 }
 ROW_SCK=1;
} 
int main(void)
{
 
 uchar receive_adr;//从机从主机接收的地址
 uchar receive_data; //从机从主机接收的数据
 uchar *p1,*p2;
 uint i,j,k;
 uchar local_adr;//从机本地地址
 uchar temp;
 init_scon();
 local_adr=0x02; //设问从机的本地地址为0X02
 i=0;
 while(i<56)	   //不停的接收,直到接收到正确的地址
 {
  if(RB8)		//如果SM2=1,且接收到的第9位RB8=1,产生中断请求,将接收到的8位数据送SBUF,
  {							 //如果RB8为0,则RI不置1,不接收主机发来的数据
    receive_adr=SBUF;
	RI=0;
  }
  if(receive_adr==local_adr)
  {					   //如果从主机接收到的地址和从机的地址相同
   SM2=0;				//则SM2=0,不论RB8是0还是1,都将接收从主机发来的数据
   send(local_adr);
   for(i=0;i<56;i++)		 //将接收到的数据存储在反冲区数组DATA1中
   {
    receive_data=receive();
    number[i]=receive_data;
   }
  }
 }
 SM2=1;
 while(1)
 {
  p1=number;	//数组起始指针赋值给P1
  for(i=0;i<48;i++)
  {
//控制点阵显示移动数度   
   for(j=0;j<50;j++)
   {
    p2=p1; //恢复扫描该帧的起始地址
	temp=0x7f;//行扫描控制初值
	//扫描一帧
	for(k=0;k<8;k++)
	{
	 col_send_data(p2);
     delay();
	 row_send_data(temp);
     p2++;
	 temp=temp>>1|0x80;
	}
   }
  p1++;
  }
 }
}

⌨️ 快捷键说明

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