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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

風向傳感器連接單片機,用LCD顯示數據,求大家幫忙看看程序哪里有問題

查看數: 3975 | 評論數: 9 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2020-12-8 21:51

正文摘要:

本帖最后由 明日香 于 2020-12-9 13:30 編輯 風向傳感器與單片機連接,用LCD1602顯示風向數據,傳感器返回的的應答幀數據是9個,其中LCD顯示第7個數據 求大家幫忙看看哪里有問題: 這是單片機原理圖: ...

回復

ID:213173 發表于 2020-12-10 11:25
明日香 發表于 2020-12-10 10:37
您好,請問您是用什么軟件模擬傳感器的呢?是類似于stc-icp串口助手嗎?

就是stc-icp串口助手
ID:796670 發表于 2020-12-10 10:37
wulin 發表于 2020-12-9 20:23
樓主注意,上面示例的校驗碼處理方式只是簡單模擬解析數據,不是真正按CRC算法處理校驗碼。實際應用中參考 ...

您好,請問您是用什么軟件模擬傳感器的呢?是類似于stc-icp串口助手嗎?
ID:796670 發表于 2020-12-10 10:31
wulin 發表于 2020-12-9 19:14
你搞了這么長時間還搞不定,給你改寫了,用串口助手模擬傳感器實物驗證沒有問題。根據其基本框架,你自己補 ...

謝謝,非常感謝
ID:213173 發表于 2020-12-9 20:23
樓主注意,上面示例的校驗碼處理方式只是簡單模擬解析數據,不是真正按CRC算法處理校驗碼。實際應用中參考制造商資料。
ID:213173 發表于 2020-12-9 19:14
你搞了這么長時間還搞不定,給你改寫了,用串口助手模擬傳感器實物驗證沒有問題。根據其基本框架,你自己補充完善。



  1. #include <STC12C5A60S2.H>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4.         
  5. sbit E=P2^2;    //1602使能引腳
  6. sbit RW=P2^1;    //1602讀寫引腳   
  7. sbit RS=P2^0;    //1602數據/命令選擇引腳

  8. uchar table1[]="Wind Direction ";
  9. uchar table2[]="The Angle:     ";
  10. uchar wind_direction[8]={0x01,0x03,0x00,0x00,0x00,0x02,0xC4,0x0B};//風向傳感器問詢幀
  11. uchar rec_buf[9];
  12. uchar strwind[]={'0','0','0',0xdf,' '};
  13. uchar error[]="Error";
  14. uint  wind_direction1;//單片機接收風向數據
  15. uint  temp;
  16. uchar num=0;
  17. bit   flag=0;
  18. bit   sign=1;
  19. uint  Angle;
  20. void delay(uint z)//延時函數
  21. {
  22.         uint x,y;
  23.         for(x=z;x>0;x--);
  24.                 for(y=110;y>0;y--);
  25. }

  26. void wcmd(uchar del)//寫命令函數
  27. {
  28.         RS=0;//命令選擇端
  29.         RW=0;//寫命令
  30.         P0=del;  //把命令字寫入
  31.         delay(1);
  32.         E=1;//使能
  33.         delay(1);
  34.         E=0;
  35. }

  36. void lcd1602_writedata(uchar dat)//寫數據函數
  37. {
  38.         RS=1;//數據選擇端
  39.         RW=0;//寫命令
  40.         P0=dat;  //把要顯示的數據寫入
  41.         delay(1);
  42.         E=1;
  43.         delay(1);
  44.         E=0;
  45. }

  46. void lcd1602_init()//LCD初始化
  47. {
  48.         wcmd(0x38);
  49.         wcmd(0x0C);
  50.         wcmd(0x06);
  51.         wcmd(0x01);
  52. }

  53. void init()  //系統初始化
  54. {
  55.         TMOD |=0X20;//定時器T1,方式2,波特率由PCON寄存器的SMOD決定
  56.         SCON=0x50; //REN RI TI,RI為0,TI為0
  57.         //串行口1方式1 SCON是串行口1的串行控制寄存器,REN為1,允許接收
  58.         PCON=0x00;//各工作方式波特率加倍
  59.         TH1=0xfD;//9600bps@11.0592
  60.         TL1=0xfD;
  61.         TR1=1; //定時器1中斷打開
  62.         EA=1;//cpu總中斷允許位,1為開放中斷
  63.         ES=1;// 1允許串行口中斷
  64. }

  65. void main()
  66. {
  67.         uchar i;
  68.         init();
  69.         lcd1602_init();
  70.         wcmd(0x81);//第一行
  71.         for(i=0;i<14;i++)
  72.                 lcd1602_writedata(table1[i]);
  73.         wcmd(0xc1);//第二行
  74.         for(i=0;i<15;i++)
  75.                 lcd1602_writedata(table2[i]);
  76.         while(1)
  77.         {
  78.                 EA=0;//關中斷
  79.                 for(i=0;i<8;i++)//問詢
  80.                 {
  81.                         SBUF=wind_direction[i];//風向數據
  82.                         while(!TI);//數據發送結束時TI自動置1
  83.                         TI=0;
  84.                 }
  85.                 EA=1;//開中斷
  86.                 delay(1000);//等待1秒
  87.                 if(flag==1)
  88.                 {
  89.                         flag=0;
  90.                         temp=rec_buf[8]<<8|rec_buf[7];//提取驗證碼
  91.                         if(temp==0xc8db)//驗證正確
  92.                         {
  93.                                 sign=1;
  94.                                 wind_direction1=rec_buf[5]<<8|rec_buf[6];
  95.                                 strwind[0]=(wind_direction1/100%10)+'0';
  96.                                 strwind[1]=(wind_direction1/10%10)+'0';
  97.                                 strwind[2]=(wind_direction1%10)+'0';
  98.                         }
  99.                         else//錯誤,清除緩存
  100.                         {
  101.                                 sign=0;
  102.                                 for(i=0;i<9;i++)
  103.                                         rec_buf[i]=0;
  104.                         }
  105.                 }
  106.                 wcmd(0xc0+11);//字符顯示起始位置
  107.                 if(sign)
  108.                 {
  109.                         for(i=0;i<5;i++)
  110.                                 lcd1602_writedata(strwind[i]);//顯示風向角度數據
  111.                 }
  112.                 else
  113.                 {
  114.                         for(i=0;i<5;i++)
  115.                                 lcd1602_writedata(error[i]);//顯示錯誤字符
  116.                 }
  117.         }
  118. }

  119. void UART_1() interrupt 4
  120. {
  121.         RI=0; //RI置0
  122.         rec_buf[num] = SBUF;
  123.         if(rec_buf[0]==0x01)//驗證數據頭,正確繼續接收,錯誤被后續數據覆蓋
  124.         {
  125.                 num++;
  126.                 if(num>=9)                        //幀長度
  127.                 {
  128.                         flag=1;                        //幀接收完成標志置1
  129.                         num=0;                        //計數變量清0
  130.                 }
  131.         }
  132. }
  133. //01 03 04 00 02 00 5a db c8
