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

📄 zj.c

📁 485通信仿真源码.rar
💻 C
字号:
#include<reg51.h>
#define uchar unsigned char

sbit RE=P3^4;	//	控制487接收,发送控制端
uchar code display_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x77,0x7c};
uchar j,temperature[4];	  //存储温度数组
bit t;		//	控制数据连续传送位

void display();
void delay(uchar a);


void main()
{
	uchar i;

	TMOD=0x21;		//定时计数器1设置为模式2
	TH0=(65536-50000*110592/120000)/256;	//设置50ms溢出一次
	TL0=(65536-50000*110592/120000)%256;
	TL1=0XFD;	    //波特率设置
	TH1=0XFD;
	PCON=0X00;
	SCON=0xd0;		//工作在方式3,允许通信;
	TR1=1;			//定时计数器1开始计数
	TR0=1;
	ET0=1;
	RE=0;			//487准备接受数据数据
	EA=1;			//开总中断
	ES=1;			//开串口通信中断

	while(1)
	{
	 	if(t==1&j>=20)		//判断是否满足数据连续传送的条件
		{  
			j=0;

			while(RI!=1);	
			display();

			if(SBUF==0XFE)
			{
				RI=0;
				delay(10);
		 		for(i=0;i<4;i++)	  //发送要显示的4个数据
				{
						
					while(RI!=1);
					temperature[i]=SBUF;
					RI=0;
					delay(10);
				 }

			}

			ES=1;
			t=0;
		}

		display();
	}

}


void delay(uchar a)
{
	uchar i;
	for(;a>0;a--)
		for(i=100;i>0;i--);

}


void display() 				//显示函数
{

	P2=0XFF;			   //  显示从机的代号
	P0=display_table[temperature[0]];
	P2=0xfe;
	delay(1);

	P2=0XFF;			   //  显示温度
	P0=display_table[temperature[1]];
	P2=0xfd;
	delay(1);

	P2=0XFF;
	P0=display_table[temperature[2]];
	P2=0xfb;
	delay(1);

	P2=0XFF;
	P0=display_table[temperature[3]]+0x80;
	P2=0xf7;
	delay(1);

}


void time() interrupt 1	 		//定时器
{
	TH0=(65536-50000*110592/120000)/256;
	TL0=(65536-50000*110592/120000)%256;

	j++;
}


void r_scon() interrupt 4			//串口中断函数
{
	uchar i;

	if(RI==1)
	{
		RI=0;
		delay(10);
		if(SBUF==0XFD) 				//判断是否是接受一次数据,还是不断传输数据
		{
			ES=0;
			t=0;					//停止数据连续传送
		 	for(i=0;i<4;i++)	  //发送要显示的4个数据
			{		
				while(RI!=1);
				temperature[i]=SBUF;
				RI=0;
				delay(10);
			 }

			 ES=1;
		}
		else if(SBUF==0XFE)		 	//连续发送数据
		{
		   t=1;
		   ES=0;
		}
	}
}

⌨️ 快捷键说明

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