找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 17077|回复: 15
打印 上一主题 下一主题
收起左侧

51单片机的OLED显示程序

  [复制链接]
跳转到指定楼层
楼主
51的OLED显示

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>

  3. #define  u8 unsigned char
  4. #define  u32 unsigned int
  5. #define OLED_CMD  0        //写命令
  6. #define OLED_DATA 1        //写数据
  7. #define OLED_MODE 0

  8. #define OLED_CS_Clr()  OLED_CS=0
  9. #define OLED_CS_Set()  OLED_CS=1

  10. #define OLED_RST_Clr() OLED_RST=0
  11. #define OLED_RST_Set() OLED_RST=1

  12. #define OLED_DC_Clr() OLED_DC=0
  13. #define OLED_DC_Set() OLED_DC=1

  14. #define OLED_SCLK_Clr() OLED_SCL=0
  15. #define OLED_SCLK_Set() OLED_SCL=1

  16. #define OLED_SDIN_Clr() OLED_SDIN=0
  17. #define OLED_SDIN_Set() OLED_SDIN=1;

  18. #define SIZE 16
  19. #define XLevelL                0x02
  20. #define XLevelH                0x10
  21. #define Max_Column        128
  22. #define Max_Row                64
  23. #define        Brightness        0xFF
  24. #define X_WIDTH         128
  25. #define Y_WIDTH         64       

  26. sbit OLED_CS=P1^4; //片选
  27. sbit OLED_RST =P1^2;//复位
  28. sbit OLED_DC =P1^3;//数据/命令控制
  29. sbit OLED_SCL=P1^0;//时钟 D0(SCLK?
  30. sbit OLED_SDIN=P1^1;//D1(MOSI) 数据

  31. unsigned char code Hzk[][32]={

  32. {0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00},
  33. {0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00},/*"电",0*/

  34. {0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00},
  35. {0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x78,0x00},/*"机",1*/

  36. {0x00,0x08,0x30,0x00,0xFF,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x22,0x2C,0x20,0x00},
  37. {0x04,0x04,0x02,0x01,0xFF,0x80,0x40,0x30,0x0E,0x01,0x06,0x18,0x20,0x40,0x80,0x00},/*"状",2*/

  38. {0x00,0x04,0x84,0x84,0x44,0x24,0x54,0x8F,0x14,0x24,0x44,0x84,0x84,0x04,0x00,0x00},
  39. {0x41,0x39,0x00,0x00,0x3C,0x40,0x40,0x42,0x4C,0x40,0x40,0x70,0x04,0x09,0x31,0x00},/*"态",3*/

  40. {0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  41. {0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*":",4*/

  42. {0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,0x00},
  43. {0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00},/*"正",5*/

  44. {0xC8,0xB8,0x8F,0xE8,0x88,0x88,0x40,0x48,0x48,0xE8,0x5F,0x48,0x48,0x48,0x40,0x00},
  45. {0x08,0x18,0x08,0xFF,0x04,0x04,0x00,0x02,0x0B,0x12,0x22,0xD2,0x0A,0x06,0x00,0x00},/*"转",6*/

  46. {0x00,0x00,0xFC,0x24,0x24,0xE4,0x24,0x24,0x22,0x22,0x22,0xA3,0x62,0x00,0x00,0x00},
  47. {0x40,0x30,0x8F,0x80,0x40,0x40,0x23,0x14,0x08,0x14,0x22,0x41,0x40,0x80,0x80,0x00},/*"反",7*/

  48. };

  49. void delay_ms(unsigned int ms)
  50. {                        
  51.         unsigned int a;
  52.         while(ms)
  53.         {
  54.                 a=1800;
  55.                 while(a--);
  56.                 ms--;
  57.         }
  58.         return;
  59. }

  60. void OLED_WR_Byte(u8 dat,u8 cmd)
  61. {       
  62.         u8 i;                          
  63.         if(cmd)
  64.           OLED_DC_Set();
  65.         else
  66.           OLED_DC_Clr();                  
  67.         OLED_CS_Clr();
  68.         for(i=0;i<8;i++)
  69.         {                          
  70.                 OLED_SCLK_Clr();
  71.                 if(dat&0x80)
  72.                         {
  73.                    OLED_SDIN_Set();
  74.                         }
  75. else
  76.                    OLED_SDIN_Clr();
  77.                                 OLED_SCLK_Set();
  78.                 dat<<=1;   
  79.         }                                                   
  80.         OLED_CS_Set();
  81.         OLED_DC_Set();             
  82. }

  83. void OLED_Clear(void)  
  84. {  
  85.         u8 i,n;                    
  86.         for(i=0;i<8;i++)  
  87.         {  
  88.                 OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)
  89.                 OLED_WR_Byte (0x00,OLED_CMD);      //设置显示位置—列低地址
  90.                 OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址   
  91.                 for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
  92.         } //更新显示
  93. }

  94. void OLED_Set_Pos(unsigned char x, unsigned char y)
  95. {
  96.         OLED_WR_Byte(0xb0+y,OLED_CMD);
  97.         OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
  98.         OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);
  99. }   

  100. void OLED_ShowCHinese(u8 x,u8 y,u8 no)
  101. {                                  
  102.         u8 t,adder=0;
  103.         OLED_Set_Pos(x,y);       
  104.     for(t=0;t<16;t++)
  105.                 {
  106.                                 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
  107.                                 adder+=1;
  108.      }       
  109.                 OLED_Set_Pos(x,y+1);       
  110.     for(t=0;t<16;t++)
  111.                         {       
  112.                                 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
  113.                                 adder+=1;
  114.       }                                       
  115. }

  116. void OLED_Init(void)
  117. {
  118.     OLED_RST_Set();
  119.         delay_ms(100);
  120.         OLED_RST_Clr();
  121.         delay_ms(100);
  122.         OLED_RST_Set();
  123.         OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel
  124.         OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
  125.         OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
  126.         OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
  127.         OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register
  128.         OLED_WR_Byte(0xCF,OLED_CMD); // Set SEG Output Current Brightness
  129.         OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
  130.         OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
  131.         OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display
  132.         OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
  133.         OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty
  134.         OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset        Shift Mapping RAM Counter (0x00~0x3F)
  135.         OLED_WR_Byte(0x00,OLED_CMD);//-not offset
  136.         OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency
  137.         OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
  138.         OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period
  139.         OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
  140.         OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration
  141.         OLED_WR_Byte(0x12,OLED_CMD);
  142.         OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh
  143.         OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level
  144.         OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
  145.         OLED_WR_Byte(0x02,OLED_CMD);//
  146.         OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable
  147.         OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable
  148.         OLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5)
  149.         OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7)
  150.         OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
  151.        
  152.         OLED_WR_Byte(0xAF,OLED_CMD); /*display ON*/
  153.         OLED_Clear();
  154.         OLED_Set_Pos(0,0);        
  155. }

  156. void oled()
  157. {
  158.         OLED_ShowCHinese(0,3,0);//电
  159.         OLED_ShowCHinese(18,3,1);//机
  160.         OLED_ShowCHinese(36,3,2);//状
  161.         OLED_ShowCHinese(54,3,3);//态
  162.         OLED_ShowCHinese(72,3,4);//:
  163.         OLED_ShowCHinese(90,3,5);//:
  164.         OLED_ShowCHinese(108,3,6);//转
  165. }

  166. void oled1()
  167. {
  168.         OLED_ShowCHinese(0,4,0);//电
  169.         OLED_ShowCHinese(18,4,1);//机
  170.         OLED_ShowCHinese(36,4,2);//状
  171.         OLED_ShowCHinese(54,4,3);//态
  172.         OLED_ShowCHinese(72,4,4);//:
  173.         OLED_ShowCHinese(90,4,7);//:
  174.         OLED_ShowCHinese(108,4,6);//转
  175. }

  176. void main()
  177. {
  178.   OLED_Init();
  179.   OLED_Clear();
  180.   oled();
  181.   delay_ms(500);
  182.   OLED_Clear();
  183.   oled1();
  184.   while(1);
  185. }
