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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1828|回復: 9
打印 上一主題 下一主題
收起左側

求教單片機這個錯“(209) type conflict”怎么發生的?怎么解決?謝謝

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



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

使用道具 舉報

沙發
ID:277550 發表于 2021-11-3 13:43 | 只看該作者
檢查:  數據類型 uchar 定義過了嗎
回復

使用道具 舉報

板凳
ID:313048 發表于 2021-11-3 13:51 | 只看該作者
你這個ComTable是個數組,你的writeCommand這個寫命令后面的括號內不應該是(0XB0|ComTable[i])?
回復

使用道具 舉報

地板
ID:967119 發表于 2021-11-3 13:58 | 只看該作者
devcang 發表于 2021-11-3 13:43
檢查:  數據類型 uchar 定義過了嗎

定義過。
回復

使用道具 舉報

5#
ID:967119 發表于 2021-11-3 13:59 | 只看該作者
AUG 發表于 2021-11-3 13:51
你這個ComTable是個數組,你的writeCommand這個寫命令后面的括號內不應該是(0XB0|ComTable)?

哦,我看看。 網上51的,準備移植到PIC。
回復

使用道具 舉報

6#
ID:967119 發表于 2021-11-3 14:28 | 只看該作者
AUG 發表于 2021-11-3 13:51
你這個ComTable是個數組,你的writeCommand這個寫命令后面的括號內不應該是(0XB0|ComTable)?

對,照你的改后不報錯了。謝謝!
又有下面這個錯,請指教下:

回復

使用道具 舉報

7#
ID:967119 發表于 2021-11-3 14:32 | 只看該作者
本帖最后由 cczjw 于 2021-11-3 14:37 編輯
AUG 發表于 2021-11-3 13:51
你這個ComTable是個數組,你的writeCommand這個寫命令后面的括號內不應該是(0XB0|ComTable)?

對,照你的改后不報錯了。謝謝!又有下面這個錯,請指教下:


若去掉ROM就是這個錯:



回復

使用道具 舉報

8#
ID:453974 發表于 2021-11-3 21:53 | 只看該作者
源程序發進來吧
回復

使用道具 舉報

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

源程序發進來吧


1、下面這個錯查出原因應該是RAM放不下6個漢字。只留2個漢字就不報錯了。但為什么不能用上一句  "uchar rom font[]=" 把字庫放 ROM 呢(會報錯)?


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

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

使用道具 舉報

