标题:
51单片机测风速代码 485型风速传感器
[打印本页]
作者:
摇篮
时间:
2018-11-23 10:49
标题:
51单片机测风速代码 485型风速传感器
本代码自己编写,51单片机测风速,LCD1602显示,需风速传感器
单片机源程序如下:
#include "reg52.h"
#include "LCD.H"
typedef unsigned char u8;
typedef unsigned int u16;
bit flagFrame = 0;
bit flagTxd = 0;
u8 cntRxd = 0;
u8 cntTxd;
u8 pdata bufRxd[7];
u8 *ptrTxd;
u8 crch,crcl;
u8 datas[10];
unsigned char pdata buf[40];
void delayms(u8 ms) //延时ms
{
u8 i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
unsigned char GetCRC16(unsigned char *ptr, unsigned char len)
{
unsigned int index;
unsigned char crch = 0xFF; //高 CRC 字节
unsigned char crcl = 0xFF; //低 CRC 字节
unsigned char code TabH[] ={ //CRC 高位字节值表
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
} ;
unsigned char code TabL[] = { //CRC 低位字节值表
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
0x43, 0x83, 0x41, 0x81, 0x80, 0x40
} ;
while (len--) //计算指定长度的 CRC
{
index = crch ^ *ptr++;
crch = crcl ^ TabH[index];
crcl = TabL[index];
}
return((crch<<8)|crcl);
}
void UsartInit()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void Timer0Init()
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
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)
{
idletmr += ms;
if(idletmr>=30)
{
flagFrame=1;
}
}
}
}
else
{
cntbkp=0;
}
}
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;
}
void datapros()
{
int c;
c=buf[3]*256+buf[4];
datas[0]=c/1000;
datas[1]=c%1000/100;
datas[2]=c%1000%100/10;
datas[3]=c%1000%100%10;
}
void UartDriver()
{
unsigned char len;
u16 crc;
if(flagFrame)
{
flagFrame = 0;
len = UartRead(buf,sizeof(buf));
if(buf[0]!=0x04)
{
return;
}
crc=GetCRC16(buf,len-2);
crch = crc>>8;
crcl = crc&0xFF;
if((buf[len-2]=crch)&&(buf[len-1]=crcl))
{
return;
}
else
{
datapros();
}
}
}
void LcdDisplay()
{
LcdWriteCom(0x80);
LcdWriteData('0'+datas[0]);
LcdWriteCom(0x81);
LcdWriteData('0'+datas[1]);
LcdWriteCom(0x82);
LcdWriteData('0'+datas[2]);
LcdWriteCom(0x83);
LcdWriteData('.');
LcdWriteCom(0x84);
LcdWriteData('0'+datas[3]);
LcdWriteCom(0x85);
LcdWriteData('M');
LcdWriteCom(0x86);
LcdWriteData('/');
LcdWriteCom(0x87);
LcdWriteData('S');
}
void main()
{
u8 i;
u8 Order[8]={0x04,0x03,0x00,0x16,0x00,0x01,0x65,0x9B};
UsartInit();
Timer0Init();
LcdInit();
while(1)
{
delayms(1000);
for(i=0;i<8;i++)
{
SBUF=Order[i];
while(!TI);
TI=0;
}
delayms(1000);
UartDriver();
LcdDisplay();
}
}
void Usart() interrupt 4
{
if(RI)
{
RI=0;
if(cntRxd<sizeof(bufRxd))
{
bufRxd[cntRxd++]=SBUF;
}
}
}
void Timer0() interrupt 1
{
TH0=0XFC; //给定时器赋初值,定时30ms
TL0=0X18;
UartRxMonitor(1); //
}
复制代码
所有资料51hei提供下载:
485型风速传感器.zip
(53.09 KB, 下载次数: 152)
2018-11-23 10:48 上传
点击文件名下载附件
51测风速 (485)
下载积分: 黑币 -5
作者:
admin
时间:
2018-11-23 14:42
补全原理图或者详细说明一下电路连接即可获得100+黑币
作者:
djj6216
时间:
2019-8-6 08:50
这个引脚定义了么
作者:
山外青衫
时间:
2020-3-8 13:00
很好,有没有原理图?
作者:
明日香
时间:
2020-8-11 09:41
大佬,求个原理图,非常感谢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1