找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

51單片機(jī)的串口亂碼問(wèn)題

  [復(fù)制鏈接]
ID:239244 發(fā)表于 2017-10-14 21:09 | 顯示全部樓層 |閱讀模式
從上位機(jī)發(fā)送一位數(shù)字到單片機(jī),(例如發(fā)送8),使用  a=SBUF;去接收這個(gè)數(shù)字,此后在將a送給1602顯示發(fā)現(xiàn)是亂碼,
unsigned char code dat[10]={'0','1','2','3','4','5','6','7','8','9'};     
                        writecom(0x80);                 
                        writedate(dat[a]);   //大致的顯示部分
求問(wèn)是什么原因,是否需要通過(guò)scanf函數(shù)去接受串口送來(lái)的數(shù)據(jù)才行,可是這個(gè)函數(shù)該怎么使用呢,求教各位大神。

回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2017-10-14 23:11 | 顯示全部樓層
scanf函數(shù)不能接受串口送來(lái)的數(shù)據(jù)。keil c中的scanf和printf函數(shù)并非80C51串行口真正的I/O操作,而是C51編譯器利用80C51串行口,通過(guò)C51庫(kù)函數(shù)“Stdio.h”在PC機(jī)上輸入/輸出數(shù)據(jù)信息。
回復(fù)

使用道具 舉報(bào)

ID:164363 發(fā)表于 2017-10-14 23:57 | 顯示全部樓層
顯示函數(shù)有問(wèn)題
回復(fù)

使用道具 舉報(bào)

ID:239563 發(fā)表于 2017-10-15 09:05 | 顯示全部樓層
先用串口助手調(diào)一下試試
回復(fù)

使用道具 舉報(bào)

ID:239244 發(fā)表于 2017-10-15 10:04 | 顯示全部樓層
zl2168 發(fā)表于 2017-10-14 23:11
scanf函數(shù)不能接受串口送來(lái)的數(shù)據(jù)。keil c中的scanf和printf函數(shù)并非80C51串行口真正的I/O操作,而是C51編 ...

是嗎,scanf和printf只能在和上位機(jī)通信的時(shí)候用嗎。。。。
回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2017-10-15 19:01 | 顯示全部樓層
Endover 發(fā)表于 2017-10-15 10:04
是嗎,scanf和printf只能在和上位機(jī)通信的時(shí)候用嗎。。。。

是的。scanf和printf函數(shù)在keil c中也能運(yùn)行。
你可在keil c中運(yùn)行該例程序,觀測(cè)scanf和printf函數(shù)在keil c中的功能。
捕獲.PNG
捕獲1.PNG
捕獲2.PNG
以上摘自張志良編著
80C51單片機(jī)實(shí)用教程——基于Keil CProteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學(xué)習(xí)51單片機(jī)原理,程序(雙解c和匯編)語(yǔ)句條條有注解,便于閱讀理解,便于自學(xué)。
回復(fù)

使用道具 舉報(bào)

ID:221145 發(fā)表于 2017-10-15 22:22 | 顯示全部樓層
首先確認(rèn)MCU收到了正確的數(shù)據(jù),然后確認(rèn)1602顯示驅(qū)動(dòng)程序是正常的;scanf函數(shù)可以百度一下;
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2017-10-16 00:05 | 顯示全部樓層
很簡(jiǎn)單,顯示是由點(diǎn)陣或段構(gòu)成的,它不懂12345……,只知道什么地方亮,什么地方暗。你讓它顯示1,送1給它無(wú)用,要送1所對(duì)應(yīng)的點(diǎn)陣才行。
回復(fù)

使用道具 舉報(bào)

ID:219796 發(fā)表于 2017-10-16 01:46 來(lái)自手機(jī) | 顯示全部樓層
加減48試試
回復(fù)

使用道具 舉報(bào)

ID:239880 發(fā)表于 2017-10-16 13:20 | 顯示全部樓層
波特率沒(méi)設(shè)置對(duì)吧
回復(fù)

使用道具 舉報(bào)

ID:239244 發(fā)表于 2017-10-16 15:36 | 顯示全部樓層

試過(guò)了,不行。。。。
回復(fù)

使用道具 舉報(bào)

ID:239244 發(fā)表于 2017-10-16 15:37 | 顯示全部樓層
hello1314 發(fā)表于 2017-10-16 13:20
波特率沒(méi)設(shè)置對(duì)吧

波特率沒(méi)問(wèn)題啊
回復(fù)

使用道具 舉報(bào)

ID:151348 發(fā)表于 2017-10-16 16:37 | 顯示全部樓層
亂碼的原因有很多,把程序貼上來(lái)看看
回復(fù)

使用道具 舉報(bào)

ID:47286 發(fā)表于 2017-10-16 17:22 | 顯示全部樓層
1602不能直接顯示HEX吧 要轉(zhuǎn)換成DEC然后一位一位顯示吧
回復(fù)

使用道具 舉報(bào)

ID:239991 發(fā)表于 2017-10-16 17:53 | 顯示全部樓層
波特率是否正常
回復(fù)

使用道具 舉報(bào)

ID:228543 發(fā)表于 2017-10-16 18:06 | 顯示全部樓層
是不是波特率設(shè)置不對(duì)啊
回復(fù)

使用道具 舉報(bào)

ID:79358 發(fā)表于 2017-10-17 11:38 | 顯示全部樓層
接收到的是字符串,在1602上顯示ASCII碼 顯示函數(shù)后面加個(gè)0X48 試試
回復(fù)

使用道具 舉報(bào)

ID:240256 發(fā)表于 2017-10-17 15:24 | 顯示全部樓層
單片機(jī)從上位機(jī)接收到的數(shù)據(jù)是ASCII碼格式(你發(fā)送8則對(duì)應(yīng)的ASCII嗎值為56),你將該數(shù)據(jù)保存在變量a,通過(guò)dat[a]獲取對(duì)應(yīng)的數(shù)據(jù),此時(shí),索引越界了,所以是亂碼。在writedate(dat[a]);  語(yǔ)句前面添加一條 a = a - '0';語(yǔ)句就不會(huì)有亂碼現(xiàn)象了。祝你學(xué)習(xí)愉快,謝謝。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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