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

QQ登錄

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

帖子
查看: 1849|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

求教單片機(jī)這個(gè)錯(cuò)“(209) type conflict”怎么發(fā)生的?怎么解決?謝謝

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
求教這個(gè)錯(cuò)“(209) type conflict”怎么發(fā)生,怎么解決?謝謝!(PIC16F877A, SPI連接0.96OLD屏)



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

使用道具 舉報(bào)

沙發(fā)
ID:277550 發(fā)表于 2021-11-3 13:43 | 只看該作者
檢查:  數(shù)據(jù)類型 uchar 定義過(guò)了嗎
回復(fù)

使用道具 舉報(bào)

板凳
ID:313048 發(fā)表于 2021-11-3 13:51 | 只看該作者
你這個(gè)ComTable是個(gè)數(shù)組,你的writeCommand這個(gè)寫(xiě)命令后面的括號(hào)內(nèi)不應(yīng)該是(0XB0|ComTable[i])?
回復(fù)

使用道具 舉報(bào)

地板
ID:967119 發(fā)表于 2021-11-3 13:58 | 只看該作者
devcang 發(fā)表于 2021-11-3 13:43
檢查:  數(shù)據(jù)類型 uchar 定義過(guò)了嗎

定義過(guò)。
回復(fù)

使用道具 舉報(bào)

5#
ID:967119 發(fā)表于 2021-11-3 13:59 | 只看該作者
AUG 發(fā)表于 2021-11-3 13:51
你這個(gè)ComTable是個(gè)數(shù)組,你的writeCommand這個(gè)寫(xiě)命令后面的括號(hào)內(nèi)不應(yīng)該是(0XB0|ComTable)?

哦,我看看。 網(wǎng)上51的,準(zhǔn)備移植到PIC。
回復(fù)

使用道具 舉報(bào)

6#
ID:967119 發(fā)表于 2021-11-3 14:28 | 只看該作者
AUG 發(fā)表于 2021-11-3 13:51
你這個(gè)ComTable是個(gè)數(shù)組,你的writeCommand這個(gè)寫(xiě)命令后面的括號(hào)內(nèi)不應(yīng)該是(0XB0|ComTable)?

對(duì),照你的改后不報(bào)錯(cuò)了。謝謝!
又有下面這個(gè)錯(cuò),請(qǐng)指教下:

回復(fù)

使用道具 舉報(bào)

7#
ID:967119 發(fā)表于 2021-11-3 14:32 | 只看該作者
本帖最后由 cczjw 于 2021-11-3 14:37 編輯
AUG 發(fā)表于 2021-11-3 13:51
你這個(gè)ComTable是個(gè)數(shù)組,你的writeCommand這個(gè)寫(xiě)命令后面的括號(hào)內(nèi)不應(yīng)該是(0XB0|ComTable)?

對(duì),照你的改后不報(bào)錯(cuò)了。謝謝!又有下面這個(gè)錯(cuò),請(qǐng)指教下:


若去掉ROM就是這個(gè)錯(cuò):



回復(fù)

使用道具 舉報(bào)

8#
ID:453974 發(fā)表于 2021-11-3 21:53 | 只看該作者
源程序發(fā)進(jìn)來(lái)吧
回復(fù)

使用道具 舉報(bào)

9#
ID:967119 發(fā)表于 2021-11-4 16:32 | 只看該作者

源程序發(fā)進(jìn)來(lái)吧


1、下面這個(gè)錯(cuò)查出原因應(yīng)該是RAM放不下6個(gè)漢字。只留2個(gè)漢字就不報(bào)錯(cuò)了。但為什么不能用上一句  "uchar rom font[]=" 把字庫(kù)放 ROM 呢(會(huì)報(bào)錯(cuò))?


2、PIC16F877A SPI 的 3線與4線的SPI模式要怎樣設(shè)置呢?

謝謝!
源程序:已在下一貼直接放了文本,可不下載這個(gè)壓縮包: mainSPI_oled12864_max7210.rar (4.2 KB, 下載次數(shù): 3)
回復(fù)

使用道具 舉報(bào)

