查看: 4461|回复: 2

【Curie Nano】驱动OLED+RTC

[复制链接]
  • TA的每日心情
    奋斗
    2023-6-27 14:09
  • 签到天数: 943 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2017-5-17 22:34:04 | 显示全部楼层 |阅读模式
    分享到:
           拿到Curie Nano有一段时间了,感觉Curie Nano简直太棒啦。一直忙于毕业的事,发的帖子确实有点少。开始正事之前先说说自己使用的体会。之前自己买过arduino mini Pro是arduino入门的开始,当时只是感觉arduino入门还是比较简单的,适合编程基础有限的人使用,有点小瞧arduino。后来在B站上才知道arduino在很多高端领域的应用。在爱板网有幸使用过Fireduino,Curie Nano给我的感觉就像当时用Fireduino很惊喜,只不过两者各有千秋。前面开箱时巴拉巴拉扯啦一堆Curie Nano参数。真正开始使用时才体会到Curie Nano的强大。
           最近想给Curie Nano加个液晶屏,就把之前在fireduino上写的程序拿过来,没有改动就可以运行。Curie Nano自带RTC功能,可以加个时间显示,这样就是一个简单的电子表,可是Curie Nano有六轴陀螺仪加速度传感器和BLE,也就是说可以把Curie Nano做成智能手环而且不需要再添加其他模块。
           这次的帖子只是简单的驱动OLED,外加时间显示,如果加上六轴传感器可以做一个有趣的闹钟,翻转就可以取消响铃。
    1. #include "Wire.h"
    2. #include <CurieTime.h>
    3. #include "oledfont.h"
    4. #define OLED_ADDRESS  (0x78>>1) //通过调整0R电阻,屏可以0x78和0x7A两个地址 -- 默认0x78

    5. void setup() {
    6.   Serial.begin(9600);
    7.   delay(100);
    8.   pinMode(13, OUTPUT);
    9. digitalWrite(13,HIGH);
    10.   Serial.println("setup");  
    11.   Wire.begin();  //初始化I2C
    12.   delay(100);
    13.   OLED_Init();
    14.   setTime(22, 30, 00, 17, 5, 2017);
    15. }

    16. void loop() {
    17. char tab[]={"CURIE NANO"};
    18. char nowtime[10]={};
    19. OLED_ClearScr();
    20. //LCD_P6x8Str(0,0,tab);
    21. //LCD_P6x8Str(0,1,tab);
    22. LCD_P8x16Str(0,0,tab);
    23. while(1)
    24. {
    25.   nowtime[0]=hour()/10+'0';
    26.   nowtime[1]=hour()%10+'0';
    27.   nowtime[2]=':';
    28.   nowtime[3]=minute()/10+'0';
    29.   nowtime[4]=minute()%10+'0';
    30.   nowtime[5]=':';
    31.   nowtime[6]=second()/10+'0';
    32.   nowtime[7]=second()%10+'0';
    33.   nowtime[8]='\0'';
    34.   digitalWrite(13,HIGH);
    35.   LCD_P8x16Str(0,2,nowtime);
    36. //  delay(1000);
    37. //  digitalWrite(13,LOW);
    38. //  delay(1000);
    39.   }

    40. }
    41. //写命令函数
    42. void WriteCmd(unsigned char I2C_Command)//写命令
    43. {
    44.   I2C_WriteByte(0x00, I2C_Command);
    45. }
    46. //写数据函数
    47. void WriteDat(unsigned char I2C_Data)//写数据
    48. {
    49.   I2C_WriteByte(0x40, I2C_Data);
    50. }
    51. //写一个字节
    52. void I2C_WriteByte(uint8_t addr,uint8_t data)
    53. {
    54.   Wire.beginTransmission(OLED_ADDRESS);
    55.   Wire.write(addr);
    56.   Wire.write(data);
    57.   Wire.endTransmission();
    58. }
    59. //oled初始化
    60. void OLED_Init(void)
    61. {
    62.    WriteCmd(0xAE ); //关闭显示
    63.    WriteCmd(0xD5 ); //设置时钟分频因子,震荡频率
    64.    WriteCmd(0x80 );   //[3:0],分频因子;[7:4],震荡频率
    65.    WriteCmd(0xA8 ); //设置驱动路数
    66.    WriteCmd(0x1f );
    67.    WriteCmd(0X3F ); //默认0X3F(1/64)
    68.    WriteCmd(0xD3 ); //设置显示偏移
    69.    WriteCmd(0X00 ); //默认为0

    70.    WriteCmd(0x40 ); //设置显示开始行 [5:0],行数.
    71.                               
    72.    WriteCmd(0x8D ); //电荷泵设置
    73.    WriteCmd(0x14 ); //bit2,开启/关闭
    74.    
    75.    WriteCmd(0x20 ); //设置内存地址模式
    76.    WriteCmd(0x02 ); //[1:0],00,列地址模式;01,行地址模式;10,页地址模式;默认10;
    77.    
    78.    WriteCmd(0xA1 ); //段重定义设置,bit0:0,0->0;1,0->127;
    79.    
    80.    WriteCmd(0xC0 ); //设置COM扫描方向;bit3:0,普通模式;1,重定义模式 COM[N-1]->COM0;N:驱动路数
    81.    
    82.    WriteCmd(0xDA ); //设置COM硬件引脚配置   这部分在一开始出现问题  2016.07.10
    83.    WriteCmd(0x00 ); //[5:4]配置
    84.      
    85.    WriteCmd(0x81 ); //对比度设置
    86.    WriteCmd(0xff ); //1~255;默认0X7F (亮度设置,越大越亮)
    87.    
    88.    WriteCmd(0xa1);
    89.     WriteCmd(0xc8);
    90.    
    91.    WriteCmd(0xD9 ); //设置预充电周期
    92.    WriteCmd(0xf1 ); //[3:0],PHASE 1;[7:4],PHASE 2;
    93.    WriteCmd(0xDB ); //设置VCOMH 电压倍率
    94.    WriteCmd(0x30 ); //[6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;

    95.    WriteCmd(0xA4 ); //全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)
    96.    WriteCmd(0xA6 ); //设置显示方式;bit0:1,反相显示;0,正常显示                    
    97.    WriteCmd(0xAF ); //开启显示   
    98.    
    99. }
    100. //清屏
    101. void OLED_ClearScr(void)
    102. {
    103.   uint8_t i,n;      
    104.   for(i=0;i<4;i++)  
    105.   {  
    106.     WriteCmd(0xb0+i);    //设置页地址(0~7)
    107.     WriteCmd(0x00);      //设置显示位置—列低地址
    108.     WriteCmd(0x10);      //设置显示位置—列高地址   
    109.     for(n=0;n<128;n++) WriteDat(0x00);
    110.   }   
    111. }
    112. void LCD_Set_Pos(unsigned char x, unsigned char y)
    113. {
    114.     WriteCmd(0xb0+y);
    115.     WriteCmd(((x&0xf0)>>4)|0x10);
    116.     WriteCmd(x&0x0f);
    117. }
    118. void LCD_P6x8Str(unsigned char x,unsigned char y,char ch[])
    119. {
    120.     char c=0,i=0,j=0;
    121.     while (ch[j]!='\0')
    122.      {
    123.        c =ch[j]-32;
    124.        if(x>128){x=0;y+=2;}
    125.        LCD_Set_Pos(x,y);   
    126.        for(i=0;i<6;i++)     
    127.        WriteDat( F6x8[c][i]);
    128.        x+=8;
    129.        j++;
    130.      }
    131. }
    132. void LCD_P8x16Str(unsigned char x,unsigned char y,char ch[])
    133. {
    134.     char c=0,i=0,j=0;
    135.     while (ch[j]!='\0')
    136.      {
    137.        c =ch[j]-32;
    138.        if(x>128){x=0;y+=2;}
    139.        LCD_Set_Pos(x,y);   
    140.        for(i=0;i<8;i++)     
    141.        WriteDat( F8X16[c][i]);

    142.        LCD_Set_Pos(x,y+1);   
    143.        for(i=0;i<8;i++)     
    144.        WriteDat( F8X16[c][i+8]);

    145.       
    146.        x+=8;
    147.        j++;
    148.      }
    149. }



    复制代码
    IMG_20170517_221350.jpg

    IMG_20170517_221421.jpg


    Curie.zip

    4.47 KB, 下载次数: 11

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-3 21:23
  • 签到天数: 2449 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2017-5-18 09:54:32 | 显示全部楼层
    赞一个。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2017-5-18 16:32:39 | 显示全部楼层
    加上六轴传感器可以做一个有趣的闹钟,翻转就可以取消响铃。期待,赞!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 09:32 , Processed in 0.128840 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.