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

📄 cj2.c

📁 485通信仿真源码.rar
💻 C
字号:
#include<reg51.h>
#include<18B20_1.h>		//	包含18b20函数
#define uchar unsigned char

sbit RE=P3^4;
uchar code display_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x77,0x7c};
uchar ti=0;temperature[4]={12,0,0,0};
bit t=0; 	//数据发送控制位

void display();			//	显示函数
void delay1(uchar a);	//	延时函数
void judge_button();	//	判断按键
void more_send();	   //数据发送函数

void main()
{
  	int temp;

	TMOD=0x21;		//定时计数器1设置为模式2 ,定时计数器0为模式1
	TL1=0XFD;
	TH1=0XFD;
	TH0=(65536-50000*110592/120000)/256;	//设置50ms溢出一次
	TL0=(65536-50000*110592/120000)%256;
	PCON=0X00;
	SCON=0xf0;		//工作在方式3,允许通信,SM2=1只有RB8为1时才接受数据,否则不要
	TR0=1;
	TR1=1;
	EA=1;
	ET0=1;
	RE=1;			//设置457为发送状态


 	while(1)
	{	
		display();
		judge_button();

		if(ti==20)
		{
			ti=0;
			temp=b20_temperate();  			//	获得整数部分温度
			temperature[1]=temp%1000/100;		//	百位温度
			temperature[2]=temp%100/10;			//	十位温度
			temperature[3]=temp%10;				//	个位温度

			if(t==1)						//控制数据是否不断发送
			{
				more_send();
			}
		}			
	}
	
}


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 one_send()			//	发送一次数据
{
	uchar i;

	SBUF=0XFD;		//将本机的地址发送给主机
	while(TI!=1);	
	TI=0;
	delay(10);	
	
	for(i=0;i<4;i++)	  //发送要显示的4个数据
	{
		SBUF=temperature[i];
		while(TI!=1);
		TI=0;
		delay(10);
	 }	


}


void more_send()			//	不断发送数据
{
	uchar i;

	SBUF=0XFE;		//将本机的地址发送给主机
	while(TI!=1);	
	TI=0;
	delay(10);	

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


}


void judge_button()						   
{
	if(P1!=0xff)	  						//判断是否有按钮按下
	{
		delay(10);									 

		switch(P1)
		{											
			case 0xfe:   t=0;	one_send();   break; 	//	发送一次数据	
			case 0xfd:   t=1;   break;			//	连续发送数据	
		}

		P1=0XFF;	
	}		
}


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

	ti++;
}

⌨️ 快捷键说明

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