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

📄 main.c

📁 485多机通信+lcd液晶显示
💻 C
字号:
/*************************************************************************************************
* 文 件 名:485c.c
* 功    能:485从机通信模块
* 硬件条件: 1.CPU型号:ATMEL2051
*            2.晶振:11.0592
* 作    者:zwb
* 日    期:2009年04月27号
*************************************************************************************************/
//-----------------------函数声明,变量定义--------------------------------------------------------
#include <reg51.h>
//#include <INTRINS.H>
#include <lcd1602.h>
#include <string.h>
#define  unchar  unsigned char
#define COUNT 10           // 定义发送缓冲区大小 
unchar send_buffer[COUNT]={0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a}; //定义发送缓冲区
unchar COM_dzdata[2]={0x41,0x42};//定义从机地址和命令
unchar receive_buffer[2];//定义接受缓冲区
unchar	Dis_horse[3];
unchar point=0;            //定义接收数据个数指示变量
unchar FIFO;             //定义从机通信缓冲区1字节
bit	 flag,lab=0;
sbit	L0 = P3^5;
sbit	L1 = P3^7;
//========================================================================================
//函数名称:delay()
//输入函数:无
//输出函数:无
//函数功能:延时子函数
//=======================================================================================
void delay(void)
{
	unchar i=124;
	while(i--);
}

//--------------------------------------------------------------------------------------------------
// 函数名称: UART_init()串口初始化函数
// 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
//            串口接收中断允许,发送中断禁止
//--------------------------------------------------------------------------------------------------
void UART_init()
{
                     //初始化串行口和波特率发生器 
	SCON =0xf0;          //选择串口工作方式3,打开接收允许
	TMOD =0x20;          //定时器1工作在方式2
	PCON = 0x80;         //波特率加倍
	TH1 =0xf4;           //实现波特率4800(系统时钟11.0592MHZ)
	TL1 =0xf4;
	TR1 =1;              //启动定时器T1
	ET1 =1; 
    EA = 1;
}


//--------------------------------------------------------------------------------------------------
// 函数名称: COM_send()串口发送函数
// 函数功能: 把数据缓冲区的十位数据发送出去
//--------------------------------------------------------------------------------------------------
void COM_send(void)
{	
	if(flag==1)//从机发送数据判断位

		{
		for(point=0;point<10;point++)      //连续发送十位数据
            {
			    SBUF=send_buffer[point];
				while(TI==0);
		        TI=0;
			}	
		flag=0;//发送完数据后从机重新处于多机通信状态(即只能接收地址)
		lab=0;
		SM2=1;
		L1=1;
		}
}

//==================================================================================
//函数名称:Send_display()
//输入变量:
//输出变量:
//函数功能:发送从机自加数列值给主机
//===================================================================================
void  Send_display(void)
{
	for(point=0;point<3;point++)
	{
	 SBUF=Dis_horse[point];
	 while(TI==0);
	 TI=0;
	}
}
//===================================================================
//函数名称:Receive_COM ()
//输入变量:无
//输出变量:Receive_COM 接受主机发来的地址和命令,
//函数功能:核对是否为本机地址和命令,并置SM2=0;允许从机接受数据
//===================================================================
void Receive_COM(void)
{
	if((RI==1)&&(lab==0))
	{   
	RI=0;
	FIFO=SBUF;
	receive_buffer[0]=FIFO;
	lab=1;
//	if(strcmp(receive_buffer,COM_dzdata)==0)//核对主机发来的地址是否为从机地址
if(FIFO==0x41)
		{
			SM2=0;//是从机地址则允许从机接受数据  
			lab=1;  		
		}
	}
if(SM2==0)
{	
	L0=1;	
	if(RI==1)
	{
		FIFO=SBUF;
		receive_buffer[1]=FIFO;
		flag=1;
		LCD_set_position(0x08);    //显示接受到得主机命令
	    LCD_prints(receive_buffer); 
	
    }	
	delay();
	COM_send();//正确则调用发送程序	
}

	

}

void  delay_1s(void)
{
	unchar j;
	for(j=0;j<255;j++)
	{delay();}

}
//--------------------------------------------------------------------------------------------------
// 函数名称: 主函数
// 函数功能: 调度个子函数,完成通信过程
//--------------------------------------------------------------------------------------------------
 void main(void)
{	
	unsigned int	i=0;
	L0=0;
	L1=0;
	flag=0;
	lab=0;
    UART_init();//初始化串口
	LCD_initial();
	DispStrPosi("RFID:",0,0);
	
 do
 {  
	Receive_COM();//接受命令和地址

		Dis_horse[0]= i/100%10 + '0';
		Dis_horse[1]= i/10%10 + '0';
		Dis_horse[2] = i%10 + '0';
		delay_1s();
		i++;
		if(i==999)
		{i=0;}
		Send_display();
		LCD_set_yposition(0x06);
		LCD_prints(Dis_horse);
		
 }while(1);
}






 

⌨️ 快捷键说明

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