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

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

QQ登錄

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

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

atmega128單片機(jī) spi模式,OLED屏幕不亮

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:307782 發(fā)表于 2019-9-2 22:58 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
50黑幣
拜托幫忙看一下我的oled屏幕一直不亮,芯片是atmega128的  oled走的是spi模式,現(xiàn)在真的搞得頭暈,實(shí)在找不到原因?yàn)樯蹲硬涣痢R韵率莖led的代碼
  1. #include <iom128.h>
  2. #include <delay.h>
  3. #include <oledfont.h>

  4. //8位LED燈控制端口定義,連接在PE口,灌電流模式
  5. #define LED                    PORTE                                       //PE口接8個(gè)LED燈
  6. #define LEDDDR                DDRE                                                        //PE口方向寄存器
  7. #define  LED4_0              PORTE &= ~(1<<PE3)          //D4亮
  8. #define  LED4_1              PORTE |= (1<<PE3)           //D4滅

  9. #define  u8 unsigned char
  10. #define  u32 unsigned int
  11. #define OLED_CMD  0        //寫(xiě)命令
  12. #define OLED_DATA 1        //寫(xiě)數(shù)據(jù)

  13. #define OLED_RST_Clr() PORTE &= ~(1 << PE6)
  14. #define OLED_RST_Set() PORTE |= (1 << PE6)

  15. #define OLED_DC_Clr()  PORTE &= ~(1 << PE5)
  16. #define OLED_DC_Set()  PORTE |= (1 << PE5)

  17. #define OLED_SCLK_Clr() PORTB &= ~(1 << PB1)
  18. #define OLED_SCLK_Set() PORTB |= (1 << PB1)

  19. #define OLED_SDIN_Clr() PORTB &= ~(1 << PB2)
  20. #define OLED_SDIN_Set() PORTB |= (1 << PB2)

  21. #define SIZE 16
  22. #define XLevelL                0x02
  23. #define XLevelH                0x10
  24. #define Max_Column        128
  25. #define Max_Row                64
  26. #define        Brightness        0xFF
  27. #define X_WIDTH         128
  28. #define Y_WIDTH         64

  29. u8 OLED_GRAM[8][128];  //8頁(yè) 128列



  30. void OLED_WR_Byte(u8 dat,u8 cmd);
  31. void OLED_Set_Pos(unsigned char x, unsigned char y) ;
  32. void OLED_Set_Pos(unsigned char x, unsigned char y) ;
  33. void OLED_Display_On(void);
  34. void OLED_Display_Off(void);
  35. void OLED_Clear(void);
  36. void OLED_DrawPoint(u8 x,u8 y,u8 t);
  37. void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
  38. void OLED_ShowChar(u8 x,u8 y,u8 chr);
  39. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2);
  40. void OLED_ShowString(u8 x,u8 y, u8 *p);         
  41. void OLED_Set_Pos(unsigned char x, unsigned char y);
  42. void OLED_ShowCHinese(u8 x,u8 y,u8 no);
  43. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
  44. void OLED_Init(void);
  45. void system_init();



  46. void system_init()
  47. {

  48.   LEDDDR=0xff;    //設(shè)置PE口為輸出

  49.   LED=0xff;        //初始狀態(tài)為高,關(guān)閉8個(gè)LED燈

  50. }
  51. //向SSD1306寫(xiě)入一個(gè)字節(jié)單位
  52. //dat:要寫(xiě)入的數(shù)據(jù)/命令
  53. //cmd:數(shù)據(jù)/命令標(biāo)志  0命令  1數(shù)據(jù)
  54. void OLED_WR_Byte(u8 dat,u8 cmd)
  55. {
  56.   u8 i;                          
  57.   if(cmd)
  58.     OLED_DC_Set();
  59.   else
  60.     OLED_DC_Clr();                  
  61.   //OLED_CS_Clr();
  62.   for(i=0;i<8;i++)
  63.   {                          
  64.     OLED_SCLK_Clr();
  65.     if(dat&0x80)
  66.     {
  67.       OLED_SDIN_Set();
  68.     }
  69.     else  OLED_SDIN_Clr();
  70.     OLED_SCLK_Set();
  71.     dat<<=1;   
  72.   }                                                   
  73.   //OLED_CS_Set();
  74.   OLED_DC_Set();            
  75. }

  76. void OLED_Set_Pos(unsigned char x, unsigned char y) //坐標(biāo)位置
  77. {
  78.   OLED_WR_Byte(0xb0+y,OLED_CMD);//頁(yè)
  79.   OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);//高四位
  80.   OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD); //低四位
  81. }  


  82. //開(kāi)啟OLED顯示   
  83. void OLED_Display_On(void)
  84. {
  85.   OLED_WR_Byte(0X8D,OLED_CMD);  //電荷泵設(shè)置
  86.   OLED_WR_Byte(0X14,OLED_CMD);  //打開(kāi)電荷泵
  87.   OLED_WR_Byte(0XAF,OLED_CMD);  //開(kāi)啟顯示
  88. }
  89. //關(guān)閉OLED顯示   
  90. void OLED_Display_Off(void)
  91. {
  92.   OLED_WR_Byte(0X8D,OLED_CMD);
  93.   OLED_WR_Byte(0X10,OLED_CMD);//關(guān)  A2
  94.   OLED_WR_Byte(0XAE,OLED_CMD);
  95. }                                            
  96. //清屏函數(shù),清完屏,整個(gè)屏幕是黑色的!和沒(méi)點(diǎn)亮一樣!!!         
  97. void OLED_Clear(void)  
  98. {  
  99.   u8 i,n;                    
  100.   for(i=0;i<8;i++)  
  101.   {  
  102.     OLED_WR_Byte (0xb0+i,OLED_CMD);    //設(shè)置頁(yè)地址(0~7)
  103.     OLED_WR_Byte (0x00,OLED_CMD);      //設(shè)置顯示位置—列低地址
  104.     OLED_WR_Byte (0x10,OLED_CMD);      //設(shè)置顯示位置—列高地址   
  105.     for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
  106.   } //更新顯示
  107. }


  108. //在指定位置顯示一個(gè)字符,包括部分字符
  109. //x:0~127
  110. //y:0~63
  111. //mode:0,反白顯示;1,正常顯示                                 
  112. //size:選擇字體 16/12
  113. void OLED_ShowChar(u8 x,u8 y,u8 chr)
  114. {              
  115.   unsigned char c=0,i=0;        
  116.   c=chr-' ';//得到偏移后的值                        
  117.   if(x>Max_Column-1){x=0;y=y+2;}
  118.   if(SIZE ==16)
  119.   {
  120.   OLED_Set_Pos(x,y);        
  121.   for(i=0;i<8;i++)
  122.   OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
  123.   OLED_Set_Pos(x,y+1);
  124.   for(i=0;i<8;i++)
  125.   OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
  126.   }
  127.   else
  128.   {        
  129.     OLED_Set_Pos(x,y+1);
  130.     for(i=0;i<6;i++)
  131.     OLED_WR_Byte(F6x8[c][i],OLED_DATA);

  132.   }
  133. }
  134. //m^n函數(shù)
  135. u32 oled_pow(u8 m,u8 n)
  136. {
  137.   u32 result=1;         
  138.   while(n--)result*=m;   
  139.   return result;
  140. }                                 
  141. //顯示2個(gè)數(shù)字
  142. //x,y :起點(diǎn)坐標(biāo)         
  143. //len :數(shù)字的位數(shù)
  144. //size:字體大小
  145. //mode:模式        0,填充模式;1,疊加模式
  146. //num:數(shù)值(0~4294967295);                           
  147. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
  148. {                 
  149.   u8 t,temp;
  150.   u8 enshow=0;                                                   
  151.   for(t=0;t<len;t++)
  152.   {
  153.     temp=(num/oled_pow(10,len-t-1))%10;
  154.     if(enshow==0&&t<(len-1))
  155.     {
  156.       if(temp==0)
  157.       {
  158.         OLED_ShowChar(x+(size2/2)*t,y,' ');
  159.         //OLED_ShowChar(x+(size2/2)*t,y,' ',size2);//IIC程序中的
  160.         continue;
  161.       }else enshow=1;

  162.     }
  163.     OLED_ShowChar(x+(size2/2)*t,y,temp+'0');
  164.   }
  165. }
  166. //顯示一個(gè)字符號(hào)串
  167. void OLED_ShowString(u8 x,u8 y,u8 *chr)
  168. {
  169.   unsigned char j=0;
  170.   while (chr[j]!='\0')
  171.   {               
  172.   OLED_ShowChar(x,y,chr[j]);
  173.   x+=8;
  174.   if(x>120){x=0;y+=2;}
  175.   j++;
  176.   }
  177. }
  178. //顯示漢字
  179. void OLED_ShowCHinese(u8 x,u8 y,u8 no)
  180. {                                 
  181.   u8 t,adder=0;
  182.   OLED_Set_Pos(x,y);        
  183.   for(t=0;t<16;t++)
  184.   {
  185.     OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
  186.     adder+=1;
  187.    }        
  188.    OLED_Set_Pos(x,y+1);        
  189.    for(t=0;t<16;t++)
  190.     {        
  191.       OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
  192.       adder+=1;
  193.     }                                       
  194. }
  195. /***********功能描述:顯示顯示BMP圖片128×64起始點(diǎn)坐標(biāo)(x,y),x的范圍0~127,y為頁(yè)的范圍0~7*****************/
  196. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
  197. {         
  198. unsigned int j=0;
  199. unsigned char x,y;

  200.   if(y1%8==0) y=y1/8;      
  201.   else y=y1/8+1;
  202.   for(y=y0;y<y1;y++)
  203.   {
  204.     OLED_Set_Pos(x0,y);
  205.     for(x=x0;x<x1;x++)
  206.     {      
  207.       OLED_WR_Byte(BMP[j++],OLED_DATA);                    
  208.     }
  209.   }
  210. }


  211. //初始化SSD1306                                            
  212. void OLED_Init(void)
  213. {
  214. //OLED_CS_Set();
  215.   OLED_RST_Set();
  216.   delay_ms(100);
  217.   OLED_RST_Clr();
  218.   delay_ms(100);
  219.   OLED_RST_Set();
  220.   OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel
  221.   OLED_WR_Byte(0x00,OLED_CMD);//---set low column address低列地址
  222.   OLED_WR_Byte(0x10,OLED_CMD);//---set high column address高列地址
  223.   OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)起始行地址
  224.   OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register對(duì)比度
  225.   OLED_WR_Byte(0xCF,OLED_CMD); // Set SEG Output Current Brightness對(duì)比度/亮度值
  226.   OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
  227.   OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
  228.   OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display A6:正常/A7:反相
  229.   OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)驅(qū)動(dòng)路數(shù)
  230.   OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty驅(qū)動(dòng)路數(shù)值
  231.   OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset        Shift Mapping RAM Counter (0x00~0x3F)設(shè)置顯示偏移
  232.   OLED_WR_Byte(0x00,OLED_CMD);//-not offset設(shè)置顯示偏移值
  233.   OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency 設(shè)置時(shí)鐘分頻因子,震蕩頻率
  234.   OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
  235.   OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period設(shè)置預(yù)充電周期
  236.   OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
  237.   OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration設(shè)置COM硬件引腳配置
  238.   OLED_WR_Byte(0x12,OLED_CMD);
  239.   OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh設(shè)置VCOMH倍率
  240.   //OLED_WR_Byte(0x30,OLED_CMD);//Set VCOM Deselect Level
  241.   OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level
  242.   OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)設(shè)置內(nèi)存地址模式
  243.   OLED_WR_Byte(0x02,OLED_CMD);//[1:0],00,列地址模式;01,行地址模式;10,頁(yè)地址模式;默認(rèn)10;
  244.   OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable電荷泵設(shè)置///////////手冊(cè)上沒(méi)找到
  245.   OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disablebit2,開(kāi)啟/關(guān)閉
  246.   OLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5)全局顯示開(kāi)啟;bit0:1,開(kāi)啟;0,關(guān)閉;(白屏/黑屏)
  247.   OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7) 設(shè)置顯示方式;bit0:1,反相顯示;0,正常顯示
  248.   OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel開(kāi)啟顯示         

  249.   OLED_WR_Byte(0xAF,OLED_CMD); /*display ON*/
  250.   OLED_Clear();
  251.         //OLED_Set_Pos(0,0);         
  252. }   


  253. int main(void)
  254. {
  255.   u8 t;
  256.   system_init();
  257.   OLED_Init();
  258.   OLED_Clear();
  259. //  OLED_ShowString(30,0,"OLED TEST");
  260. //  OLED_ShowString(8,2,"ZHONGJINGYUAN");  
  261. //  OLED_ShowString(20,4,"2014/05/01");  
  262. //  OLED_ShowString(0,6,"ASCII:");  
  263. //  OLED_ShowString(63,6,"CODE:");  
  264. //  t=' ';



  265.   while(1)
  266.     {        
  267.       LED = 0xFF;
  268.       PORTE &= ~(1<<PE3);
  269.       OLED_Clear();
  270.       OLED_ShowCHinese(0,0,0);//中
  271.       OLED_ShowCHinese(18,0,1);//景
  272.       OLED_ShowCHinese(36,0,2);//園
  273.       OLED_ShowCHinese(54,0,3);//電
  274.       OLED_ShowCHinese(72,0,4);//子
  275.       OLED_ShowCHinese(90,0,5);//科
  276.       OLED_ShowCHinese(108,0,6);//技
  277.      }

  278. }
