找回密码
 立即注册
搜索
0赞
赞赏
手机版
扫码打开手机版
把文字装进口袋

基于51单片机的OLED显示图片文字

六翼天使494 2022-8-3 11:18:08
目录
        一、前言
        二、OLED模块介绍
        1、液晶显示
        2、0.95OLED模块
        三、硬件连接
        四、软件代码
        五、效果展示
        六、代码链接
        一、前言

        从性能来说OLED屏幕分辨率相对较高,引脚也少很多,占用的I/O口会少很多。从功耗来说首先oled显示屏不需要背光灯,当有电流通过时,这些有机材料就可以发光,而且3.3V~5V之间都可以使用。从外观来说体型更小,重量更轻更薄,可用来制作许多小型显示设备。这次我使用的是四个引脚的0.95寸oled显示屏,进行文字图片的循环显示。
        二、OLED模块介绍

        1、液晶显示屏

        液晶显示器,为平面超薄的显示设备,它由一定数量的彩色或黑白像素组成,放置于光源或者反射面前方。液晶显示器功耗很低,因此倍受工程师青睐,适用于使用电池电子设备。它的主要原理是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。
        液晶显示器的工作原理:液晶是一种介于固体和液体之间的特殊物质,它是一种有机化合物,常态下呈液态,但是它的分子排列却和固体晶体一样非常规则,因此取名液晶,它的另一个特殊性质在于,如果给液晶施加一个电场,会改变它的分子排列,这时如果给它配合偏振光片,它就具有阻止光线通过的作用(在不施加电场时,光线可以顺利透过),如果再配合彩色滤光片,改变加给液晶电压大小,就能改变某一颜色透光量的多少,也可以形象地说改变液晶两端的电压就能改变它的透光度(但实际中这必须和偏光板配合)。
        2、0.95OLED模块

        特点:OLED显示屏是利用有机电致发光二极管制成的显示屏。由于同时具备有机电自发光二极管,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
        中国OLED产业前景非常广阔,业内企业也正在努力积累发展经验,但国内产业链上游环节薄弱,行业的配套能力欠缺等因素为广大厂商制造了比较大的发展障碍。
        相关资料
        oled电路原理图
        oled行列位置
        三、硬件连接

        1、实物图
        VCC:接5V
        GND:接地
        SCL:IIC时钟线(我接的P2^0)
        SDA:IIC数据线(我接的P2^1)
        2、取模软件
        四、软件代码

        main主函数
        进行一些宏定义,对各种函数的调用。
  1. void main()`       
  2. {
  3.         OLED_Init();                       
  4.         OLED_ColorTurn(0);        //0正常显示,1反色显示`       
  5.         OLED_DisplayTurn(0);//0正常显示,1屏幕反转显示`       
  6.         while(1)
  7.         {
  8.     OLED_DrawBMP(0,4,25,24,BMP4);        //生成图像         
  9.         OLED_DrawBMP(25,4,25,24,BMP4);
  10.         OLED_DrawBMP(50,4,25,24,BMP4);
  11.         OLED_DrawBMP(75,4,25,24,BMP4);
  12.         OLED_DrawBMP(100,4,25,24,BMP4);                         
  13.         OLED_ShowChinese(0,1,0,16);                //生成文字         
  14.         OLED_ShowChinese(27,1,1,16);                  
  15.         OLED_ShowChinese(54,1,2,16);
  16.         OLED_ShowChinese(81,1,3,16);
  17.         OLED_ShowChinese(111,1,4,16);
  18.                                                                                   
  19.         delay_ms(200);                                                  
  20.     OLED_Clear();
  21.         OLED_ShowChinese(0,0,5,16);
  22.         OLED_ShowChinese(17,0,6,16);
  23.         OLED_ShowString(33,0,":",16);                  //显示字符串
  24.         OLED_ShowChinese(51,0,7,16);
  25.         OLED_ShowChinese(67,0,8,16);
  26.         OLED_ShowChinese(83,0,9,16);
  27.         OLED_ShowNum(10,2,16286,5,16);                //显示数字
  28.     OLED_ShowNum(50,2,30070,5,16);                //显示数字
  29.         delay_ms(50);                                                  
  30.         OLED_Clear();                                                                  
  31. }
  32. }       
