前两个月淘宝瞎买买,买个DS3231,查资料知道是个高精度芯片,官方数据说年误差2分钟。难怪以前1302才用一个月就发现时间不对,对晶振要求高。
然后就是找资料,套公式一样的移植,让我看时序图啥的自己写,还不如直接杀了我。
资料找了好久,关于3231的很少,找了好久终于找了个理想的资料。
然后先是在MAX7219数码管上移植用,遥控啥的都挺好,然后没事干瞎逛逛淘宝,看到OLED挺便宜的,而且小巧,所以入手了一块。
接着问题又来了。买oled送的资料是静态显示的,不会动态的,所以再找资料,可是既然找不到,没办法,只能花钱淘宝买资料。
整个淘宝既然只有区区三四家卖,而且还是DS1302的,界面也简单,最后随便买了一家,在各种移植,最后再根据自己需要修改。
现在开源给大家,给大家参考学习用。
另外很不明白,3231和1302价格也差不了多少,3231也早就有了,怎么都没什么人用,资料很少。
很鄙视在论坛上只传图片不传资料的人,这是论坛,学习交流用的,不是装逼用的。要装逼去淘宝。
各位装逼的误喷,实话实说。
对了,由于3231资料少,手头只有没有闹钟的资料,上次在本论坛找到的一个有闹钟的资料还是有问题的,只有闹钟2响,1没反应的,所以闹钟就不移植了。想试试的可以论坛找找,1602显示的。如果找出毛病了记得说下哦,相互学习。
OLED 原理图:
红外遥控接收头 接 P3.3
DS3231 SDA 接 P0.0
DS3231 SCL 接 P0.1
OLED12864 SCL 接 P1.3
OLED12864 SCL 接 P1.3
可根据具体需要自行更改
部分源码预览:
- /*****************************************************************************************************
- ********************************************头文件、宏定义********************************************
- *****************************************************************************************************/
- #include <reg52.h> //oled_12864_IIC连接+DS3231时钟模块+红外遥控和按键+STC90C516RD+
- #include <intrins.h> //年 月 日 时 分 秒 星期 温度显示 温度来源DS3231,64S刷新一次
- #define uint unsigned int //年误差+- 2min
- #define uchar unsigned char
- /*****************************************************************************************************
- **********************************************按键定义************************************************
- *****************************************************************************************************/
- sbit key1=P0^4; //设置
- sbit key2=P0^5; //加
- sbit key3=P0^6; //减
- sbit key4=P0^7; //确定
- sbit laba=P3^7; //喇叭
- /*****************************************************************************************************
- ********************************************红外遥控定义**********************************************
- *****************************************************************************************************/
- #define Imax 14000//此处为晶振为11.0592时的取值, //时间计算 //红外接口P3.3
- #define Imin 8000 //如用其它频率的晶振时,
- #define Inum1 1450//要改变相应的取值。
- #define Inum3 3000
- #define Inum2 700
- uchar f;
- uchar IrOK;
- unsigned long m,Tc;
- uchar Im[4]={0x00,0x00,0x00,0x00};
- /*****************************************************************************************************
- *******************************************DS3231变量定义*********************************************
- *****************************************************************************************************/
- sbit DS3231_IIC_SDA=P0^0;
- sbit DS3231_IIC_SCL=P0^1;
- uchar RTC_Data[8];
- uchar RTC_Data1[8];
- uchar RTC_Set_ID;
- code uchar rtc_address[8]={0x00,0x01,0x02,0x04,0x05,0x03,0x06,0x11};//秒分时日月周年 最低位读写位
- /*****************************************************************************************************
- *******************************************OLED12864定义**********************************************
- *****************************************************************************************************/
- sbit oled_SCL=P1^3; //串行时钟
- sbit oled_SDA=P1^2; //串行数据
- uchar display_buff[16]; //时间显示数组
- /*****************************************************************************************************
- *********************************************变量定义*************************************************
- *****************************************************************************************************/
- bit T0_Flag; //定时器T01ms标志位
- bit laba_flag; //蜂鸣器标志位
- bit Open_Flag; //蜂鸣器标志位
- bit RTC_Save_Flag; //设置时间标志位
- bit shezhi_display_flag;
- void delayms(uint x); //延时函数
- void display1(); //显示函数
- void display2();
- void OLED_12864_Write_commomand(uint dat); //命令
- void OLED_12864_Write_data(uint dat); //数据
- void OLED_12864_Init(); //初始化
- void OLED_Fill(uchar bmp_dat); //屏幕填充
- void OLED_SetPos(uchar x, uchar y); //起始坐标
- void OLED_8x16Str(uchar x, uchar y, uchar ch); //8*16的点阵
- void OLED_16x16CN(uchar x, uchar y, uchar N); //16*16的点阵
- void OLED_16x32(uchar x, uchar y, uchar ch);
- void Time_Fun(); //时基、走时函数
- void DS3231_Read_time(); //读取时间
- void DS3231_write_time(); //写入时间
- void KeyDataProcess(); //键值处理函数
- void DS3231_Init(); //时间模块初始化
- /*****************************************************************************************************
- ******************************************OLED12864点阵数组*******************************************
- *****************************************************************************************************/
- uchar code F16x16[]=
- {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"不显示",0
-
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"一",1
-
- 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
- 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,//"二",2
-
- 0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,//"三",3
- 0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
- 0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00,//"四",4
- 0x00,0x02,0x42,0x42,0x42,0xC2,0x7E,0x42,0x42,0x42,0x42,0xC2,0x02,0x02,0x00,0x00,
- 0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00,//"五",5
- 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x2C,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
- 0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x01,0x02,0x04,0x18,0x60,0x00,0x00,//"六",6
- ……………由于篇幅有限…余下源码请下载附件……
复制代码
全部资料下载:
OLED_12864万年历IIC(大字体 温度 遥控).rar
(5.61 MB, 下载次数: 1072)
|