找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3745|回复: 1
收起左侧

基于MSP430F5529的OLED驱动程序

[复制链接]
ID:617067 发表于 2020-7-15 17:25 | 显示全部楼层 |阅读模式
压缩包中代码

单片机源程序如下:
  1. /*
  2. * OLED_IIC.c
  3. *
  4. *  Created on: 2020年7月15日
  5. *      Author: 13293
  6. */
  7. #include "OLED_IIC.h"
  8. #include "stdlib.h"
  9. #include "OLED_FONT.h"
  10. #include <msp430.h>
  11. //OLED延时功能
  12. void delayms(uint x)
  13. {
  14.     uint i,j;
  15.     for(i=x;i>0;i--)
  16.         for(j=110;j>0;j--);
  17. }
  18. //IIC开始
  19. void oled_IIC_Start()
  20. {
  21.    oled_SCL_1;
  22.    oled_SDA_1;
  23.    oled_SDA_0;
  24.    oled_SCL_0;
  25. }
  26. //IIC停止
  27. void oled_IIC_Stop()
  28. {
  29.    oled_SCL_0;
  30.    oled_SDA_0;
  31.    oled_SCL_1;
  32.    oled_SDA_1;
  33. }
  34. //IIC写字节
  35. void oled_Write_IIC_Byte(uchar IIC_Byte)
  36. {
  37.     uchar i;
  38.     for(i=0;i<8;i++)
  39.     {
  40.         if(IIC_Byte & 0x80)
  41.             oled_SDA_1;
  42.         else
  43.         oled_SDA_0;
  44.         oled_SCL_1;
  45.         oled_SCL_0;
  46.         IIC_Byte<<=1;
  47.     }
  48.     oled_SDA_1;
  49.     oled_SCL_1;
  50.     oled_SCL_0;
  51. }
  52. //IIC写入数据
  53. void OLED_12864_Write_data(uint dat)
  54. {
  55.     oled_IIC_Start();
  56.     oled_Write_IIC_Byte(0x78);
  57.     oled_Write_IIC_Byte(0x40);
  58.     oled_Write_IIC_Byte(dat);
  59.     oled_IIC_Stop();
  60. }
  61. //IIC写入命令
  62. void OLED_12864_Write_commomand(uint dat)
  63. {
  64.     oled_IIC_Start();
  65.     oled_Write_IIC_Byte(0x78);
  66.     oled_Write_IIC_Byte(0x00);
  67.     oled_Write_IIC_Byte(dat);
  68.     oled_IIC_Stop();
  69. }
  70. //OLED设置起始坐标
  71. void OLED_SetPos(uchar x, uchar y)
  72. {
  73.     OLED_12864_Write_commomand(0xb0+y);
  74.     OLED_12864_Write_commomand(((x&0xf0)>>4)|0x10);
  75.     OLED_12864_Write_commomand((x&0x0f)|0x01);
  76. }
  77. //IIC OLED屏幕填充
  78. void OLED_Fill(uchar bmp_dat)
  79. {
  80.     uchar y,x;
  81.     for(y=0;y<8;y++)
  82.     {
  83.         OLED_12864_Write_commomand(0xb0+y);
  84.         OLED_12864_Write_commomand(0x01);
  85.         OLED_12864_Write_commomand(0x10);
  86.         for(x=0;x<128;x++)
  87.         OLED_12864_Write_data(bmp_dat);
  88.     }
  89. }
  90. //OLED12864初始化
  91. void OLED_12864_Init()
  92. {
  93.     oled_IO_init;
  94.     delayms(500);                       //初始化之前的延时很重要!
  95.     OLED_12864_Write_commomand(0xae);
  96.     OLED_12864_Write_commomand(0x00);
  97.     OLED_12864_Write_commomand(0x10);
  98.     OLED_12864_Write_commomand(0x40);
  99.     OLED_12864_Write_commomand(0x81);
  100.     OLED_12864_Write_commomand(0xFF);//设置OLED亮度
  101.     OLED_12864_Write_commomand(0xa1);
  102.     OLED_12864_Write_commomand(0xc8);
  103.     OLED_12864_Write_commomand(0xa6);
  104.     OLED_12864_Write_commomand(0xa8);
  105.     OLED_12864_Write_commomand(0x3f);
  106.     OLED_12864_Write_commomand(0xd3);
  107.     OLED_12864_Write_commomand(0x00);
  108.     OLED_12864_Write_commomand(0xd5);
  109.     OLED_12864_Write_commomand(0x80);
  110.     OLED_12864_Write_commomand(0xd9);
  111.     OLED_12864_Write_commomand(0xf1);
  112.     OLED_12864_Write_commomand(0xda);
  113.     OLED_12864_Write_commomand(0x12);
  114.     OLED_12864_Write_commomand(0xdb);
  115.     OLED_12864_Write_commomand(0x40);
  116.     OLED_12864_Write_commomand(0x20);
  117.     OLED_12864_Write_commomand(0x02);
  118.     OLED_12864_Write_commomand(0x8d);
  119.     OLED_12864_Write_commomand(0x14);
  120.     OLED_12864_Write_commomand(0xa4);
  121.     OLED_12864_Write_commomand(0xa6);
  122.     OLED_12864_Write_commomand(0xaf);
  123.     OLED_Fill(0x00);                    //清屏
  124.     OLED_SetPos(0,0);
  125. }
  126. //IIC OLED显示单个字符
  127. void OLED_8x16Str(uchar x, uchar y, uchar ch)
  128. {
  129.     uchar i=0;
  130.     if(x>120)
  131.     {
  132.         x=0;y++;
  133.     }
  134.     OLED_SetPos(x,y);
  135.     for(i=0;i<8;i++)
  136.     {
  137.         OLED_12864_Write_data(F8X16[ch*16+i]);
  138.     }
  139.     OLED_SetPos(x,y+1);
  140.     for(i=0;i<8;i++)
  141.     {
  142.         OLED_12864_Write_data(F8X16[ch*16+i+8]);
  143.     }
  144. }
  145. //IIC OLED显示字符串
  146. void OLED_ShowStr(uchar x, uchar y, uchar ch[])
  147. {
  148.     uchar c = 0,i = 0,j = 0;
  149.     //'\0'位字符串结束标志
  150.     while(ch[j] != '\0')
  151.     {
  152.         c = ch[j] - 32;
  153.         if(x > 120)
  154.         {
  155.             x = 0;
  156.             y++;
  157.         }
  158.         OLED_SetPos(x,y);
  159.         for(i=0;i<8;i++)
  160.             OLED_12864_Write_data(F8X16[c*16+i]);
  161.         OLED_SetPos(x,y+1);
  162.         for(i=0;i<8;i++)
  163.             OLED_12864_Write_data(F8X16[c*16+i+8]);
  164.         x += 8;
  165.         j++;
  166.     }
  167. }

  168. //显示16*32的坐标(x,y),y为页范围0~7---分四部分
  169. void OLED_16x32(uchar x, uchar y, uchar ch)
  170. {
  171.     uchar i=0;
  172.     if(x>120)
  173.     {
  174.         x=0;y++;
  175.     }
  176.     OLED_SetPos(x,y);
  177.     for(i=0;i<16;i++)
  178.     {
  179.         OLED_12864_Write_data(F16X32[ch*64+i]);
  180.     }
  181.     OLED_SetPos(x,y+1);
  182. ……………………

  183. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
OLED.rar (4.3 KB, 下载次数: 126)
回复

使用道具 举报

ID:822806 发表于 2020-9-24 14:37 | 显示全部楼层
这个oled是所有oled都适用嘛
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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