复制代码
oled.c
  1. void delay_ms(unsigned int ms)
  2. {                        
  3.         unsigned int a;
  4.         while(ms)
  5.         {
  6.                 a=1800;
  7.                 while(a--);
  8.                 ms--;
  9.         }
  10.         return;
  11. }
  12. //反色显示函数
  13. void OLED_ColorTurn(u8 i)
  14. {
  15.         if(i==0)
  16.                 {
  17.                         OLED_WR_Byte(0xA6,OLED_CMD);
  18.                 }
  19.         if(i==1)
  20.                 {
  21.                         OLED_WR_Byte(0xA7,OLED_CMD);
  22.                 }
  23. }
  24.   //屏幕旋转180度
  25. void OLED_DisplayTurn(u8 i)
  26. {
  27.         if(i==0)
  28.                 {
  29.                         OLED_WR_Byte(0xC8,OLED_CMD);
  30.                         OLED_WR_Byte(0xA1,OLED_CMD);
  31.                 }
  32.         if(i==1)
  33.                 {
  34.                         OLED_WR_Byte(0xC0,OLED_CMD);
  35.                         OLED_WR_Byte(0xA0,OLED_CMD);
  36.                 }
  37. }
  38. //延时
  39. void IIC_delay(void)
  40. {
  41.         u8 t=1;
  42.         while(t--);
  43. }
  44. //起始信号
  45. void I2C_Start(void)
  46. //结束信号
  47. void I2C_Stop(void)
  48. //等待信号响应
  49. void I2C_WaitAck(void)
  50. void Send_Byte(u8 dat) //写入一个字节
  51. void OLED_WR_Byte(u8 dat,u8 mode)
  52. {
  53.         I2C_Start();
  54.         Send_Byte(0x78);
  55.         I2C_WaitAck();
  56.         if(mode){Send_Byte(0x40);}
  57.   else{Send_Byte(0x00);}
  58.         I2C_WaitAck();
  59.         Send_Byte(dat);
  60.         I2C_WaitAck();
  61.         I2C_Stop();
  62. }
  63. void OLED_Set_Pos(u8 x, u8 y) //坐标设置
  64. {
  65.         OLED_WR_Byte(0xb0+y,OLED_CMD);
  66.         OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
  67.         OLED_WR_Byte((x&0x0f),OLED_CMD);
  68. }     
  69. /***void OLED_Display_On(void)        //开启OLED显示
  70. {
  71.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC?üá?
  72.         OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON
  73.         OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON
  74. }
  75. **/   
  76. /****void OLED_Display_Off(void)   //关闭OLED显示
  77. {
  78.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC?üá?
  79.         OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF
  80.         OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF
  81. }
  82. ****/
  83. void OLED_Clear(void)             //清屏函数
  84. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 sizey)
  85. {             
  86.         u8 c=0,sizex=sizey/2;
  87.         u32 i=0,size1;
  88.         if(sizey==8)size1=6;
  89.         else size1=(sizey/8+((sizey%8)?1:0))*(sizey/2);
  90.         c=chr-' ';  
  91.         OLED_Set_Pos(x,y);
  92.         for(i=0;i;i++)>
复制代码
oledWENZI.h
  1. #ifndef __OLEDFONT_H
  2. #define __OLEDFONT_H        
  3. //中文字
  4. unsigned char code Hzk[][33]=
  5. /************************************6*8点阵显示字符************************************/
  6. unsigned char code asc2_0806[][6] =
  7. //16*16 ASCII字符集点阵
  8. unsigned char code asc2_1608[][16]=
复制代码
oledTUPIAN.h
  1. #ifndef __BMP_H
  2. #define __BMP_H
  3. /******************************************************************
  4.                                                         图片
  5. *******************************************************************/
  6. unsigned char code BMP1[] =
  7. unsigned char code BMP2[] =
  8. unsigned char code BMP3[] =
  9. unsigned char code BMP4[] =
  10. #endif
复制代码
        五、效果展示

        实物演示链接         https://live.csdn.net/v/211086
        六、代码链接

        关注公众号“小小创客者”回复“OLED”获得代码,回复“取模软件”获取取模软件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

使用道具 举报

您需要登录后才可以回帖 立即登录
期待中......
2022-8-4 13:31:51
看帖子的要发表下看法
2022-8-5 15:45:33
太赞了
2022-8-7 00:33:44
2022-8-7 14:00:41
谢谢楼主的辛苦分享
2022-8-8 12:14:31
学习一下!十分感谢
2022-8-9 10:28:21
不错不错 支持下
2022-8-10 17:35:50
支持你们一下下哈
2022-8-12 00:43:18
感谢您的无私精神...
2022-8-14 08:19:01
12345下一页
返回顶部