363 基于单片机485多机通讯测试设计【毕设课设】

完整版 电路图和程序代码 下载地址

https://pan.baidu.com/s/1v8B4nV3gwMcnr_u_KTu5SQ?pwd=8888

部分代码展示

#include <reg51.h>
#include <stdio.h>
#include "lcd1602.h"


sbit RS485E=P3^2;   //定义485的使能脚

void uart_init()
{
        SCON = 0x50;      //REN=1允许串行接受状态,串口工作模式1    	       	   
	    TMOD|= 0x20;      //定时器工作方式2                    
		PCON|= 0x80;                                                          
		
		TH1  = 0xFD;     //baud*2  /* reload value 19200、数据位8、停止位1。效验位无          
		
		TR1  = 1;                                                             
		ES   = 1;        //开串口中断                  
		EA   = 1;        // 开总中断 
}

void delay()
{
	int i,j;
	for(i=0;i<200;i++)
		for(j=0;j<200;j++);
}

void uart_send(unsigned char dat)
{
	RS485E=1; 	  // RS5485E=0为接收状态  RS5485E=1为发送状态
	SBUF=dat;	   //发送数据
	while(!TI);		  //等待发送数据完成
	TI=0;			  //清除发送完成标志位
	RS485E=0; 	  // RS5485E=0为接收状态  RS5485E=1为发送状态
}

void lcd1602_show_init()
{
	lcd_write_com(0x80);
	lcd_write_data('U');
	lcd_write_data('1');
	lcd_write_data(':');
	lcd_write_data(' ');
	lcd_write_data(' ');
	lcd_write_data(' ');
	
	lcd_write_com(0xC0);
	lcd_write_data('U');
	lcd_write_data('2');
	lcd_write_data(':');
	lcd_write_data(' ');
	lcd_write_data(' ');
	lcd_write_data(' ');
}

void lcd1602_show_dat1(unsigned char num)
{
	char dat[3]={0};
	dat[0]=num%10+'0';
	dat[1]=num/10%10+'0';
	dat[2]=num/100%10+'0';
	lcd_write_com(0x84);
	lcd_write_data(dat[2]);
	lcd_write_data(dat[1]);
	lcd_write_data(dat[0]);
}

void lcd1602_show_dat2(unsigned char num)
{
	char dat[3]={0};
	dat[0]=num%10+'0';
	dat[1]=num/10%10+'0';
	dat[2]=num/100%10+'0';
	lcd_write_com(0xC4);
	lcd_write_data(dat[2]);
	lcd_write_data(dat[1]);
	lcd_write_data(dat[0]);
}

int rev_flag=0;
char rev_dat=0;
void main(void)
 {  
	 RS485E=0;		    // RS5485E=0为接收状态  RS5485E=1为发送状态
	 delay();
	 lcd_init();
	 lcd1602_show_init();

	uart_init();
	
	while (1)
	{
		uart_send(0xa1);
		while(!rev_flag)
			;
		rev_flag=0;
		lcd1602_show_dat1(rev_dat);
		delay();
		P1=0x00;
		
		uart_send(0xa2);
		while(!rev_flag)
			;
		rev_flag=0;
		lcd1602_show_dat2(rev_dat);
		delay();
		P1=0xff;	
	}
 }
 
 /****************************************************
               串口中断程序
******************************************************/
void ser_int (void) interrupt 4 using 1
{
	if(RI == 1)        //RI接受中断标志
	{
		RI = 0;		    //清除RI接受中断标志
		rev_dat = SBUF;  //SUBF接受/发送缓冲器
		rev_flag=1;
	}
}
 
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值