找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3018|回復(fù): 8
收起左側(cè)

用LCD顯示風(fēng)向傳感器測得的風(fēng)向,求大家?guī)兔纯磫纹瑱C(jī)程序哪里不對,一直沒有現(xiàn)象

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 60 黑幣 回復(fù)本帖可獲得 15 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
ID:796670 發(fā)表于 2020-12-3 19:27 | 顯示全部樓層 |閱讀模式
使用單片機(jī)串口獲取風(fēng)向傳感器的數(shù)據(jù),然后用LCD1602顯示,求求各位幫忙看看程序哪里有問題,改了好多遍了,但一直沒有現(xiàn)象
這是傳感器的說明:
1.jpg 捕獲1.PNG

以下為程序:

  1. #include <reg52.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <intrins.h>
  6. #define uchar unsigned char
  7. #define uint  unsigned int
  8.         
  9. sbit E=P2^2;    //LCD1602使能引腳
  10. sbit RW=P2^1;    //LCD1602讀寫引腳   
  11. sbit RS=P2^0;    //LCD1602數(shù)據(jù)/命令選擇引腳
  12. uchar table[24]= //用來存儲SBUF的數(shù)據(jù) {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  13. uchar wind_direction[8]={0x01,0x03,0x00,0x00,0x00,0x02,0xC4,0x0B};//風(fēng)向傳感器問詢幀
  14. uchar wind_direction1;//單片機(jī)接收風(fēng)向數(shù)據(jù)
  15. uchar strwind[];  //用來把得到的整形數(shù)據(jù)轉(zhuǎn)為字符串
  16. int flag1;
  17. void delay(uint z)//延時(shí)函數(shù)
  18. {
  19.         uint x,y;
  20.         for(x=z;x>0;x--);
  21.                 for(y=110;y>0;y--);
  22. }

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

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

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

  55. void init()  //系統(tǒng)初始化
  56. {
  57. TMOD=0X20;//定時(shí)器T1,方式2,波特率由PCON寄存器的SMOD決定
  58. TH1=0xfa;//設(shè)置波特率
  59. TL1=0xfa;
  60. TR1=1;//定時(shí)器1中斷打開
  61. SCON=0x50;//方式1 SCON是串行口1的串行控制寄存器
  62. PCON=0x00;//各工作方式波特率加倍
  63. IP=0X10;//
  64. REN=1; //串口1接收使能
  65. EA=1;//cpu開放中斷
  66. ES=1;//允許串行口中斷

  67. }
  68. void main()
  69. {
  70.         uchar m=0;
  71.         flag1=0;//判斷風(fēng)速風(fēng)向傳感器
  72.         init();
  73.   while(1)
  74.         {
  75.                 int i;
  76.                 if(flag1==0)//flag1=0則發(fā)送風(fēng)向數(shù)據(jù)
  77.         {
  78.         for(i=0;i<8;i++)
  79.                 {
  80.                 SBUF=wind_direction[i];   //發(fā)送問詢幀
  81.                         while(!TI);  //數(shù)據(jù)發(fā)送結(jié)束時(shí)TI置1
  82.                         TI=0;
  83.                 }
  84.                 delay(500);
  85.                 strwind[0]=(wind_direction1/10)+'0';   //這里是把整數(shù)型數(shù)據(jù)轉(zhuǎn)為字符
  86.                 strwind[1]=(wind_direction1%10)+'0';
  87.                 lcd1602_init();
  88.                 delay(100);
  89.                 wcmd(0x80);  //LCD第一行第一個(gè)位置
  90.                 delay(100);
  91.                 for(m=0;m<3;m++)
  92.                 {
  93.                 lcd1602_writedata(strwind[m]);
  94.                 }
  95.                 delay(500);
  96.   }
  97. }
  98. }

  99. void UART_1() interrupt 4
  100. {
  101.         int i=0;
  102.         //接收完緩沖數(shù)據(jù)后RI置1
  103.         if(RI)//如果RI為1,即如果收到
  104.         {
  105.           RI=0; //RI置0
  106.                 table[i++]=SBUF;  //  得到的風(fēng)向數(shù)據(jù)存在SBUF,把數(shù)據(jù)給table[i++]
  107.                 if(i>8)  //一個(gè)應(yīng)答幀是9個(gè)字節(jié),i>8表示一個(gè)風(fēng)向數(shù)據(jù)傳輸完成
  108.                 {
  109.                 wind_direction1=table[6];//風(fēng)向數(shù)據(jù)是第七個(gè),即table[6],給wind_direction1[0]               
  110.                  }
  111.         }
  112. }
