欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 51單片機測風速代碼 485型風速傳感器 [打印本頁]

作者: 搖籃    時間: 2018-11-23 10:49
標題: 51單片機測風速代碼 485型風速傳感器
本代碼自己編寫,51單片機測風速,LCD1602顯示,需風速傳感器

單片機源程序如下:
  1. #include "reg52.h"
  2. #include "LCD.H"   

  3. typedef  unsigned char u8;
  4. typedef  unsigned int u16;
  5. bit flagFrame = 0;
  6. bit flagTxd = 0;
  7. u8 cntRxd = 0;
  8. u8 cntTxd;
  9. u8 pdata bufRxd[7];
  10. u8 *ptrTxd;
  11. u8 crch,crcl;
  12. u8 datas[10];
  13. unsigned char pdata buf[40];

  14. void delayms(u8 ms)   //延時ms
  15. {      
  16.          u8 i;
  17.          while(ms--)
  18.          {
  19.           for(i = 0; i < 120; i++);
  20.          }
  21. }

  22. unsigned char GetCRC16(unsigned char *ptr,  unsigned char len)
  23. {      
  24.         unsigned int index;   
  25.         unsigned char crch = 0xFF;  //高 CRC 字節     
  26.         unsigned char crcl = 0xFF;  //低 CRC 字節   
  27.         unsigned char code TabH[] ={                                                                  //CRC 高位字節值表
  28.         0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,         
  29.             0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,         
  30.             0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,         
  31.             0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,         
  32.             0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,           
  33.                 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,         
  34.                 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,         
  35.                 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,         
  36.                 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,           
  37.                 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,           
  38.         0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,         
  39.             0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,         
  40.             0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,         
  41.             0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,         
  42.             0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,           
  43.                 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,           
  44.                 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,           
  45.                 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,           
  46.                 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,           
  47.                 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,           
  48.                 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,           
  49.                 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,           
  50.                 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,  
  51.                 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,         
  52.                 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,         
  53.             0x80, 0x41, 0x00, 0xC1, 0x81, 0x40      
  54.                 } ;                  
  55.                  unsigned char code TabL[] = {                                                                  //CRC 低位字節值表
  56.                  0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,           
  57.                  0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,           
  58.                  0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,           
  59.                  0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,           
  60.                  0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,           
  61.                  0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,           
  62.                  0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,           
  63.                  0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,           
  64.                  0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,           
  65.                  0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,           
  66.                  0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,           
  67.                  0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,           
  68.                  0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,         
  69.                  0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,           
  70.                  0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,           
  71.                  0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,           
  72.                  0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,           
  73.                  0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,           
  74.                  0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,           
  75.                  0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,           
  76.                  0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,           
  77.                  0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,           
  78.                  0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,           
  79.                  0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,           
  80.                  0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,           
  81.                  0x43, 0x83, 0x41, 0x81, 0x80, 0x40      
  82.                  } ;   
  83.                   while (len--)                                               //計算指定長度的 CRC   
  84.                    {         
  85.                      index = crch ^ *ptr++;         
  86.                      crch = crcl ^ TabH[index];         
  87.                      crcl = TabL[index];     
  88.                    }         
  89.      return((crch<<8)|crcl);   
  90. }

  91. void UsartInit()
  92. {
  93.         SCON=0X50;                        //設置為工作方式1
  94.         TMOD=0X20;                        //設置計數器工作方式2                                                                                                                                                                                                                          
  95.         PCON=0X80;                        //波特率加倍
  96.         TH1=0XF3;                                //計數器初始值設置,注意波特率是4800的
  97.         TL1=0XF3;
  98.         ES=1;                                                //打開接收中斷
  99.         EA=1;                                                //打開總中斷
  100.         TR1=1;                                        //打開計數器
  101. }

  102. void Timer0Init()
  103. {
  104.         TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。

  105.         TH0=0XFC;        //給定時器賦初值,定時1ms
  106.         TL0=0X18;       
  107.         ET0=1;//打開定時器0中斷允許
  108.         EA=1;//打開總中斷
  109.         TR0=1;//打開定時器       
  110. }


  111. void UartRxMonitor(unsigned char ms)
  112. {
  113.    static unsigned char cntbkp = 0;
  114.    static unsigned char idletmr = 0;

  115.    if(cntRxd>0)
  116.    {
  117.             if(cntbkp != cntRxd)
  118.          {
  119.                   cntbkp = cntRxd ;
  120.                 idletmr = 0;
  121.          }
  122.           else
  123.           {
  124.              if(idletmr<30)
  125.                  {
  126.                   idletmr += ms;
  127.                    if(idletmr>=30)
  128.                    {
  129.                       flagFrame=1;
  130.                    }
  131.                  }
  132.           }
  133.    }
  134.   else
  135.   {
  136.      cntbkp=0;
  137.   }
  138. }

  139. unsigned char UartRead(unsigned char *buf,unsigned char len)
  140. {
  141.    unsigned char i;

  142.    if(len>cntRxd)
  143.    {
  144.              len = cntRxd;
  145.    }
  146.    for(i=0;i<len;i++)
  147.    {
  148.      *buf++=bufRxd[i];
  149.    }
  150.    cntRxd=0;

  151.    return len;
  152. }

  153. void datapros()
  154. {
  155.    int c;
  156.    c=buf[3]*256+buf[4];
  157.    datas[0]=c/1000;
  158.    datas[1]=c%1000/100;
  159.    datas[2]=c%1000%100/10;
  160.    datas[3]=c%1000%100%10;
  161. }

  162. void UartDriver()
  163. {
  164.   unsigned char len;
  165.   u16 crc;
  166.   if(flagFrame)
  167.   {
  168.     flagFrame = 0;
  169.         len = UartRead(buf,sizeof(buf));
  170.     if(buf[0]!=0x04)
  171.         {
  172.          return;
  173.         }
  174.         crc=GetCRC16(buf,len-2);
  175.         crch = crc>>8;
  176.         crcl = crc&0xFF;
  177.         if((buf[len-2]=crch)&&(buf[len-1]=crcl))
  178.           {
  179.       return;
  180.         }
  181.         else
  182.         {
  183.         datapros();
  184.         }
  185.   }                                                  
  186. }

  187. void LcdDisplay()
  188. {
  189.   LcdWriteCom(0x80);
  190.   LcdWriteData('0'+datas[0]);

  191.   LcdWriteCom(0x81);
  192.   LcdWriteData('0'+datas[1]);

  193.   LcdWriteCom(0x82);
  194.   LcdWriteData('0'+datas[2]);

  195.   LcdWriteCom(0x83);
  196.   LcdWriteData('.');

  197.   LcdWriteCom(0x84);
  198.   LcdWriteData('0'+datas[3]);

  199.   LcdWriteCom(0x85);
  200.   LcdWriteData('M');

  201.    LcdWriteCom(0x86);
  202.   LcdWriteData('/');

  203.    LcdWriteCom(0x87);
  204.   LcdWriteData('S');
  205. }

  206. void main()
  207. {
  208.     u8 i;
  209.     u8 Order[8]={0x04,0x03,0x00,0x16,0x00,0x01,0x65,0x9B};
  210.         UsartInit();
  211.         Timer0Init();
  212.     LcdInit();
  213.   while(1)
  214.   {
  215.    delayms(1000);
  216.    for(i=0;i<8;i++)
  217.    {
  218.           SBUF=Order[i];
  219.           while(!TI);
  220.         TI=0;
  221.    }
  222.     delayms(1000);
  223.         UartDriver();
  224.         LcdDisplay();
  225.    }               
  226. }

  227. void Usart() interrupt 4
  228. {
  229.    if(RI)
  230.    {
  231.             RI=0;
  232.          if(cntRxd<sizeof(bufRxd))
  233.          {
  234.            bufRxd[cntRxd++]=SBUF;
  235.          }
  236.    }
  237. }

  238. void Timer0() interrupt 1
  239. {
  240.     TH0=0XFC;        //給定時器賦初值,定時30ms
  241.         TL0=0X18;
  242.         UartRxMonitor(1);  //
  243. }
復制代碼

所有資料51hei提供下載:
485型風速傳感器.zip (53.09 KB, 下載次數: 152)



作者: 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.raoushi.com/bbs/) Powered by Discuz! X3.1