復(fù)制代碼




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

使用道具 舉報(bào)

沙發(fā)
ID:307782 發(fā)表于 2019-9-4 18:09 | 只看該作者
更貼,,,,犯了一個(gè)超級(jí)超級(jí)低級(jí)的錯(cuò)誤。。。。。。。。。。沒(méi)有初始化io,真是都不想講自己了
回復(fù)

使用道具 舉報(bào)

板凳
ID:592135 發(fā)表于 2019-9-11 17:08 | 只看該作者
樓主F8X16[]數(shù)組 的內(nèi)容是什么呀 可以發(fā)給我嗎?
回復(fù)

使用道具 舉報(bào)

地板
ID:894664 發(fā)表于 2021-3-21 16:41 來(lái)自手機(jī) | 只看該作者
請(qǐng)問(wèn)一下IO口在哪里初始化
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品极品美女在线观看免费 | 欧美中文字幕一区 | 在线免费观看毛片 | 亚洲福利网站 | 精品国产欧美 | 亚洲性爰 | 色综合久久久 | 久久高清精品 | 青青激情网 | 国产在线网站 | 91夜色在线观看 | 午夜视频一区二区 | 欧美久久久久久久 | 国产一区二区黑人欧美xxxx | 国产精品国产a | 中文字幕亚洲一区二区三区 | 亚洲一区二区三区免费观看 | 亚洲午夜视频 | 国产精品a久久久久 | 欧美在线视频免费 | 国产精品久久久久久久久婷婷 | 人操人人 | 亚洲狠狠爱一区二区三区 | 欧美一区二区在线看 | 久久久毛片 | 欧美综合国产精品久久丁香 | 日韩免费一区 | 久久久久久久久久久高潮一区二区 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | www.日本在线播放 | 精品在线一区二区 | 国产亚洲日本精品 | 亚洲国产成人精品久久久国产成人一区 | 日本淫视频 | 亚洲欧美日韩精品久久亚洲区 | 日韩中文字幕一区二区 | 国产日批 | 国产综合av | 国产一区二| 亚洲成人免费 | 狠狠久久 |