久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5732|回復: 4
打印 上一主題 下一主題
收起左側

51單片機測風速代碼 485型風速傳感器

[復制鏈接]
跳轉到指定樓層
樓主
ID:404476 發表于 2018-11-23 10:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本代碼自己編寫,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)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2018-11-23 14:42 | 只看該作者
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復

使用道具 舉報

板凳
ID:585800 發表于 2019-8-6 08:50 | 只看該作者
這個引腳定義了么
回復

使用道具 舉報

地板
ID:502881 發表于 2020-3-8 13:00 | 只看該作者
很好,有沒有原理圖?
回復

使用道具 舉報

5#
ID:796670 發表于 2020-8-11 09:41 | 只看該作者
大佬,求個原理圖,非常感謝
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 福利电影在线 | 97视频成人 | 日韩欧美不卡 | 国产最新视频在线 | 成人欧美一区二区三区视频xxx | 91高清视频| 精品亚洲一区二区 | 欧美日韩中文国产一区发布 | 国产精品成人一区二区三区 | 白浆在线| 精品成人在线 | 色婷婷国产精品 | 精品在线视频播放 | 亚洲91精品| 亚洲综合无码一区二区 | 操操操av | 亚洲国产精久久久久久久 | 欧美精品网站 | 天天草av | 中文字幕一区二区三区不卡 | 日韩欧美视频免费在线观看 | 91在线视频免费观看 | 一区二区三区四区在线视频 | 国产偷久久一级精品60部 | 日韩免费一区二区 | 国产专区在线 | 蜜桃在线播放 | 日本a视频 | 女同久久另类99精品国产 | 国产黄色av电影 | 欧美日韩精品免费 | 在线成人 | 久久精品视频在线观看 | 久久一区二区三区四区 | 影视先锋av资源噜噜 | 日本偷偷操 | 宅女噜噜66国产精品观看免费 | 老司机精品福利视频 | 欧美一区二| 毛片一区二区三区 | 国产精品久久久久久久毛片 |