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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2788|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

請問單片機串口通信程序數(shù)組的數(shù)據(jù)然后使用oled的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:608920 發(fā)表于 2020-2-2 16:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
題主寫一個項目練習(xí)知識,想請教一下問題,就是我想使用串口通信,通過pc來傳輸數(shù)組,然后oled顯示圖像或字符串,但是通過串口助手通信數(shù)據(jù)后,oled顯示滿屏亂碼,我oled設(shè)置了顯示位置和范圍限制,我猜測是通信的數(shù)組存儲代碼問題,但是修改了很多次還有查詢很多資料都沒法解決,想請教一下是哪里的思路出錯了,非常感謝各位

單片機源程序如下:
  1. #include<stc.h>//stc12系列51單片機的頭文件,被我改名了
  2. #include "oled.h"
  3. #include "picture.h"

  4. #define uch unsigned char
  5. #define uin unsigned int

  6. uin flag;
  7. //unsigned char buf[85];
  8. void send(void);

  9. void main()
  10. {
  11.         SCON=0X50;//9600bps
  12.         PCON=0X00;
  13.         TMOD=0X20;
  14.         EA=1;
  15.         ES=1;
  16.         TL1=0XFD;
  17.         TH1=0XFD;
  18.         TR1=1;
  19.                                 
  20. /*        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  21.         AUXR |= 0x40;                //定時器1時鐘為Fosc,即1T
  22.         AUXR &= 0xFE;                //串口1選擇定時器1為波特率發(fā)生器
  23.         TMOD &= 0x0F;                //設(shè)定定時器1為16位自動重裝方式
  24.         TL1 = 0x70;                //設(shè)定定時初值
  25.         TH1 = 0xFF;                //設(shè)定定時初值
  26.         ET1 = 0;                //禁止定時器1中斷
  27.         TR1 = 1;                //啟動定時器1        */ //這段的波特率有問題,被我摒棄了

  28.         Initial_M096128x64_ssd1306();
  29.         Delay_1ms(5);
  30.         fill_picture(0);//以上三行oled清屏初始化
  31.         while(1)
  32.         {
  33.            if(flag)
  34.            {
  35.                         Picture();//顯示函數(shù)
  36.            }

  37.         }
  38. }

  39. void serial() interrupt 4
  40. {
  41.         ES=0;
  42.         
  43.         if(RI)
  44.         {
  45.                 uin i;
  46.                 for(i=0;i<85;i++)
  47.                 {
  48.                         while(!RI);
  49.                         buf[i]=SBUF;
  50.                         RI=0;
  51.                         if(i==84)
  52.                                 flag=1;
  53.                 }
  54.         }
  55.         
  56.         
  57.         ES=1;
  58. }
復(fù)制代碼
一下是頭文件,另一個是oled初始化文件因為沒有太大問題,就不發(fā)了
  1. #ifndef        __PICTURE_H
  2. #define        __PICTURE_H
  3. /***********************Picture Code**************************/
  4. unsigned char buf[];
復(fù)制代碼
這是主函數(shù)文件里面的Picture()函數(shù)定義
  1. void Picture()
  2. {
  3.   unsigned char x,y;
  4.   unsigned int i=0;
  5.   for(y=0;y<8;y++)
  6.     {
  7.       Write_IIC_Command(0xb0+y);
  8.       Write_IIC_Command(0x0F);
  9.       Write_IIC_Command(0x10);
  10.       for(x=0;x<85;x++)
  11.         {
  12.           Write_IIC_Data(buf[i++]);
  13.         }
  14.     }
  15. }
復(fù)制代碼





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:168996 發(fā)表于 2020-2-2 21:54 | 只看該作者
串口接收(中斷)函數(shù)有問題
while(1)前一行:
預(yù)置buff數(shù)據(jù)
flag = 1
不要向串口發(fā)數(shù)據(jù),看一下oled是否正常顯示buff數(shù)據(jù)
回復(fù)

使用道具 舉報

板凳
ID:93224 發(fā)表于 2020-2-3 13:28 | 只看該作者
你這個串口中斷寫的有問題,比如說有85個數(shù)據(jù)到來,是需要陸續(xù)進入串口中斷85次,按照你寫的是進入串口中斷一次,連續(xù)接收85個數(shù)據(jù),這明顯是有錯的
回復(fù)

使用道具 舉報

地板
ID:93224 發(fā)表于 2020-2-3 13:29 | 只看該作者
你這個串口中斷接收有問題,串口中斷接收是陸續(xù)進入中斷85次,按照你寫的是進入一次中斷后,開始連續(xù)接收85個數(shù)據(jù),明顯是錯誤的
回復(fù)

使用道具 舉報

5#
ID:608920 發(fā)表于 2020-2-3 21:52 | 只看該作者
lele5211314 發(fā)表于 2020-2-3 13:29
你這個串口中斷接收有問題,串口中斷接收是陸續(xù)進入中斷85次,按照你寫的是進入一次中斷后,開始連續(xù)接收85 ...

你好,中斷函數(shù)我改成了這樣,但是傳輸?shù)臄?shù)組數(shù)據(jù)貌似無法正確存儲并被oled引用,而直接寫入程序作為code數(shù)組來給oled使用能正常顯示,不清楚是傳輸后的緩存問題還是原來使用unsigned char類型數(shù)組存儲數(shù)據(jù)方式不恰當(dāng),想請多指教一下,因為我是想把一小段只有幾秒的動畫來串口傳輸?shù)絾纹瑱C來作為logo使用,單片機作為歸類數(shù)據(jù)的作用而已,但在這方面卡殼了,謝謝

  1. void serial() interrupt 4
  2. {
  3. //        ES=0;
  4.        
  5.         if(RI)
  6.         {
  7.                
  8.                 buf[i]=SBUF;
  9.                 i++;
  10.                 if(i==85)
  11.                 {
  12.                         flag=1;
  13.                         i=0;
  14. //                        RI=1;
  15.                 }

  16.         }
  17. //        ES=1;
  18.         RI=0;
  19. }
復(fù)制代碼
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产免费又黄又爽又刺激蜜月al | 99在线精品视频 | 成人免费淫片aa视频免费 | 91资源在线 | 99热在线播放 | 国产91中文| 中文字幕在线免费 | 国产精品免费一区二区三区 | 国产精品国产三级国产aⅴ原创 | 暖暖日本在线视频 | 久久精品成人 | 久久精品欧美一区二区三区不卡 | 每日更新av | 91视频大全 | 黄色三级在线播放 | 风间由美一区二区三区在线观看 | 91最新在线视频 | 久久久久久免费精品一区二区三区 | 国产一区二区三区四区三区四 | 亚洲国产成人精品女人久久久 | 日韩在线中文字幕 | 日本午夜视频 | 国产日韩欧美二区 | 成人av一区| 欧洲国产精品视频 | 久久国产精品-久久精品 | 国产乱码精品一区二区三区中文 | 久久久久久九九九九 | 国产激情一区二区三区 | 91n成人| 国内精品视频在线观看 | 蜜桃在线播放 | 日韩中文一区二区三区 | 综合久久99 | 欧美精品在线一区二区三区 | 日韩三级免费网站 | 久久久久久久久久久久久9999 | 紧缚调教一区二区三区视频 | 亚洲 精品 综合 精品 自拍 | 成人在线视频一区 | 欧美一级三级在线观看 |