前兩個月淘寶瞎買買,買個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)
2017-2-18 09:55 上傳
點擊文件名下載附件
|