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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5627|回復: 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)
回復

使用道具 舉報

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

使用道具 舉報

ID:585800 發表于 2019-8-6 08:50 | 顯示全部樓層
這個引腳定義了么
回復

使用道具 舉報

ID:502881 發表于 2020-3-8 13:00 | 顯示全部樓層
很好,有沒有原理圖?
回復

使用道具 舉報

ID:796670 發表于 2020-8-11 09:41 | 顯示全部樓層
大佬,求個原理圖,非常感謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 麻豆久久久久 | 国产三区视频在线观看 | 国产精品黄色 | 精品一区二区三区在线播放 | 色综合视频 | 成人久久18免费网站图片 | 欧美一区二区二区 | 一级黄在线观看 | 国产精品久久久久久久久久久久 | 欧美日韩在线看 | av片在线观看 | 久久综合爱 | 亚洲精品一区二三区不卡 | 91人人看 | 中文字幕高清av | 成人午夜网站 | 日本精品一区二区三区在线观看 | 亚洲精品国产成人 | 国产成人在线视频 | 久久成人在线视频 | 日韩在线h | 日本一本视频 | 一级黄在线观看 | 欧美日韩福利 | 精品国产一区二区久久 | 久久亚洲视频 | 天天曰天天干 | 97超碰站| 五月天激情综合网 | 99精品久久久久久 | 亚洲免费精品 | 国精日本亚洲欧州国产中文久久 | 日韩一区不卡 | 中文字幕在线观看国产 | 精品久久久精品 | 欧美三级在线 | 97av在线| 99re国产视频 | 亚洲精品99 | 九九热在线观看视频 | 欧美日韩一区二区视频在线观看 |