查看: 2951|回复: 5

[原创] LPC8N04开发板的OLED屏显示

[复制链接]
  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7092
    最后登录
    2023-4-20
    发表于 2018-7-30 19:08:45 | 显示全部楼层 |阅读模式
        在LPC8N04开发板上,由于其采用5*7 LED阵列为显示器件,故将GPIO口已全部占用,且一些引脚还处于复用状态。如何才能以较少的引脚占用来实现显示功能并节省出可贵的GPIO资源呢?
        采用I2C接口的OLED屏为显示器件就是一个较好的方案,除电源外,它只需使用2GPIO口。为了避免在调试过程中反复地借助JlinkOB来恢复下载功能,特回避对P0.10P0.11的使用,而以P0.6 P0.8来连接OLED屏的SCLSDA
    定义引脚输出高低电平的语句为:
    #defineOLED_SCLK_Clr() Chip_GPIO_SetPinState(LPC_GPIO,0,6,0);  
    #defineOLED_SCLK_Set()  Chip_GPIO_SetPinState(LPC_GPIO,0,6,1);
    #defineOLED_SDIN_Clr() Chip_GPIO_SetPinState(LPC_GPIO,0,8,0);
    #defineOLED_SDIN_Set() Chip_GPIO_SetPinState(LPC_GPIO,0,8,1);
    模拟I2C接口进行通讯的函数如下:
    1. void IIC_Start()
    2. {
    3.         OLED_SCLK_Set();
    4.         OLED_SDIN_Set();
    5.         OLED_SDIN_Clr();
    6.         OLED_SCLK_Clr();
    7. }
    8. void IIC_Stop()
    9. {
    10.         OLED_SCLK_Set();
    11.         OLED_SDIN_Clr();
    12.         OLED_SDIN_Set();
    13. }

    14. void IIC_Wait_Ack()
    15. {
    16.         OLED_SCLK_Set() ;
    17.         OLED_SCLK_Clr();
    18. }
    复制代码

    发送指令和数据函数如下:
    1. void Write_IIC_Command(unsigned char IIC_Command)
    2. {
    3.    IIC_Start();
    4.    Write_IIC_Byte(0x78);     
    5.    IIC_Wait_Ack();      
    6.    Write_IIC_Byte(0x00);                       
    7.    IIC_Wait_Ack();      
    8.    Write_IIC_Byte(IIC_Command);
    9.    IIC_Wait_Ack();      
    10.    IIC_Stop();
    11. }

    12. void Write_IIC_Data(unsigned char IIC_Data)
    13. {
    14.    IIC_Start();
    15.    Write_IIC_Byte(0x78);                       
    16.    IIC_Wait_Ack();      
    17.    Write_IIC_Byte(0x40);                       
    18.    IIC_Wait_Ack();      
    19.    Write_IIC_Byte(IIC_Data);
    20.    IIC_Wait_Ack();      
    21.    IIC_Stop();
    22. }
    复制代码

    显示字符的函数为:
    1. void OLED_ShowChar(unsigned char x,unsigned char y,unsigned char chr,unsigned char Char_Size)
    2. {            
    3.         unsigned char c=0,i=0;      
    4.         c=chr-' ';               
    5.         if(x>Max_Column-1){x=0;y=y+2;}
    6.         if(Char_Size ==16)
    7.         {
    8.                  OLED_Set_Pos(x,y);      
    9.                  for(i=0;i<8;i++)
    10.                  OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
    11.                  OLED_Set_Pos(x,y+1);
    12.                  for(i=0;i<8;i++)
    13.                  OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
    14.         }
    15.         else
    16.         {      
    17.                  OLED_Set_Pos(x,y);
    18.                  for(i=0;i<6;i++)
    19.                  OLED_WR_Byte(F6x8[c][i],OLED_DATA);
    20.         }
    21. }
    复制代码

    实现OLED 屏显示效果的主函数如下:
    1. int main(void)
    2. {
    3.   Chip_GPIO_SetPortDIR(LPC_GPIO,0,(Bit(2)|Bit(6) Bit(8)),1);
    4.   Chip_Clock_Peripheral_EnableClock(CLOCK_PERIPHERAL_GPIO);
    5.   LPC_GPIO->DIR=Bit(2)|Bit(6) |Bit(8);
    6.   Chip_GPIO_Init(LPC_GPIO);
    7.   Chip_GPIO_SetPinState(LPC_GPIO,0,2,1);   
    8.   Chip_GPIO_SetPinState(LPC_GPIO,0,6,0);   
    9.   Chip_GPIO_SetPinState(LPC_GPIO,0,8,1);

    10.   OLED_Init();
    11.   OLED_Clear();
    12.   OLED_ShowString(22,0,"LPC8N04 TEST",16);
    13.   OLED_ShowString(22,2,"Jinglixixi",16);
    14.   OLED_ShowString(22,6,"2018.7.20",16);
    15.   while(1);
    16. }
    复制代码
          若用OLED屏的显示函数替代原5*7LED阵列显示程序,则可以单屏显示更多的信息,且有效地节省出更多的GPIO口供程序开发所需。此外,使用OLED屏也便于和纽扣电池相搭配。
    snap.jpg
    OLED屏显示效果

    评分

    参与人数 1 +3 收起 理由
    NXP管管 + 3

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情

    2019-9-17 13:22
  • 签到天数: 238 天

    [LV.7]常住居民III

    30

    主题

    905

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    2237
    最后登录
    2022-6-30
    发表于 2018-7-31 08:24:31 | 显示全部楼层
    支持下~~~~
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-9-15 08:42
  • 签到天数: 1952 天

    [LV.Master]伴坛终老

    1

    主题

    4686

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9405
    最后登录
    2023-9-15
    发表于 2018-7-31 09:26:39 | 显示全部楼层
    不错,支持!
    今天天气不错!签到!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 822 天

    [LV.10]以坛为家III

    71

    主题

    2448

    帖子

    24

    金牌会员

    Rank: 6Rank: 6

    积分
    5525
    最后登录
    2024-4-29
    发表于 2018-7-31 11:06:52 | 显示全部楼层
    谢谢分享
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-1-23 09:58
  • 签到天数: 25 天

    [LV.4]偶尔看看III

    6

    主题

    51

    帖子

    2

    注册会员

    Rank: 2

    积分
    164
    最后登录
    2021-5-8
    发表于 2018-9-11 10:36:33 | 显示全部楼层
    请问楼主,用 NFC 天线电量采集能点亮 OLED 吗?
    今天天气不错!签到!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    0

    新手上路

    Rank: 1

    积分
    21
    最后登录
    2019-5-1
    发表于 2018-10-13 10:41:35 | 显示全部楼层
    楼楼能够发一下完整的程序吗,新手真的不太会改   
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-29 20:53 , Processed in 0.175373 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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