复制代码

所有资料51hei提供下载:
oled显示.zip (26.32 KB, 下载次数: 253)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏9 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:470858 发表于 2019-1-24 23:26 | 只看该作者
太感谢啦!!!!!!!小白终于找到完整适用的代码了。。
回复

使用道具 举报

板凳
ID:470858 发表于 2019-1-24 23:27 | 只看该作者
太感谢啦!本小白终于找到完整的代码了。
回复

使用道具 举报

地板
ID:470858 发表于 2019-1-24 23:27 | 只看该作者
太感谢啦!这就是我要的完整代码耶。本小萌新亲测实用。
回复

使用道具 举报

5#
ID:348543 发表于 2019-4-2 08:36 | 只看该作者
刚好需要,拿来试试!
回复

使用道具 举报

6#
ID:526576 发表于 2019-5-3 22:14 | 只看该作者
好多函数不知道具体作用,,,
回复

使用道具 举报

7#
ID:526576 发表于 2019-5-5 21:02 | 只看该作者
四接口oled如何初始化呀,,,
回复

使用道具 举报

8#
ID:98195 发表于 2019-6-5 23:21 来自手机 | 只看该作者
void OLED_Set_Pos(unsigned char x, unsigned char y)  {          OLED_WR_Byte(0xb0+y,OLED_CMD);         OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);         OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);  }x代表什么啊   
回复

使用道具 举报

9#
ID:282650 发表于 2019-6-20 21:17 | 只看该作者
感谢这位朋友了!!!非常感谢
回复

使用道具 举报

10#
ID:648535 发表于 2019-11-28 09:48 | 只看该作者
多谢分享
回复

使用道具 举报

11#
ID:382699 发表于 2020-1-8 13:22 | 只看该作者
终于找到可以用的51程序了,找了几天
回复

使用道具 举报

12#
ID:692971 发表于 2020-2-13 21:47 | 只看该作者
能显示变量的具体数值吗
回复

使用道具 举报

13#
ID:294123 发表于 2020-2-15 22:43 | 只看该作者
我测试过,在我的proteus上可以运行,spi驱动模式的
回复

使用道具 举报

14#
ID:518223 发表于 2020-3-1 17:32 | 只看该作者
是咋连接的硬件。
回复

使用道具 举报

15#
ID:342822 发表于 2020-3-1 20:02 | 只看该作者
来个仿真:



回复

使用道具 举报

16#
ID:1089230 发表于 2023-7-21 16:19 | 只看该作者
explode 发表于 2020-2-13 21:47
能显示变量的具体数值吗

我也想问
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表