10#
ID:967119 發(fā)表于 2021-11-4 17:08 | 只看該作者
累不死的狗 發(fā)表于 2021-11-3 21:53
源程序發(fā)進(jìn)來(lái)吧
  1. /*******************************************************************************
  2. 文件名:mainSPI_oled12864_max7210-3.c
  3. 單片機(jī)型號(hào):        PICl6F877A
  4. 晶振頻率:        4MHz
  5. 功能:                OLED 與使用MAX7219串行驅(qū)動(dòng)8位共陰極LED數(shù)碼管同顯
  6. ********************************************************************************/

  7. //#include<pic.h>
  8. //#include<pic16f877a.h>
  9. #include<pic16f87x.h>

  10. #define uchar unsigned char
  11. #define uint unsigned int
  12. #define SPISCK_DIR                TRISC3                 //SPI時(shí)鐘SCK
  13. #define SPISCK                        RC3                        //SPI時(shí)鐘SCK
  14. #define SPIMISO_DIR         TRISC4                 //SPI數(shù)據(jù)輸入SDI
  15. #define SPIMISO                        RC4                 //SPI數(shù)據(jù)輸入SDI
  16. #define SPIMOSI_DIR                TRISC5                 //SPI數(shù)據(jù)輸出SDO
  17. #define SPIMOSI                        RC5                        //SPI數(shù)據(jù)輸出SDO
  18. #define SPISS_DIR                TRISC1                //SPI片選SS
  19. #define SPISS                         RC1                 //SPI片選SS

  20. //#define OLED_RST_DIR         TRISC2                 //OLED復(fù)位
  21. //#define OLED_RST                RC2                 //OLED復(fù)位

  22. //#define        OLED_SI SPIMOSI        //RC5-串行數(shù)據(jù)輸入、輸出端
  23. //#define        OLED_SCL SPISCK        //RC3-同步時(shí)鐘輸入端        
  24. //#define        OLED_A0 SPIMISO        //RC4-選擇命令還是數(shù)據(jù)
  25. //#define        OLED_CS SPISS        //RC1-片選

  26. #define RES_DIR         TRISC2                 //OLED復(fù)位
  27. #define RES                        RC2                 //OLED復(fù)位

  28. #define        OLED_SCL         SPISCK                //RC3-同步時(shí)鐘輸入端
  29. #define        OLED_SI         SPIMOSI                //RC5-串行數(shù)據(jù)輸入、輸出端
  30. #define        OLED_A0         SPIMISO                //RC4-選擇命令還是數(shù)據(jù)
  31. #define        OLED_CS1         SPISS                //RC1-片選

  32. #define LCD_SS_DIR                 TRISC6        //LCD片選,輸出
  33. #define LCD_SS                        RC6         //LCD片選

  34. uchar LCD_code[10]={0x30,0x6d,0x5b,0x30,0x7F,0x5f,0x6d,0x79};        //12518623
  35. //{0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x71,0x70b};                        //表示不譯方式0~9
  36. //B碼方式數(shù)字0~9時(shí),uchar tab[10]={0,1,2,3,4,5,6,7,8,9};

  37. void initiate_SPI(void)        //SPI初始化程序
  38. {
  39.         SSPCON=0x00;
  40.         SSPSTAT=0x00;                 //清空配置寄存器
  41.         SPISCK_DIR=0;                 //置SCK為輸出
  42.         SPIMISO_DIR=1;                 //*** SDI為自動(dòng)控制,本行可省略
  43.         SPIMOSI_DIR=0;                 //置SDO為輸出
  44.         SPISS_DIR=0;                //OLED_SS為輸出
  45.         SPISS=1;                        //OLED掛起

  46.         RES_DIR=0;                        //置RST為輸出

  47.         LCD_SS_DIR=0;                //置LCD_SS為輸出
  48.         LCD_SS=1;                         //LCD_SS掛起

  49.         CKP=0;                                //時(shí)鐘閑置為低電平
  50.         CKE=1;                                 //為上升沿發(fā)送數(shù)據(jù)        *//
  51.         SMP=0;                                //在輸出中間采樣輸入        *//
  52.         SSPM3=0; SSPM2=0;        //Fosc/16
  53.         SSPM1=0; SSPM1=1;
  54.         SSPIF=0;
  55.         SSPIE= 0;                        //關(guān)中斷
  56.         SSPEN=1;                        //SPI使能
  57. }
  58.         
  59. void SPItransfer(uchar data)         //SPI數(shù)據(jù)傳輸
  60. {
  61.         WCOL=0;                                //清發(fā)送沖突標(biāo)志位
  62.         SSPIF=0;                        //清標(biāo)志位
  63.         SSPBUF=data;                //發(fā)送數(shù)據(jù)
  64.         while(!SSPIF);                 //等待發(fā)送完畢
  65.         SSPIF=0;                         //*** 清標(biāo)志位,本行可省略
  66. }


  67. //** 以下LCD專用
  68. void Max7219_write(uchar address,uchar data)        //寫(xiě)入MAX7219,LCD專用�。�!
  69. {
  70.         SPISS=1;
  71.         LCD_SS=0;                                 //LCD_SS選中
  72.         SPItransfer(address);         //寫(xiě)人地址
  73.         SPItransfer(data);                //寫(xiě)入數(shù)據(jù)
  74.         LCD_SS=1;
  75. }

  76. void Max7219_init(void)                //LCD專用�。�!
  77. {
  78.         Max7219_write(0x0c,0x01);                //0x0e為關(guān)斷模式寄存器;0x01表示顯示器處于工作狀態(tài)
  79.         Max7219_write(0x0a,0x0f);                //0x0a為亮度調(diào)節(jié)寄存器;0x0f使數(shù)碼管顯示亮度為最亮
  80.         Max7219_write(0x09,0x00);
  81.         //0x09為譯碼模式選擇寄存器;0x00為非譯碼方式;0xf為選擇8位BCD-B譯碼模式
  82.         Max7219_write(0x0b,0x07);                //0x0b為掃描限制寄存器;0x07表示可接8個(gè)LED數(shù)碼管
  83. }

  84. void display(uchar * p) //數(shù)碼管8位顯示,LCD專用!��!
  85. {
  86.         uchar i;
  87.         for(i=0;i<8;i++)
  88.         {
  89.                 Max7219_write(i+1,*(p+i));
  90.         }
  91. }
  92. //** 以上LCD專用


  93. /*************************************************************************************************/
  94. /*--------------------------------------LCD功能定義----------------------------------------------*/
  95. /*************************************************************************************************/
  96. //uchar code ComTable[]={3,2,1,0,7,6,5,4,};
  97. uchar ComTable[]={3,2,1,0,7,6,5,4,};

  98. /*LCM顯示開(kāi)關(guān)設(shè)定*/
  99. #define DISPLAY_ON()           WriteCommand(0xaf)   // Display on, 顯示開(kāi)
  100. #define DISPLAY_OFF()          WriteCommand(0xae)   // Display off,顯示關(guān)

  101. /*LCM顯示ADC設(shè)定*/
  102. #define SET_ADC()              WriteCommand(0xa1)   // Reverse disrect (SEG131-SEG0,正向
  103. #define CLEAR_ADC()            WriteCommand(0xa0)   // Normal disrect (SEG0-SEG131),逆向

  104. /*LCM反顯設(shè)定*/
  105. #define REVERSE_DISPLAY_ON()   WriteCommand(0xa7)   // Reverse display : 0 illuminated,白字黑背景
  106. #define REVERSE_DISPLAY_OFF()  WriteCommand(0xa6)   // Normal display :  1 illuminated, 黑字白背景

  107. /*LCM顯示黑屏設(shè)定*/
  108. #define ENTIRE_DISPLAY_ON()    WriteCommand(0xa5)   // Entire dislay   Force whole LCD point
  109. #define ENTIRE_DISPLAY_OFF()   WriteCommand(0xa4)   // Normal display

  110. /*LCM顯示偏壓設(shè)定 */
  111. #define SET_BIAS()             WriteCommand(0xa3)   // bias 1
  112. #define CLEAR_BIAS()           WriteCommand(0xa2)   // bias 0

  113. /*LCM */
  114. #define SET_MODIFY_READ()      WriteCommand(0xe0)   // Stop automatic increment of the column address by the read instruction
  115. #define RESET_MODIFY_READ()    WriteCommand(0xee)   // Cancel Modify_read, column address return to its initial value just before the Set Modify Read instruction is started

  116. /*LCM復(fù)位 */
  117. #define RESET()                WriteCommand(0xe2)

  118. /*LCM顯示輸出模式選擇*/
  119. #define SET_SHL()              WriteCommand(0xc8)   // SHL 1,COM63-COM0 逆方向->從右到左顯示
  120. #define CLEAR_SHL()            WriteCommand(0xc0)   // SHL 0,COM0-COM63 順?lè)较?>從左到右顯示

  121. /*LCMLCM工作頻率選擇*/
  122. #define SET_OSC()              WriteCommand(0xE4)  //
  123. #define CLEAR_OSC()            WriteCommand(0xE5)  //

  124. /*************************************************************************************************/
  125. /*---------------------------------------8*16字模------------------------------------------------*/
  126. /*************************************************************************************************/
  127. //uchar rom font1[]=
  128. uchar font1[]=
  129. {
  130. /*--  文字:  測(cè)  --*/
  131. /*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
  132. 0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,
  133. 0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00,

  134. /*--  文字:  試  --*/
  135. /*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
  136. 0x40,0x42,0xDC,0x08,0x00,0x90,0x90,0x90,0x90,0x90,0xFF,0x10,0x12,0x1C,0x10,0x00,
  137. 0x00,0x00,0x7F,0x20,0x10,0x20,0x20,0x1F,0x10,0x10,0x01,0x06,0x18,0x20,0x78,0x00,};
  138. /*--  文字:  測(cè)  --*/
  139. /*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
  140. //0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,
  141. //0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00,

  142. /*--  文字:  試  --*/
  143. /*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
  144. //0x40,0x42,0xDC,0x08,0x00,0x90,0x90,0x90,0x90,0x90,0xFF,0x10,0x12,0x1C,0x10,0x00,
  145. //0x00,0x00,0x7F,0x20,0x10,0x20,0x20,0x1F,0x10,0x10,0x01,0x06,0x18,0x20,0x78,0x00,
  146. /*--  文字:  測(cè)  --*/
  147. /*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
  148. //0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,
  149. //0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00,

  150. /*--  文字:  試  --*/
  151. /*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
  152. //0x40,0x42,0xDC,0x08,0x00,0x90,0x90,0x90,0x90,0x90,0xFF,0x10,0x12,0x1C,0x10,0x00,
  153. //0x00,0x00,0x7F,0x20,0x10,0x20,0x20,0x1F,0x10,0x10,0x01,0x06,0x18,0x20,0x78,0x00,
  154. //};
  155. /*************************************************************************************************/
  156. /*--------------------------------------LCM寫(xiě)數(shù)據(jù)函數(shù)--------------------------------------------*/
  157. /*************************************************************************************************/

  158. void Write_Data(uchar dat)
  159. {
  160.     uchar i;
  161.     uchar z;
  162.     OLED_CS1= 0;
  163.         OLED_A0 = 1;
  164.         for(i=0;i<8;i++)
  165.         {
  166.                 OLED_SCL = 0;
  167.                 //OLED_SI = dat && 0x80;//取最高位
  168.                 OLED_SI=(dat&0x80)==0?0:1;
  169.                 z=OLED_SI;
  170.                 dat <<= 1;        //左移
  171.                 OLED_SCL = 1;
  172.         }
  173.         OLED_CS1= 1;     
  174. }

  175. /*************************************************************************************************/
  176. /*------------------------------------LCM寫(xiě)指令函數(shù)----------------------------------------------*/
  177. /*************************************************************************************************/
  178. void WriteCommand(uchar cmd)
  179. {
  180.         uchar i;
  181.         OLED_SCL = 1;
  182.         OLED_SCL = 0;
  183.         OLED_CS1= 0;
  184.         OLED_A0 = 0;
  185.         for(i=0;i<8;i++)
  186.         {
  187.                 OLED_SI = cmd && 0x80;//取最高位         
  188.                 OLED_SCL = 1;
  189.                 OLED_SCL = 0;
  190.                 cmd <<= 1;//左移
  191.         }
  192.         OLED_CS1= 1;      
  193. }

  194. /*************************************************************************************************/
  195. /*--------------------------------------LCM頁(yè)基址設(shè)置--------------------------------------------*/
  196. /*************************************************************************************************/
  197. void Set_Page_Address(uchar add)
  198. {
  199.     add=0xb0|add;
  200.     WriteCommand(add);
  201. }
  202. /*************************************************************************************************/
  203. /*--------------------------------------LCM寫(xiě)數(shù)據(jù)函數(shù)--------------------------------------------*/
  204. /*************************************************************************************************/
  205. void Set_Column_Address(uchar add)
  206. {
  207.     WriteCommand((0x10|(add>>4)));
  208.         WriteCommand((0x0f&add));
  209.         return;
  210. }

  211. /*************************************************************************************************/
  212. /*----------------------------------------LCM清屏函數(shù)--------------------------------------------*/
  213. /*************************************************************************************************/
  214. void LcmClear( void )
  215. {
  216.         uchar i,j;
  217.         WriteCommand(0x40);                           //Set Display Start Line = com0
  218.         for(i=0;i<8;i++)
  219.         {
  220.                 WriteCommand(0xB0|ComTable[i]);
  221.                 WriteCommand(0x10);                   //Set Column Address = 0
  222.                 WriteCommand(0x01);            //Colum from 1 -> 129 auto add
  223.                 for(j=0;j<132;j++)
  224.                 {
  225.                         Write_Data( 0 );       //寫(xiě)入0
  226.                 }
  227.         }
  228. }
  229. /**************************************************************************************************/
  230. /*----------------------------------------延時(shí)函數(shù)------------------------------------------------*/
  231. /**************************************************************************************************/
  232. void Delay(uint n)
  233. {
  234.     while(n--);
  235. }
  236. /**************************************************************************************************/
  237. /*----------------------------------------LCM電源控制項(xiàng)設(shè)定函數(shù)-----------------------------------*/
  238. /**************************************************************************************************/
  239. void Power_Control(uchar vol)
  240. {
  241.     WriteCommand((0x28|vol));
  242. }
  243. /**************************************************************************************************/
  244. /*----------------------------------------LCM偏置電壓函數(shù)-----------------------------------------*/
  245. /**************************************************************************************************/
  246. void Regulor_Resistor_Select(uchar r)
  247. {
  248.     WriteCommand((0x20|r));
  249. }
  250. /**************************************************************************************************/
  251. /*----------------------------------------LCM電量設(shè)置函數(shù)-----------------------------------------*/
  252. /**************************************************************************************************/
  253. void Set_Contrast_Control_Register(uchar mod)
  254. {
  255.     WriteCommand(0x81);
  256.         WriteCommand(mod);
  257. }
  258. /**************************************************************************************************/
  259. /*----------------------------------------顯示起始行定義函數(shù)--------------------------------------*/
  260. /**************************************************************************************************/
  261. void Initial_Dispay_Line(uchar line)
  262. {
  263.     line|=0x40;
  264.     WriteCommand(line);
  265.         return;
  266. }
  267. /**************************************************************************************************/
  268. /*----------------------------------------LCM初始化函數(shù)-------------------------------------------*/
  269. /**************************************************************************************************/
  270. void LcmInitial( void )
  271. {
  272.         RESET();
  273.         DISPLAY_OFF();
  274.         LcmClear();
  275.         Delay(1000);
  276.         OLED_CS1=1;
  277.     SET_ADC();                                     /*LCM顯示ADC設(shè)定,順?lè)较?*/
  278.     CLEAR_SHL();                                       /*LCM公共輸出模式選擇,順?lè)较?*/
  279.     SET_BIAS();                                        /*LCM顯示偏壓設(shè)定(取中間值) */
  280.     Power_Control(0x07);                        /*LCM電源控制項(xiàng)設(shè)定,這里全開(kāi) */
  281.     Regulor_Resistor_Select(0x04);              /*調(diào)整V0電阻比率,這里折中*/
  282.     Set_Contrast_Control_Register(0x28);          //NT7534綠0x28//ST7565藍(lán)0x0a
  283.         Initial_Dispay_Line(0x00);                 /*開(kāi)顯示*/
  284.         DISPLAY_ON();
  285. }
  286. /**************************************************************************************************/
  287. /*--------------------------------------LCM漢字顯示函數(shù)-------------------------------------------*/
  288. /**************************************************************************************************/
  289. void Display_Chinese(uchar ft[],uchar x,uchar y)        //字庫(kù)數(shù)組,起始行,起始列
  290. {
  291.         uchar i,j,k,num=0;
  292.         i=x;
  293.         for(i;i<x+2;i++)          //行
  294.         {
  295.                 num=i<<7;
  296.                 num=num>>3;
  297.                 Set_Page_Address(i);
  298.                 Set_Column_Address(y);//列地址
  299.                 for(j=0;j<0x02;j++)   //行字?jǐn)?shù)
  300.                 {
  301.                         for(k=0;k<0x10;k++)
  302.                         {
  303.                                 Write_Data(ft[num+k]);
  304.                         }
  305.                         num+=0x20;
  306.                 }
  307.         }
  308. }


  309. //------------------------------------------------------------------------------
  310. int main(void)
  311. {
  312.         //dat=0x55;
  313.         Write_Data(0x55);
  314.         uchar i=0;
  315.         initiate_SPI(); //SPI初始化
  316.         Max7219_init();        //LCD初始化
  317.         LcmInitial();        //OLED初始化
  318.         while(1)
  319.         {
  320.                 LcmClear();                                                //OLED清屏
  321.                 Delay(100);
  322.                 DISPLAY_ON();
  323.                 REVERSE_DISPLAY_OFF();
  324.                 Display_Chinese(font1,4,0);                //OLED顯示
  325.                 display(LCD_code);                                //LCD顯示
  326.         }
  327. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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