標(biāo)題:
51單片機(jī)測風(fēng)速代碼 485型風(fēng)速傳感器
[打印本頁]
作者:
搖籃
時(shí)間:
2018-11-23 10:49
標(biāo)題:
51單片機(jī)測風(fēng)速代碼 485型風(fēng)速傳感器
本代碼自己編寫,51單片機(jī)測風(fēng)速,LCD1602顯示,需風(fēng)速傳感器
單片機(jī)源程序如下:
#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) //延時(shí)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 字節(jié)
unsigned char crcl = 0xFF; //低 CRC 字節(jié)
unsigned char code TabH[] ={ //CRC 高位字節(jié)值表
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 低位字節(jié)值表
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--) //計(jì)算指定長度的 CRC
{
index = crch ^ *ptr++;
crch = crcl ^ TabH[index];
crcl = TabL[index];
}
return((crch<<8)|crcl);
}
void UsartInit()
{
SCON=0X50; //設(shè)置為工作方式1
TMOD=0X20; //設(shè)置計(jì)數(shù)器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的
TL1=0XF3;
ES=1; //打開接收中斷
EA=1; //打開總中斷
TR1=1; //打開計(jì)數(shù)器
}
void Timer0Init()
{
TMOD|=0X01;//選擇為定時(shí)器0模式,工作方式1,僅用TR0打開啟動(dòng)。
TH0=0XFC; //給定時(shí)器賦初值,定時(shí)1ms
TL0=0X18;
ET0=1;//打開定時(shí)器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時(shí)器
}
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; //給定時(shí)器賦初值,定時(shí)30ms
TL0=0X18;
UartRxMonitor(1); //
}
復(fù)制代碼
所有資料51hei提供下載:
485型風(fēng)速傳感器.zip
(53.09 KB, 下載次數(shù): 152)
2018-11-23 10:48 上傳
點(diǎn)擊文件名下載附件
51測風(fēng)速 (485)
下載積分: 黑幣 -5
作者:
admin
時(shí)間:
2018-11-23 14:42
補(bǔ)全原理圖或者詳細(xì)說明一下電路連接即可獲得100+黑幣
作者:
djj6216
時(shí)間:
2019-8-6 08:50
這個(gè)引腳定義了么
作者:
山外青衫
時(shí)間:
2020-3-8 13:00
很好,有沒有原理圖?
作者:
明日香
時(shí)間:
2020-8-11 09:41
大佬,求個(gè)原理圖,非常感謝
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1