10#
ID:967119 發表于 2021-11-4 17:08 | 只看該作者
  1. /*******************************************************************************
  2. 文件名:mainSPI_oled12864_max7210-3.c
  3. 單片機型號:        PICl6F877A
  4. 晶振頻率:        4MHz
  5. 功能:                OLED 與使用MAX7219串行驅動8位共陰極LED數碼管同顯
  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時鐘SCK
  13. #define SPISCK                        RC3                        //SPI時鐘SCK
  14. #define SPIMISO_DIR         TRISC4                 //SPI數據輸入SDI
  15. #define SPIMISO                        RC4                 //SPI數據輸入SDI
  16. #define SPIMOSI_DIR                TRISC5                 //SPI數據輸出SDO
  17. #define SPIMOSI                        RC5                        //SPI數據輸出SDO
  18. #define SPISS_DIR                TRISC1                //SPI片選SS
  19. #define SPISS                         RC1                 //SPI片選SS

  20. //#define OLED_RST_DIR         TRISC2                 //OLED復位
  21. //#define OLED_RST                RC2                 //OLED復位

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

  26. #define RES_DIR         TRISC2                 //OLED復位
  27. #define RES                        RC2                 //OLED復位

  28. #define        OLED_SCL         SPISCK                //RC3-同步時鐘輸入端
  29. #define        OLED_SI         SPIMOSI                //RC5-串行數據輸入、輸出端
  30. #define        OLED_A0         SPIMISO                //RC4-選擇命令還是數據
  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碼方式數字0~9時,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為自動控制,本行可省略
  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;                                //時鐘閑置為低電平
  50.         CKE=1;                                 //為上升沿發送數據        *//
  51.         SMP=0;                                //在輸出中間采樣輸入        *//
  52.         SSPM3=0; SSPM2=0;        //Fosc/16
  53.         SSPM1=0; SSPM1=1;
  54.         SSPIF=0;
  55.         SSPIE= 0;                        //關中斷
  56.         SSPEN=1;                        //SPI使能
  57. }
  58.         
  59. void SPItransfer(uchar data)         //SPI數據傳輸
  60. {
  61.         WCOL=0;                                //清發送沖突標志位
  62.         SSPIF=0;                        //清標志位
  63.         SSPBUF=data;                //發送數據
  64.         while(!SSPIF);                 //等待發送完畢
  65.         SSPIF=0;                         //*** 清標志位,本行可省略
  66. }


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

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

  84. void display(uchar * p) //數碼管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顯示開關設定*/
  99. #define DISPLAY_ON()           WriteCommand(0xaf)   // Display on, 顯示開
  100. #define DISPLAY_OFF()          WriteCommand(0xae)   // Display off,顯示關

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

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

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

  110. /*LCM顯示偏壓設定 */
  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復位 */
  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 順方向->從左到右顯示

  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. /*--  文字:  測  --*/
  131. /*--  宋體12;  此字體下對應的點陣為:寬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;  此字體下對應的點陣為:寬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. /*--  文字:  測  --*/
  139. /*--  宋體12;  此字體下對應的點陣為:寬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;  此字體下對應的點陣為:寬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. /*--  文字:  測  --*/
  147. /*--  宋體12;  此字體下對應的點陣為:寬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;  此字體下對應的點陣為:寬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寫數據函數--------------------------------------------*/
  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寫指令函數----------------------------------------------*/
  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頁基址設置--------------------------------------------*/
  196. /*************************************************************************************************/
  197. void Set_Page_Address(uchar add)
  198. {
  199.     add=0xb0|add;
  200.     WriteCommand(add);
  201. }
  202. /*************************************************************************************************/
  203. /*--------------------------------------LCM寫數據函數--------------------------------------------*/
  204. /*************************************************************************************************/
  205. void Set_Column_Address(uchar add)
  206. {
  207.     WriteCommand((0x10|(add>>4)));
  208.         WriteCommand((0x0f&add));
  209.         return;
  210. }

  211. /*************************************************************************************************/
  212. /*----------------------------------------LCM清屏函數--------------------------------------------*/
  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 );       //寫入0
  226.                 }
  227.         }
  228. }
  229. /**************************************************************************************************/
  230. /*----------------------------------------延時函數------------------------------------------------*/
  231. /**************************************************************************************************/
  232. void Delay(uint n)
  233. {
  234.     while(n--);
  235. }
  236. /**************************************************************************************************/
  237. /*----------------------------------------LCM電源控制項設定函數-----------------------------------*/
  238. /**************************************************************************************************/
  239. void Power_Control(uchar vol)
  240. {
  241.     WriteCommand((0x28|vol));
  242. }
  243. /**************************************************************************************************/
  244. /*----------------------------------------LCM偏置電壓函數-----------------------------------------*/
  245. /**************************************************************************************************/
  246. void Regulor_Resistor_Select(uchar r)
  247. {
  248.     WriteCommand((0x20|r));
  249. }
  250. /**************************************************************************************************/
  251. /*----------------------------------------LCM電量設置函數-----------------------------------------*/
  252. /**************************************************************************************************/
  253. void Set_Contrast_Control_Register(uchar mod)
  254. {
  255.     WriteCommand(0x81);
  256.         WriteCommand(mod);
  257. }
  258. /**************************************************************************************************/
  259. /*----------------------------------------顯示起始行定義函數--------------------------------------*/
  260. /**************************************************************************************************/
  261. void Initial_Dispay_Line(uchar line)
  262. {
  263.     line|=0x40;
  264.     WriteCommand(line);
  265.         return;
  266. }
  267. /**************************************************************************************************/
  268. /*----------------------------------------LCM初始化函數-------------------------------------------*/
  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設定,順方向 */
  278.     CLEAR_SHL();                                       /*LCM公共輸出模式選擇,順方向 */
  279.     SET_BIAS();                                        /*LCM顯示偏壓設定(取中間值) */
  280.     Power_Control(0x07);                        /*LCM電源控制項設定,這里全開 */
  281.     Regulor_Resistor_Select(0x04);              /*調整V0電阻比率,這里折中*/
  282.     Set_Contrast_Control_Register(0x28);          //NT7534綠0x28//ST7565藍0x0a
  283.         Initial_Dispay_Line(0x00);                 /*開顯示*/
  284.         DISPLAY_ON();
  285. }
  286. /**************************************************************************************************/
  287. /*--------------------------------------LCM漢字顯示函數-------------------------------------------*/
  288. /**************************************************************************************************/
  289. void Display_Chinese(uchar ft[],uchar x,uchar y)        //字庫數組,起始行,起始列
  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++)   //行字數
  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. }
復制代碼
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品视频久久久 | 亚洲欧美日韩精品久久亚洲区 | 色网在线看 | 精品久久一区 | 日韩视频在线一区 | 日本欧美在线视频 | 欧美网站一区二区 | 欧美成人免费在线 | 国产精品福利在线观看 | 国产在线麻豆精品入口 | 日韩精品无码一区二区三区 | 成人毛片一区二区三区 | 日本三级电影免费观看 | 欧美综合久久 | 久久久久久久久久久蜜桃 | 国产99久久精品一区二区永久免费 | 夏同学福利网 | 日韩精品一区二区三区在线观看 | 中文字幕第十一页 | 色综合久久天天综合网 | a久久久久久| 亚洲黄色在线免费观看 | 国产www在线| 电影91久久久 | 久久精品欧美视频 | 97超在线视频 | 国产在线www | 亚洲精品久久久久久久不卡四虎 | 久久久久国产一区二区三区 | 国产色婷婷精品综合在线播放 | 免费观看一级毛片 | 国产成人精品免高潮在线观看 | 伊人精品久久久久77777 | 欧美精品啪啪 | 一级黄色片毛片 | 人人叉| av网站在线播放 | 中文字幕亚洲一区二区va在线 | 在线观看视频一区二区三区 | 久久青草av | 免费在线成人 |