復制代碼





ID:592807 發表于 2020-12-9 18:55
這個00可能時你數組里面本來就存在的數據,你根本就沒收到數據,試一下吧接收到的所有幀都打印出來

51hei截圖20201209185354.png (23.33 KB, 下載次數: 139)

51hei截圖20201209185354.png
ID:824490 發表于 2020-12-9 16:37
風向傳感器是哪個器件?
ID:796670 發表于 2020-12-9 13:31
黃youhui 發表于 2020-12-9 08:38
哎,你上電路圖和風向傳感器的說明書吧,你這個設備地址碼可能是I2C的通訊地址。如果是I2C的話你可能從一開 ...

你好,已經上傳電路圖和說明書,請您再幫忙看一下吧,感謝不已~
ID:592807 發表于 2020-12-9 08:38
哎,你上電路圖和風向傳感器的說明書吧,你這個設備地址碼可能是I2C的通訊地址。如果是I2C的話你可能從一開始就錯了。

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级黄在线观看 | 亚洲色图综合网 | 九九九久久国产免费 | 欧美日韩精品一区二区三区视频 | 黄色一级视频免费 | 欧美日韩中文在线 | 91大神在线资源观看无广告 | 欧美亚洲一级 | 成人国产在线视频 | 久久精品—区二区三区 | 免费大黄视频 | 日韩在线h | 成人国产精品免费观看 | 久久毛片 | 欧美色综合天天久久综合精品 | 成人做爰69片免费观看 | 华丽的挑战在线观看 | 蜜臀网 | 欧美日韩黄 | 中文字幕 欧美 日韩 | 精品国产第一区二区三区 | 国产精品久久久久免费 | 91久久精品国产91久久性色tv | 精品国产一级 | 一区二区三区av | 97久久精品午夜一区二区 | 一级黄色av电影 | 日韩另类视频 | 91免费在线 | 亚洲一区 中文字幕 | 国产欧美日韩精品一区二区三区 | 亚洲a在线观看 | 欧美一区二区三区在线看 | 伊色综合久久之综合久久 | 日韩亚洲欧美一区 | 久久狠狠| 亚洲高清av | 天天操天天干天天爽 | 一区二区三区免费在线观看 | 中文日本在线 | 久久久婷婷 |