![]() |
發布時間: 2020-5-19 22:24
正文摘要:顯示函數我寫好了,請問就是怎么把串口收到的數據儲存起來,然后怎么調用啊? #include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint&nbs ... |
chengyuyu 發表于 2020-5-20 15:03 1 如果你的串口通訊正常的并且temp數組足夠大的話,那么你接受道所有的數劇都會在temp數組里面。2 讀取數據問題著個全是可以不用解釋,數據就在數組里面,你復制出來也行,直接調用也行 3 著個應該才是你要問的問題,比如串口發送:“1 2 3 a b c 你好嗎”怎么在顯示屏顯示,做法如下 定義結構體: typedef struct { u8 sign_name;//數字和字符的ASCII碼 u8 sign_data[16];//顯示數據局,字庫 }sign_number; typedef struct { u8 font[2];//漢字的ASCII碼, u8 chinese1[16];//漢字上半部分字庫 u8 chinese2[16];//下半部分字庫 }chinese; 1 的ASCII碼是0X31,用for循環檢索到temp里面有0x31就往顯示屏輸送1的顯示數據 你要自己建造一個字庫,: |
763900682 發表于 2020-5-20 23:46 void UsartConfiguration() { SCON=0X50;//¹¤×÷·½Ê½1 TMOD=0X20; TL1=0XFA; TH1=0XFA; TR1=1; EA=1; ES=1; } void main(void) { while(1) { UsartConfiguration(); if(rcv_date_ok_flag==1) { rcv_date_ok_flag=0; for(i=0;i<rcv_len;i++) shu_disp_1(2,i,rcv_buf); } } } void UART_one_Interrupt_Receive(void) interrupt 4 { unsigned char i; uchar temp =SBUF; if(temp==0x02) { rcv_date_ok_flag=0; rcv_len=0; } else if(temp==0x03) { rcv_date_ok_flag=1; } else { rcv_buf[rcv_len++]=temp; } } 您能給看看哪不對嗎 |
無論用那種單片機,道理差不多的。都要先申請一個全局變量的數組,將串口接收的數據放到該數組中。接受完數組后,串口會有特定的寄存器標志接收完成,檢測到接收完成就將數組的數據顯示,然后清空數組和寄存器的標志位。等待下一次接收。 |
你好! 如果串口傳什么漢字就顯示什么的話,需要帶有字庫的液晶; 如果不含有字庫的液晶,只能先制作字庫,顯示漢字數受限。 |
xxpp2011 發表于 2020-5-20 08:53 您好,我發了一下我的代碼,您看看還要怎么做才能取出temp【】里面的數? |
黃youhui 發表于 2020-5-20 11:45 您好,謝謝您的解答,我還是有一點不明白,希望您能賜教,就是那個我該怎么知道temp【】數組里面的數是多少,師傅跟我說用for循環就能取出來,您能給我解釋一下嗎? |
chengyuyu 發表于 2020-5-20 09:10 串口接收的數據是ASCII碼,你接收到的也只能是ASCII碼。ASCII是uint8_t(char)類型的所以最大只有0xff 也就是說你從串口接收到的數字是255,不存在大于256的數字。 而且你發送1000.串口傳輸給單片機或者單片機傳給串口的就是 0x31 0X30 0X30這三個數字, 0X31在ASCII里面就是1 0X30就是0. 如圖所示如果發送或者接收的數字大于126,那么串口會默認將這個大于126的數字和下一個數字組合,湊成一個漢字,也就是為什么漢字占兩個字節,而數字符號占一個字節的原因。 |
51hei截圖20200520113747.png (44.57 KB, 下載次數: 70)
用個數組,把接收到的數據存起來。然后把這個數組的內容顯示在12864上 |
xxpp2011 發表于 2020-5-20 08:53 您好,我的12864是不帶字庫的,所以我定義了一個字符字庫【】,里面是從1-9的字模,這樣從數組里面讀是不是得取位然后再顯示? |
muzhi 發表于 2020-5-19 22:52 您好,能稍微講一下傳參嗎,我現在應該是可以把接收到的數據緩存到一個數組,但是我用的12864是不帶字庫的,所以得知道數組里面的數的大小,然后在yi==temp%1000000000/100000000 qianwan=temp%100000000/10000000 baiwan=temp%10000000/1000000 shiwan=temp%1000000/100000 wan=temp%100000/10000; qian=temp%10000/1000; bai=temp%1000/100; shi=temp%100/10; ge=temp%10;這樣取出值的大小最后根據每個值得大小來顯示自定義字符字庫里的字符,這個思路對嗎? |
無論用那種單片機,道理差不多的。都要先申請一個全局變量的數組,將串口接收的數據放到該數組中。接受完數組后,串口會有特定的寄存器標志接收完成,檢測到接收完成就將數組的數據顯示,然后清空數組和寄存器的標志位。等待下一次接收。 |
一位一位接收,放進數組里面,顯示就從數組里面讀 |