欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

只需一步,快速開始

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

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

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

單片機(jī)源程序如下:
  1. #include<stc.h>//stc12系列51單片機(jī)的頭文件,被我改名了
  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;                //定時(shí)器1時(shí)鐘為Fosc,即1T
  22.         AUXR &= 0xFE;                //串口1選擇定時(shí)器1為波特率發(fā)生器
  23.         TMOD &= 0x0F;                //設(shè)定定時(shí)器1為16位自動(dòng)重裝方式
  24.         TL1 = 0x70;                //設(shè)定定時(shí)初值
  25.         TH1 = 0xFF;                //設(shè)定定時(shí)初值
  26.         ET1 = 0;                //禁止定時(shí)器1中斷
  27.         TR1 = 1;                //啟動(dòng)定時(shí)器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ù)制代碼
一下是頭文件,另一個(gè)是oled初始化文件因?yàn)闆]有太大問題,就不發(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ù)

使用道具 舉報(bào)

沙發(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ù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

你好,中斷函數(shù)我改成了這樣,但是傳輸?shù)臄?shù)組數(shù)據(jù)貌似無法正確存儲(chǔ)并被oled引用,而直接寫入程序作為code數(shù)組來給oled使用能正常顯示,不清楚是傳輸后的緩存問題還是原來使用unsigned char類型數(shù)組存儲(chǔ)數(shù)據(jù)方式不恰當(dāng),想請(qǐng)多指教一下,因?yàn)槲沂窍氚岩恍《沃挥袔酌氲膭?dòng)畫來串口傳輸?shù)絾纹瑱C(jī)來作為logo使用,單片機(jī)作為歸類數(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ù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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