復(fù)制代碼


求各位幫忙看看以上程序哪里不太對,尤其是串口通信部分,改了好多遍但最后都沒有現(xiàn)象,求大家?guī)蛶兔,謝謝。

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:796670 發(fā)表于 2020-12-3 20:27 | 顯示全部樓層
球球各位了,調(diào)了好多次一直不行,救救孩子吧
回復(fù)

使用道具 舉報(bào)

ID:592807 發(fā)表于 2020-12-4 08:25 | 顯示全部樓層
LCD_Init()放在while(1)里面,LCD被初始化了多少次?
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2020-12-4 08:28 | 顯示全部樓層
明日香 發(fā)表于 2020-12-3 20:27
球球各位了,調(diào)了好多次一直不行,救救孩子吧

樓主的程序有很多基礎(chǔ)知識錯(cuò)誤。這是給壇友修改的一個(gè)甲醛檢測示例程序,硬件TX-1C實(shí)驗(yàn)板。雖然不能直接解決樓主的問題,但可依照其程序構(gòu)架、解題思路、書寫格式舉一反三,就可以輕易解決問題。 串口發(fā)收數(shù)據(jù)串甲醛檢測.zip (429.51 KB, 下載次數(shù): 7)

回復(fù)

使用道具 舉報(bào)

ID:592807 發(fā)表于 2020-12-4 09:00 | 顯示全部樓層
你說的現(xiàn)象是什么現(xiàn)象:LCD還是串口還是風(fēng)向傳感器?

LCD和串口你可以修改代碼讓他們打印出其他東西,能打印就不是這兩者的問題、
風(fēng)向傳感器,你先確定電路正常否?電壓正常否?然后在檢測風(fēng)向變化時(shí)它有向單片機(jī)發(fā)送數(shù)據(jù)嗎?


看了你三個(gè)帖子,你一直在問代碼問題,你確保你電路沒問題嗎?
如果你確保電路沒問題,你要做的是去找買你傳感器的廠家要例程,然后燒錄,看喲沒有現(xiàn)象。
回復(fù)

使用道具 舉報(bào)

ID:796670 發(fā)表于 2020-12-4 13:30 | 顯示全部樓層
黃youhui 發(fā)表于 2020-12-4 09:00
你說的現(xiàn)象是什么現(xiàn)象:LCD還是串口還是風(fēng)向傳感器?

LCD和串口你可以修改代碼讓他們打印出其他東西,能 ...

謝謝指點(diǎn)
回復(fù)

使用道具 舉報(bào)

ID:796670 發(fā)表于 2020-12-4 13:30 | 顯示全部樓層
wulin 發(fā)表于 2020-12-4 08:28
樓主的程序有很多基礎(chǔ)知識錯(cuò)誤。這是給壇友修改的一個(gè)甲醛檢測示例程序,硬件TX-1C實(shí)驗(yàn)板。雖然不能直接 ...

謝謝指點(diǎn)
回復(fù)

使用道具 舉報(bào)

ID:592807 發(fā)表于 2020-12-4 14:06 | 顯示全部樓層

不客氣,
請共同遵守求貼禮儀,問題解決后發(fā)帖置頂然后來者學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:796670 發(fā)表于 2020-12-4 15:22 | 顯示全部樓層
wulin 發(fā)表于 2020-12-4 08:28
樓主的程序有很多基礎(chǔ)知識錯(cuò)誤。這是給壇友修改的一個(gè)甲醛檢測示例程序,硬件TX-1C實(shí)驗(yàn)板。雖然不能直接 ...

感謝指點(diǎn)
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表