最近刚好在学习这个 非常感谢给了一条思路 |
先收藏,有币再来下 |
用过这个模块,485触摸屏通讯。做实验这个模块好像只能显示温度,没有开关量控制协议 |
好东西,看看是不是完整的资料!!!!!!!!!!!! |
求源码 |
这个程序好像不完整啊,读取的温度,湿度没有经过处理,没有显示啊 |
wbaisen 发表于 2021-11-7 14:14 是的。我用MAX485模块,不知道你的程序里,方向引脚是接单片机的哪个管脚哦?急! |
wbaisen 发表于 2021-11-7 14:14 MAX485模块 |
wsh123456789 发表于 2021-8-14 23:20 好久没看论坛了,你是用485模块? |
MAX485的方向引脚接哪里?程序未定义啊 |
本帖最后由 wsh123456789 于 2021-8-16 18:28 编辑 看贴的人不能说下吗?MAX485的方向引脚接哪里? |
大佬看下我的程序,用51单片机读温湿度数据 /*****************************main.c 文件程序源代码*****************************/ #include <reg52.h> #include <intrins.h> /* 数码管显示配置,可以不看 */ typedef unsigned char u8; u8 code smgduan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; unsigned int wendu_H=0x00; //温度值高4位字节 unsigned int wendu_L=0x00; //温度值低4位字节 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; /* 485通信 */ unsigned char len; unsigned char pdata buf[40]={0x01,0x03,0x02,0x00,0x00,0x03,0x04,0x73}; sbit RS485_DIR=P1^7; bit flagFrame = 0; //帧接收完成标志,即接收到一帧新数据 bit flagTxd = 0; //单字节发送完成标志,用来替代 TXD 中断标志位 unsigned char cntRxd = 0; //接收字节计数器 unsigned char pdata bufRxd[64]; //接收字节缓冲区 unsigned char TORH=0; unsigned char TORL=0; /* 延迟函数,数码管显示调用 */ void delay(unsigned int t,unsigned int u) { unsigned int i,j; for(i=0;i<t;i++) for(j=0;j<u;j++); } /* 串口配置函数,baud-通信波特率 */ void ConfigUART(unsigned int baud) { SCON = 0x50; //配置串口为模式 1 TMOD &= 0x0F; //清零 T1 的控制位 TMOD |= 0x20; //配置 T1 为模式 2 TH1 = 256 - (12000000/12/32)/baud; //计算T1重载值,12M晶振 TL1 = TH1; //初值等于重载值 ET1 = 0; //禁止 T1 中断 ES = 1; //使能串口中断 TR1 = 1; //启动 T1 } void DelayX10us(unsigned char t) { do{ _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }while(--t); } /* 串口数据写入,即串口发送函数,buf-待发送数据的指针,len-指定的发送长度 */ void UartWrite(unsigned char *buf, unsigned char len) { RS485_DIR=1; while (len--) //循环发送所有字节 { flagTxd = 0; //清零发送标志 SBUF = *buf++; //发送一个字节数据 while (!flagTxd); //等待该字节发送完成 } DelayX10us(5); RS485_DIR=0; } /* 串口数据读取函数,buf-接收指针,len-指定的读取长度,返回值-实际读到的长度 */ unsigned char UartRead(unsigned char *buf, unsigned char len) { unsigned char i; if (len > cntRxd) //指定读取长度大于实际接收到的数据长度时, { //读取长度设置为实际接收到的数据长度 len = cntRxd; } for (i=0; i<len; i++) //拷贝接收到的数据到接收指针上 { *buf++ = bufRxd[i]; } cntRxd = 0; //接收计数器清零 return len; //返回实际读取长度 } /* 串口接收监控,由空闲时间判定帧结束,需在定时中断中调用,ms-定时间隔 */ void UartRxMonitor(unsigned char ms) { static unsigned char cntbkp = 0; static unsigned char idletmr = 0; if (cntRxd > 0) //接收计数器大于零时,监控总线空闲时间 { if (cntbkp != cntRxd) //接收计数器改变,即刚接收到数据时,清零空闲计时 { cntbkp = cntRxd; idletmr = 0; } else //接收计数器未改变,即总线空闲时,累积空闲时间 { if (idletmr < 30) //空闲计时小于 30ms 时,持续累加 { idletmr += ms; if (idletmr >= 30) //空闲时间达到 30ms 时,即判定为一帧接收完毕 { flagFrame = 1; //设置帧接收完成标志 } } } } else { cntbkp = 0; } } /* 串口中断服务函数 */ void InterruptUART() interrupt 4 { if (RI) //接收到新字节 { RI = 0; //清零接收中断标志位 if (cntRxd < sizeof(bufRxd)) //接收缓冲区尚未用完时, { //保存接收字节,并递增计数器 bufRxd[cntRxd++] = SBUF; } } if (TI) //字节发送完毕 { TI = 0; //清零发送中断标志位 flagTxd = 1; //设置字节发送完成标志 } } void ConfigTimer0(unsigned int ms) { unsigned long tmp; tmp=12000000/12; //12M晶振 tmp=(tmp*ms)/1000; tmp=65536-tmp; tmp=tmp+33; TORH=(unsigned char)(tmp>>8); TORL=(unsigned char)tmp; TMOD&=0xF0; TMOD|=0x01; TH0=TORH; TL0=TORL; ET0=1; TR0=1; } void main() { EA=1; ConfigTimer0(1); ConfigUART(2400); //设置波特率2400 delay(200,500); UartWrite(buf,len); //向传感器发送命令,01 03 02 00 00 03 04 73 if (flagFrame) //有命令到达时,读取处理该命令 { flagFrame = 0; len = UartRead(buf, sizeof(buf)); //将接收到的命令读取到缓冲区中 } wendu_H=bufRxd[3]; //数据帧第4字节是温度值高位, wendu_L=bufRxd[4]; //数据帧第5字节是温度值低位。 while (1) //以下为数码管显示温度值,16进制表示 { LSA=0; LSB=1; LSC=1; P0=smgduan[wendu_H%16]; delay(10,5); LSA=1; LSB=1; LSC=1; P0=smgduan[wendu_H/16]; delay(10,5); LSA=0; LSB=0; LSC=1; P0=smgduan[wendu_L%16]; delay(10,5); LSA=1; LSB=0; LSC=1; P0=smgduan[wendu_L/16]; delay(10,5); } } void InterruptTimer0() interrupt 1 { TH0 = TORH; //重新加载重载值 TL0 = TORL; UartRxMonitor(1); //串口接收监控 } |
这个变送器买了也有一段时间,现在学习使用。 |
正好需要 学习一下 谢谢楼主 |
楼主,改造成STC89C52啊,IIC接口的OLED屏 |
哪个附件是源码。第一个吗? |
好东西,正在学习485,一些东西不明白。 |
zxianyu 发表于 2020-11-29 17:50 配置下51的串口加几个变量就可以 |
参考下,看是否能用51代替 。 |
多谢分享,正在使用温度变送器 |
好想法,求看源码 |
老规矩,先回后下!!!!!!! |
好东西,值得一看 |
gpdt3209 发表于 2020-11-12 15:32 资料齐全 |
资料完整就好了。 |
好东西,看看是不是完整的资料!!!!!!!!!!!! |