欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4185|回復: 2
打印 上一主題 下一主題
收起左側

STC5616AD+oled_12864 IIC屏幕DS3231紅外遙控時鐘

[復制鏈接]
跳轉到指定樓層
樓主
QQ1137035271喜歡的頂一下


單片機源程序如下:
  1. /*****************************************************************************************************
  2. ********************************************頭文件、宏定義********************************************
  3. *****************************************************************************************************/
  4. #include <reg52.h>                //oled_12864_IIC連接+DS3231時鐘模塊+紅外遙控和按鍵+STC90C516RD+
  5. #include <intrins.h>                //年 月 日 時 分 秒 星期 溫度顯示  溫度來源DS3231,64S刷新一次
  6. #define uint unsigned int        //年誤差+- 2min
  7. #define uchar unsigned char
  8. /*****************************************************************************************************
  9. **********************************************按鍵定義************************************************
  10. *****************************************************************************************************/

  11. /*****************************************************************************************************
  12. ********************************************紅外遙控定義**********************************************
  13. *****************************************************************************************************/

  14. uchar f;
  15. uchar IrOK;
  16. unsigned long m,Tc;
  17. uchar Im[4]={0x00,0x00,0x00,0x00};
  18. /*****************************************************************************************************
  19. *******************************************DS3231變量定義*********************************************
  20. *****************************************************************************************************/
  21. sbit DS3231_IIC_SDA=P1^0;
  22. sbit DS3231_IIC_SCL=P1^1;
  23. uchar RTC_Data[8];
  24. uchar RTC_Data1[8];
  25. uchar RTC_Set_ID;
  26. code uchar rtc_address[8]={0x00,0x01,0x02,0x04,0x05,0x03,0x06,0x11};//秒分時日月周年 最低位讀寫位
  27. /*****************************************************************************************************
  28. *******************************************OLED12864定義**********************************************
  29. *****************************************************************************************************/
  30. sbit oled_SCL=P1^5;                                                                  //串行時鐘
  31. sbit oled_SDA=P1^6;                                                                 //串行數據
  32. uchar display_buff[16];                                                         //時間顯示數組
  33. /*****************************************************************************************************
  34. *********************************************變量定義*************************************************
  35. *****************************************************************************************************/
  36. bit T0_Flag;                                                                         //定時器T01ms標志位
  37. bit laba_flag;                                                                         //蜂鳴器標志位
  38. bit Open_Flag;                                                                         //蜂鳴器標志位
  39. bit RTC_Save_Flag;                                                                   //設置時間標志位
  40. bit shezhi_display_flag;

  41. void delayms(uint x);                                                         //延時函數
  42. void display1();                                                                 //顯示函數
  43. void display2();
  44. void OLED_12864_Write_commomand(uint dat);                 //命令
  45. void OLED_12864_Write_data(uint dat);                         //數據
  46. void OLED_12864_Init();                                                         //初始化
  47. void OLED_Fill(uchar bmp_dat);                                         //屏幕填充
  48. void OLED_SetPos(uchar x, uchar y);                                 //起始坐標
  49. void OLED_8x16Str(uchar x, uchar y, uchar ch);         //8*16的點陣
  50. void OLED_16x16CN(uchar x, uchar y, uchar N);         //16*16的點陣
  51. void OLED_16x32(uchar x, uchar y, uchar ch);

  52. void Time_Fun();                                                                 //時基、走時函數
  53. void DS3231_Read_time();                                                 //讀取時間
  54. void DS3231_write_time();                                                 //寫入時間
  55. void KeyDataProcess();                                                         //鍵值處理函數
  56. void DS3231_Init();                                                                 //時間模塊初始化
  57. /*****************************************************************************************************
  58. ******************************************OLED12864點陣數組*******************************************
  59. *****************************************************************************************************/
  60. uchar code F16x16[]=
  61. {
  62. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  63. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"不顯示",0
  64.                                                                                                                                                                         
  65. 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
  66. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"一",1
  67.         
  68. 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
  69. 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,//"二",2
  70.         
  71. …………
  72. …………限于本文篇幅 余下代碼請從51黑下載附件…………

  73. 0x10,0x92,0x54,0x38,0xFF,0x38,0x54,0x52,0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x00,
  74. 0x42,0x42,0x2A,0x2E,0x13,0x1A,0x26,0x02,0x40,0x20,0x13,0x0C,0x33,0x60,0x20,0x00,//數,22
  75.                                                                                                                                                                
  76. };
  77. uchar code F8X16[]=
  78. {
  79. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 0
  80. …………
  81. …………限于本文篇幅 余下代碼請從51黑下載附件…………
  82. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  83. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  84. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  85. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//不顯示,21
  86. };
  87. /*****************************************************************************************************
  88. ********************************************初始化時間************************************************
  89. *****************************************************************************************************/
  90. void Ram_init()
  91. {
  92.         DS3231_Read_time();                                //讀取 秒分時日月周年
  93.         if((!RTC_Data[6])&&(!RTC_Data[5])&&(!RTC_Data[4])&&(!RTC_Data[3])&&(!RTC_Data[2])&&(!RTC_Data[1])&&(!RTC_Data[0]))
  94.         {
  95.                 RTC_Data[0]=0;       //秒                              //秒分時日月周年 最低位讀寫位
  96.                 RTC_Data[1]=0;                 //分
  97.                 RTC_Data[2]=12;                 //時
  98.                 RTC_Data[3]=3;                 //日
  99.                 RTC_Data[4]=11;                 //月
  100.                 RTC_Data[5]=2;                 //周
  101.                 RTC_Data[6]=15;                 //年
  102.                 DS3231_write_time();                    //寫入 秒分時日月周年
  103.         }
  104.         RTC_Set_ID=0;        
  105. }
  106. /*****************************************************************************************************
  107. ************************************************主函數************************************************
  108. *****************************************************************************************************/
  109. void main()
  110. {
  111.         EA=1;                                        //開總中斷
  112.         IT1=1;                                                //下降沿有效
  113.         EX1=1;                                                //外部中斷開
  114.         ET1=1;                                                //打開允許開關

  115.         TMOD=0x11;                                   //定時/計數器 工作于方式1
  116.         TH1=0xff;                                        //50ms定時常數
  117.         TL1=256-131;                                 
  118.         TR1=1;                                       //啟動定時/計數器 中斷

  119.         TH0=0;                                                //賦初值
  120.         TL0=0;
  121.         TR0=1;                                                //開始計時
  122.         shezhi_display_flag=0;

  123.         delayms(10);
  124.         OLED_12864_Init();        
  125.         delayms(10);        
  126.         display1();                                        //顯示
  127.         display2();                                        //顯示
  128.         Ram_init();                                        //初始化時間
  129.         DS3231_Init();                                //模塊初始化
  130.         laba=0;        
  131.         while(1)
  132.         {               
  133.                 if(T0_Flag)
  134.                 {
  135.                         T0_Flag=0;
  136.                         Time_Fun();
  137.                 }
  138.         }
  139. }
  140. /*****************************************************************************************************
  141. *********************************************時基、走時函數*******************************************
  142. *****************************************************************************************************/
  143. void Time_Fun()
  144. {
  145.         static        uchar T10Ms_Cnt=0,T200Ms_Cnt=0;
  146.         static uchar Buzz_On_Cnt=0,RTC_Save_Cnt=0;        
  147.         
  148.         T10Ms_Cnt++;        
  149.         if(T10Ms_Cnt>=5)
  150.         {
  151.                 T10Ms_Cnt=0;
  152.                 KeyDataProcess();
  153.                 if(laba_flag)
  154.                 {
  155.                         Buzz_On_Cnt++;
  156.                         if(Buzz_On_Cnt>=10)
  157.                         {
  158.                                 laba_flag=0;
  159.                                 Buzz_On_Cnt=0;
  160.                         }
  161.                 }        
  162.                 if(RTC_Save_Flag)
  163.                 {
  164.                         RTC_Save_Cnt++;
  165.                         if(RTC_Save_Cnt>=50)
  166.                         {
  167.                                 RTC_Save_Cnt=0;
  168.                                 RTC_Save_Flag=0;
  169.                                 RTC_Set_ID=0;
  170.                                 DS3231_write_time();
  171.                         }
  172.                 }
  173.         }
  174.         T200Ms_Cnt++;
  175.         if(T200Ms_Cnt>=100&&shezhi_display_flag==0)
  176.         {
  177.                 T200Ms_Cnt=0;               
  178.                 if(!RTC_Set_ID)
  179.                         DS3231_Read_time();
  180.                 display1();
  181.                 display2();
  182.         }
  183. }
  184. /*****************************************************************************************************
  185. ***********************************************鍵值處理***********************************************
  186. *****************************************************************************************************/
  187. void KeyDataProcess()        //10mS處理一次
  188. {        //按鍵操作部分
  189.         if(key1==0)
  190.         {
  191.                 delayms(10);
  192.                 if(key1==0)
  193.                 {
  194.                         while(!key1);
  195.                         laba_flag=1; //蜂鳴器響一聲
  196.                         shezhi_display_flag=1;
  197.                         RTC_Set_ID++;
  198.                         if(RTC_Set_ID>=8)
  199.                                 RTC_Set_ID=1;
  200.                         Open_Flag=1;

  201.                         display1();
  202.                         if(RTC_Set_ID==1)
  203.                         {
  204.                                 OLED_Fill(0x00);
  205.                                 OLED_16x16CN(32, 0, 16);//年
  206.                                 OLED_16x16CN(48, 0, 18);//份
  207.                                 OLED_16x16CN(64, 0, 14);//設
  208.                                 OLED_16x16CN(80, 0, 15);//置
  209.                                 OLED_16x32(0, 2, display_buff[2]);//年
  210.                                 OLED_16x32(16, 2, display_buff[3]);
  211.                                 OLED_16x32(32, 2, 11);//-
  212.                                 OLED_16x32(48, 2, display_buff[4]);//月
  213.                                 OLED_16x32(64, 2, display_buff[5]);
  214.                                 OLED_16x32(80, 2, 11);//-
  215.                                 OLED_16x32(96, 2, display_buff[6]);//日
  216.                                 OLED_16x32(112, 2, display_buff[7]);        
  217.                         }
  218.                         else if(RTC_Set_ID==2)
  219.                         {
  220.                                 OLED_16x16CN(32, 0, 17);//月
  221.                                 OLED_16x16CN(48, 0, 18);//份
  222.                                 OLED_16x16CN(64, 0, 14);//設
  223.                                 OLED_16x16CN(80, 0, 15);//置
  224.                         }
  225.                         else if(RTC_Set_ID==3)
  226.                         {
  227.                                 OLED_16x16CN(32, 0, 11);//日
  228.                                 OLED_16x16CN(48, 0, 9);//期
  229.                                 OLED_16x16CN(64, 0, 14);//設
  230.                                 OLED_16x16CN(80, 0, 15);//置
  231.                         }
  232.                         else if(RTC_Set_ID==4)
  233.                         {
  234.                                 OLED_16x16CN(32, 0, 13);//小
  235.                                 OLED_16x16CN(48, 0, 12);//時
  236.                                 OLED_16x16CN(64, 0, 14);//設
  237.                                 OLED_16x16CN(80, 0, 15);//置
  238.                                 OLED_16x32(0, 2, display_buff[8]);//時
  239.                                 OLED_16x32(16, 2, display_buff[9]);
  240.                                 OLED_16x32(32, 2, 10);//:
  241.                                 OLED_16x32(48, 2, display_buff[10]);//分
  242.                                 OLED_16x32(64, 2, display_buff[11]);
  243.                                 OLED_16x32(80, 2, 10);//:
  244.                                 OLED_16x32(96, 2, display_buff[12]);//秒
  245.                                 OLED_16x32(112, 2, display_buff[13]);
  246.                         }
  247.                         else if(RTC_Set_ID==5)
  248.                         {
  249.                                 OLED_16x16CN(32, 0, 19);//分
  250.                                 OLED_16x16CN(48, 0, 20);//鐘
  251.                                 OLED_16x16CN(64, 0, 14);//設
  252.                                 OLED_16x16CN(80, 0, 15);//置
  253.                         }
  254.                         else if(RTC_Set_ID==6)
  255.                         {
  256.                                 OLED_16x16CN(32, 0, 21);//秒
  257.                                 OLED_16x16CN(48, 0, 22);//數
  258.                                 OLED_16x16CN(64, 0, 14);//設
  259.                                 OLED_16x16CN(80, 0, 15);//置
  260.                         }
  261.                         else if(RTC_Set_ID==7)
  262.                         {
  263.                                 OLED_Fill(0x00);
  264.                                 OLED_16x16CN(32, 0, 8);//星
  265.                                 OLED_16x16CN(48, 0, 9);//期
  266.                                 OLED_16x16CN(64, 0, 14);//設
  267.                                 OLED_16x16CN(80, 0, 15);//置
  268.                                 OLED_16x32(40, 2, 12);//星
  269.                                 OLED_16x32(56, 2, 13);//期
  270.                                 OLED_16x32(72, 2, display_buff[15]+13);
  271.                         }
  272.                 }
  273.         }
  274.         if(key2==0)
  275.         {
  276.                 delayms(10);
  277.                 if(key2==0)
  278.                 {
  279.                         while(!key2);
  280.                         laba_flag=1;   //蜂鳴器響一聲
  281.                         shezhi_display_flag=1;
  282.                         if(RTC_Set_ID==1)
  283.                         {
  284.                                 if(RTC_Data[6]<99)          //年+
  285.                                         RTC_Data[6]++;
  286.                                 display1();
  287.                                 OLED_16x32(0, 2, display_buff[2]);//年
  288.                                 OLED_16x32(16, 2, display_buff[3]);
  289.                                 OLED_16x32(32, 2, 11);//-
  290.                                 OLED_16x32(48, 2, display_buff[4]);//月
  291.                                 OLED_16x32(64, 2, display_buff[5]);
  292.                                 OLED_16x32(80, 2, 11);//-
  293.                                 OLED_16x32(96, 2, display_buff[6]);//日
  294.                                 OLED_16x32(112, 2, display_buff[7]);
  295.                         }
  296.                         else if(RTC_Set_ID==2)
  297.                         {
  298.                                 if(RTC_Data[4]<12)          //月+
  299.                                         RTC_Data[4]++;
  300.                                 display1();
  301.                                 OLED_16x32(0, 2, display_buff[2]);//年
  302.                                 OLED_16x32(16, 2, display_buff[3]);
  303.                                 OLED_16x32(32, 2, 11);//-
  304.                                 OLED_16x32(48, 2, display_buff[4]);//月
  305.                                 OLED_16x32(64, 2, display_buff[5]);
  306.                                 OLED_16x32(80, 2, 11);//-
  307.                                 OLED_16x32(96, 2, display_buff[6]);//日
  308.                                 OLED_16x32(112, 2, display_buff[7]);
  309.                         }
  310.                         else if(RTC_Set_ID==3)
  311.                         {
  312.                                 if(RTC_Data[3]<31)          //日+
  313.                                         RTC_Data[3]++;
  314.                                 display1();
  315.                                 OLED_16x32(0, 2, display_buff[2]);//年
  316.                                 OLED_16x32(16, 2, display_buff[3]);
  317.                                 OLED_16x32(32, 2, 11);//-
  318.                                 OLED_16x32(48, 2, display_buff[4]);//月
  319.                                 OLED_16x32(64, 2, display_buff[5]);
  320.                                 OLED_16x32(80, 2, 11);//-
  321.                                 OLED_16x32(96, 2, display_buff[6]);//日
  322.                                 OLED_16x32(112, 2, display_buff[7]);        
  323.                         }
  324.                         else if(RTC_Set_ID==4)
  325.                         {
  326.                                 if(RTC_Data[2]<23)          //時+
  327.                                         RTC_Data[2]++;
  328.                                 display1();
  329.                                 OLED_16x32(0, 2, display_buff[8]);//時
  330.                                 OLED_16x32(16, 2, display_buff[9]);
  331.                                 OLED_16x32(32, 2, 10);//:
  332.                                 OLED_16x32(48, 2, display_buff[10]);//分
  333.                                 OLED_16x32(64, 2, display_buff[11]);
  334.                                 OLED_16x32(80, 2, 10);//:
  335.                                 OLED_16x32(96, 2, display_buff[12]);//秒
  336.                                 OLED_16x32(112, 2, display_buff[13]);
  337.                         }
  338.                         else if(RTC_Set_ID==5)
  339.                         {
  340.                                 if(RTC_Data[1]<59)          //分+
  341.                                         RTC_Data[1]++;
  342.                                 display1();
  343.                                 OLED_16x32(0, 2, display_buff[8]);//時
  344.                                 OLED_16x32(16, 2, display_buff[9]);
  345.                                 OLED_16x32(32, 2, 10);//:
  346.                                 OLED_16x32(48, 2, display_buff[10]);//分
  347.                                 OLED_16x32(64, 2, display_buff[11]);
  348.                                 OLED_16x32(80, 2, 10);//:
  349.                                 OLED_16x32(96, 2, display_buff[12]);//秒
  350.                                 OLED_16x32(112, 2, display_buff[13]);
  351.                         }
  352.                         else if(RTC_Set_ID==6)
  353.                         {
  354.                                 if(RTC_Data[0]<59)          //秒+
  355.                                         RTC_Data[0]++;
  356.                                 display1();
  357.                                 OLED_16x32(0, 2, display_buff[8]);//時
  358.                                 OLED_16x32(16, 2, display_buff[9]);
  359.                                 OLED_16x32(32, 2, 10);//:
  360.                                 OLED_16x32(48, 2, display_buff[10]);//分
  361.                                 OLED_16x32(64, 2, display_buff[11]);
  362.                                 OLED_16x32(80, 2, 10);//:
  363.                                 OLED_16x32(96, 2, display_buff[12]);//秒
  364.                                 OLED_16x32(112, 2, display_buff[13]);
  365.                         }
  366.                         else if(RTC_Set_ID==7)
  367.                         {
  368.                                 if(RTC_Data[5]<7)          //周+
  369.                                         RTC_Data[5]++;
  370.                                 display1();
  371.                                 OLED_16x32(40, 2, 12);//星
  372.                                 OLED_16x32(56, 2, 13);//期
  373.                                 OLED_16x32(72, 2, display_buff[15]+13);
  374.                         }
  375.                 }
  376.         }
  377.         if(key3==0)
  378.         {
  379.                 delayms(10);
  380.                 if(key3==0)
  381.                 {
  382.                         while(!key3);
  383.                         laba_flag=1;          //蜂鳴器響一聲
  384.                         shezhi_display_flag=1;
  385.                         if(RTC_Set_ID==1)
  386.                         {
  387.                                 if(RTC_Data[6])                   //年-
  388.                                         RTC_Data[6]--;
  389.                                 display1();
  390.                                 OLED_16x32(0, 2, display_buff[2]);//年
  391.                                 OLED_16x32(16, 2, display_buff[3]);
  392.                                 OLED_16x32(32, 2, 11);//-
  393.                                 OLED_16x32(48, 2, display_buff[4]);//月
  394.                                 OLED_16x32(64, 2, display_buff[5]);
  395.                                 OLED_16x32(80, 2, 11);//-
  396.                                 OLED_16x32(96, 2, display_buff[6]);//日
  397.                                 OLED_16x32(112, 2, display_buff[7]);
  398.                         }
  399.                         else if(RTC_Set_ID==2)
  400.                         {
  401.                                 if(RTC_Data[4])                   //月-
  402.                                         RTC_Data[4]--;
  403.                                 display1();
  404.                                 OLED_16x32(0, 2, display_buff[2]);//年
  405.                                 OLED_16x32(16, 2, display_buff[3]);
  406.                                 OLED_16x32(32, 2, 11);//-
  407.                                 OLED_16x32(48, 2, display_buff[4]);//月
  408.                                 OLED_16x32(64, 2, display_buff[5]);
  409.                                 OLED_16x32(80, 2, 11);//-
  410.                                 OLED_16x32(96, 2, display_buff[6]);//日
  411.                                 OLED_16x32(112, 2, display_buff[7]);
  412.                         }
  413.                         else if(RTC_Set_ID==3)
  414.                         {
  415.                                 if(RTC_Data[3])                   //日-
  416.                                         RTC_Data[3]--;
  417.                                 display1();
  418.                                 OLED_16x32(0, 2, display_buff[2]);//年
  419.                                 OLED_16x32(16, 2, display_buff[3]);
  420.                                 OLED_16x32(32, 2, 11);//-
  421.                                 OLED_16x32(48, 2, display_buff[4]);//月
  422.                                 OLED_16x32(64, 2, display_buff[5]);
  423.                                 OLED_16x32(80, 2, 11);//-
  424.                                 OLED_16x32(96, 2, display_buff[6]);//日
  425.                                 OLED_16x32(112, 2, display_buff[7]);
  426.                         }
  427.                         else if(RTC_Set_ID==4)
  428.                         {
  429.                                 if(RTC_Data[2])                   //時-
  430.                                         RTC_Data[2]--;
  431.                                 display1();
  432.                                 OLED_16x32(0, 2, display_buff[8]);//時
  433.                                 OLED_16x32(16, 2, display_buff[9]);
  434.                                 OLED_16x32(32, 2, 10);//:
  435.                                 OLED_16x32(48, 2, display_buff[10]);//分
  436.                                 OLED_16x32(64, 2, display_buff[11]);
  437.                                 OLED_16x32(80, 2, 10);//:
  438.                                 OLED_16x32(96, 2, display_buff[12]);//秒
  439.                                 OLED_16x32(112, 2, display_buff[13]);
  440.                         }
  441.                         else if(RTC_Set_ID==5)
  442.                         {
  443.                                 if(RTC_Data[1])                   //分-
  444.                                         RTC_Data[1]--;
  445.                                 display1();
  446.                                 OLED_16x32(0, 2, display_buff[8]);//時
  447.                                 OLED_16x32(16, 2, display_buff[9]);
  448.                                 OLED_16x32(32, 2, 10);//:
  449.                                 OLED_16x32(48, 2, display_buff[10]);//分
  450.                                 OLED_16x32(64, 2, display_buff[11]);
  451.                                 OLED_16x32(80, 2, 10);//:
  452.                                 OLED_16x32(96, 2, display_buff[12]);//秒
  453.                                 OLED_16x32(112, 2, display_buff[13]);
  454.                         }
  455.                         else if(RTC_Set_ID==6)
  456.                         {
  457.                                 if(RTC_Data[0])                   //秒-
  458.                                         RTC_Data[0]--;
  459.                                 display1();
  460.                                 OLED_16x32(0, 2, display_buff[8]);//時
  461.                                 OLED_16x32(16, 2, display_buff[9]);
  462.                                 OLED_16x32(32, 2, 10);//:
  463.                                 OLED_16x32(48, 2, display_buff[10]);//分
  464.                                 OLED_16x32(64, 2, display_buff[11]);
  465.                                 OLED_16x32(80, 2, 10);//:
  466.                                 OLED_16x32(96, 2, display_buff[12]);//秒
  467.                                 OLED_16x32(112, 2, display_buff[13]);
  468.                         }
  469.                         else if(RTC_Set_ID==7)
  470.                         {
  471.                                 if(RTC_Data[5])                   //周-
  472.                                         RTC_Data[5]--;
  473.                                 display1();
  474.                                 OLED_16x32(40, 2, 12);//星
  475.                                 OLED_16x32(56, 2, 13);//期
  476.                                 OLED_16x32(72, 2, display_buff[15]+13);
  477.                         }
  478.                 }
  479.         }
  480.         if(key4==0)
  481.         {
  482.                 delayms(10);
  483.                 if(key4==0)
  484.                 {
  485.                         while(!key4);
  486.                         laba_flag=1;          //蜂鳴器響一聲
  487.                         shezhi_display_flag=0;
  488.                         RTC_Save_Flag=1;
  489.                 }
  490.         }
  491.         //紅外遙控操作部分
  492.         if(IrOK==1)                                                //設置/遙控器C鍵
  493.         {
  494.                 if(Im[2]==0x0d)
  495.                 {
  496.                         laba_flag=1; //蜂鳴器響一聲
  497.                         shezhi_display_flag=1;
  498.                         RTC_Set_ID++;
  499.                         if(RTC_Set_ID>=8)
  500.                                 RTC_Set_ID=1;
  501.                         Open_Flag=1;

  502.                         display1();
  503.                         if(RTC_Set_ID==1)
  504.                         {
  505.                                 OLED_Fill(0x00);
  506.                                 OLED_16x16CN(32, 0, 16);//年
  507.                                 OLED_16x16CN(48, 0, 18);//份
  508.                                 OLED_16x16CN(64, 0, 14);//設
  509.                                 OLED_16x16CN(80, 0, 15);//置
  510.                                 OLED_16x32(0, 2, display_buff[2]);//年
  511.                                 OLED_16x32(16, 2, display_buff[3]);
  512.                                 OLED_16x32(32, 2, 11);//-
  513.                                 OLED_16x32(48, 2, display_buff[4]);//月
  514.                                 OLED_16x32(64, 2, display_buff[5]);
  515.                                 OLED_16x32(80, 2, 11);//-
  516.                                 OLED_16x32(96, 2, display_buff[6]);//日
  517.                                 OLED_16x32(112, 2, display_buff[7]);        
  518.                         }
  519.                         else if(RTC_Set_ID==2)
  520.                         {
  521.                                 OLED_16x16CN(32, 0, 17);//月
  522.                                 OLED_16x16CN(48, 0, 18);//份
  523.                                 OLED_16x16CN(64, 0, 14);//設
  524.                                 OLED_16x16CN(80, 0, 15);//置
  525.                         }
  526.                         else if(RTC_Set_ID==3)
  527.                         {
  528.                                 OLED_16x16CN(32, 0, 11);//日
  529.                                 OLED_16x16CN(48, 0, 9);//期
  530.                                 OLED_16x16CN(64, 0, 14);//設
  531.                                 OLED_16x16CN(80, 0, 15);//置
  532.                         }
  533.                         else if(RTC_Set_ID==4)
  534.                         {
  535.                                 OLED_16x16CN(32, 0, 13);//小
  536.                                 OLED_16x16CN(48, 0, 12);//時
  537.                                 OLED_16x16CN(64, 0, 14);//設
  538.                                 OLED_16x16CN(80, 0, 15);//置
  539.                                 OLED_16x32(0, 2, display_buff[8]);//時
  540.                                 OLED_16x32(16, 2, display_buff[9]);
  541.                                 OLED_16x32(32, 2, 10);//:
  542.                                 OLED_16x32(48, 2, display_buff[10]);//分
  543.                                 OLED_16x32(64, 2, display_buff[11]);
  544.                                 OLED_16x32(80, 2, 10);//:
  545.                                 OLED_16x32(96, 2, display_buff[12]);//秒
  546.                                 OLED_16x32(112, 2, display_buff[13]);
  547.                         }
  548.                         else if(RTC_Set_ID==5)
  549.                         {
  550.                                 OLED_16x16CN(32, 0, 19);//分
  551.                                 OLED_16x16CN(48, 0, 20);//鐘
  552.                                 OLED_16x16CN(64, 0, 14);//設
  553.                                 OLED_16x16CN(80, 0, 15);//置
  554.                         }
  555.                         else if(RTC_Set_ID==6)
  556.                         {
  557.                                 OLED_16x16CN(32, 0, 21);//秒
  558.                                 OLED_16x16CN(48, 0, 22);//數
  559.                                 OLED_16x16CN(64, 0, 14);//設
  560.                                 OLED_16x16CN(80, 0, 15);//置
  561.                         }
  562.                         else if(RTC_Set_ID==7)
  563.                         {
  564.                                 OLED_Fill(0x00);
  565.                                 OLED_16x16CN(32, 0, 8);//星
  566.                                 OLED_16x16CN(48, 0, 9);//期
  567.                                 OLED_16x16CN(64, 0, 14);//設
  568.                                 OLED_16x16CN(80, 0, 15);//置
  569.                                 OLED_16x32(40, 2, 12);//星
  570.                                 OLED_16x32(56, 2, 13);//期
  571.                                 OLED_16x32(72, 2, display_buff[15]+13);
  572.                         }
  573.                 }

  574.                 else if(Im[2]==0x40)//遙控器+鍵
  575.                 {
  576.                         laba_flag=1;   //蜂鳴器響一聲
  577.                         shezhi_display_flag=1;
  578.                         if(RTC_Set_ID==1)
  579.                         {
  580.                                 if(RTC_Data[6]<99)          //年+
  581.                                         RTC_Data[6]++;
  582.                                 display1();
  583.                                 OLED_16x32(0, 2, display_buff[2]);//年
  584.                                 OLED_16x32(16, 2, display_buff[3]);
  585.                                 OLED_16x32(32, 2, 11);//-
  586.                                 OLED_16x32(48, 2, display_buff[4]);//月
  587.                                 OLED_16x32(64, 2, display_buff[5]);
  588.                                 OLED_16x32(80, 2, 11);//-
  589.                                 OLED_16x32(96, 2, display_buff[6]);//日
  590.                                 OLED_16x32(112, 2, display_buff[7]);
  591.                         }
  592.                         else if(RTC_Set_ID==2)
  593.                         {
  594.                                 if(RTC_Data[4]<12)          //月+
  595.                                         RTC_Data[4]++;
  596.                                 display1();
  597.                                 OLED_16x32(0, 2, display_buff[2]);//年
  598.                                 OLED_16x32(16, 2, display_buff[3]);
  599.                                 OLED_16x32(32, 2, 11);//-
  600.                                 OLED_16x32(48, 2, display_buff[4]);//月
  601.                                 OLED_16x32(64, 2, display_buff[5]);
  602.                                 OLED_16x32(80, 2, 11);//-
  603.                                 OLED_16x32(96, 2, display_buff[6]);//日
  604.                                 OLED_16x32(112, 2, display_buff[7]);
  605.                         }
  606.                         else if(RTC_Set_ID==3)
  607.                         {
  608.                                 if(RTC_Data[3]<31)          //日+
  609.                                         RTC_Data[3]++;
  610.                                 display1();
  611.                                 OLED_16x32(0, 2, display_buff[2]);//年
  612.                                 OLED_16x32(16, 2, display_buff[3]);
  613.                                 OLED_16x32(32, 2, 11);//-
  614.                                 OLED_16x32(48, 2, display_buff[4]);//月
  615.                                 OLED_16x32(64, 2, display_buff[5]);
  616.                                 OLED_16x32(80, 2, 11);//-
  617.                                 OLED_16x32(96, 2, display_buff[6]);//日
  618.                                 OLED_16x32(112, 2, display_buff[7]);
  619.                         }
  620.                         else if(RTC_Set_ID==4)
  621.                         {
  622.                                 if(RTC_Data[2]<23)          //時+
  623.                                         RTC_Data[2]++;
  624.                                 display1();
  625.                                 OLED_16x32(0, 2, display_buff[8]);//時
  626.                                 OLED_16x32(16, 2, display_buff[9]);
  627.                                 OLED_16x32(32, 2, 10);//:
  628.                                 OLED_16x32(48, 2, display_buff[10]);//分
  629.                                 OLED_16x32(64, 2, display_buff[11]);
  630.                                 OLED_16x32(80, 2, 10);//:
  631.                                 OLED_16x32(96, 2, display_buff[12]);//秒
  632.                                 OLED_16x32(112, 2, display_buff[13]);
  633.                         }
  634.                         else if(RTC_Set_ID==5)
  635.                         {
  636.                                 if(RTC_Data[1]<59)          //分+
  637.                                         RTC_Data[1]++;
  638.                                 display1();
  639.                                 OLED_16x32(0, 2, display_buff[8]);//時
  640.                                 OLED_16x32(16, 2, display_buff[9]);
  641.                                 OLED_16x32(32, 2, 10);//:
  642.                                 OLED_16x32(48, 2, display_buff[10]);//分
  643.                                 OLED_16x32(64, 2, display_buff[11]);
  644.                                 OLED_16x32(80, 2, 10);//:
  645.                                 OLED_16x32(96, 2, display_buff[12]);//秒
  646.                                 OLED_16x32(112, 2, display_buff[13]);
  647.                         }
  648.                         else if(RTC_Set_ID==6)
  649.                         {
  650.                                 if(RTC_Data[0]<59)          //秒+
  651.                                         RTC_Data[0]++;
  652.                                 display1();
  653.                                 OLED_16x32(0, 2, display_buff[8]);//時
  654.                                 OLED_16x32(16, 2, display_buff[9]);
  655.                                 OLED_16x32(32, 2, 10);//:
  656.                                 OLED_16x32(48, 2, display_buff[10]);//分
  657.                                 OLED_16x32(64, 2, display_buff[11]);
  658.                                 OLED_16x32(80, 2, 10);//:
  659.                                 OLED_16x32(96, 2, display_buff[12]);//秒
  660.                                 OLED_16x32(112, 2, display_buff[13]);
  661.                         }
  662.                         else if(RTC_Set_ID==7)
  663.                         {
  664.                                 if(RTC_Data[5]<7)          //周+
  665.                                         RTC_Data[5]++;
  666.                                 display1();
  667.                                 OLED_16x32(40, 2, 12);//星
  668.                                 OLED_16x32(56, 2, 13);//期
  669.                                 OLED_16x32(72, 2, display_buff[15]+13);
  670.                         }
  671.                 }

  672.                 else if(Im[2]==0x19)//遙控器-鍵
  673.                 {
  674.                         laba_flag=1;          //蜂鳴器響一聲
  675.                         shezhi_display_flag=1;
  676.                         if(RTC_Set_ID==1)
  677.                         {
  678.                                 if(RTC_Data[6])                   //年-
  679.                                         RTC_Data[6]--;
  680.                                 display1();
  681.                                 OLED_16x32(0, 2, display_buff[2]);//年
  682.                                 OLED_16x32(16, 2, display_buff[3]);
  683.                                 OLED_16x32(32, 2, 11);//-
  684.                                 OLED_16x32(48, 2, display_buff[4]);//月
  685.                                 OLED_16x32(64, 2, display_buff[5]);
  686.                                 OLED_16x32(80, 2, 11);//-
  687.                                 OLED_16x32(96, 2, display_buff[6]);//日
  688.                                 OLED_16x32(112, 2, display_buff[7]);
  689.                         }
  690.                         else if(RTC_Set_ID==2)
  691.                         {
  692.                                 if(RTC_Data[4])                   //月-
  693.                                         RTC_Data[4]--;
  694.                                 display1();
  695.                                 OLED_16x32(0, 2, display_buff[2]);//年
  696.                                 OLED_16x32(16, 2, display_buff[3]);
  697.                                 OLED_16x32(32, 2, 11);//-
  698.                                 OLED_16x32(48, 2, display_buff[4]);//月
  699.                                 OLED_16x32(64, 2, display_buff[5]);
  700.                                 OLED_16x32(80, 2, 11);//-
  701.                                 OLED_16x32(96, 2, display_buff[6]);//日
  702.                                 OLED_16x32(112, 2, display_buff[7]);
  703.                         }
  704.                         else if(RTC_Set_ID==3)
  705.                         {
  706.                                 if(RTC_Data[3])                   //日-
  707.                                         RTC_Data[3]--;
  708.                                 display1();
  709.                                 OLED_16x32(0, 2, display_buff[2]);//年
  710.                                 OLED_16x32(16, 2, display_buff[3]);
  711.                                 OLED_16x32(32, 2, 11);//-
  712.                                 OLED_16x32(48, 2, display_buff[4]);//月
  713.                                 OLED_16x32(64, 2, display_buff[5]);
  714.                                 OLED_16x32(80, 2, 11);//-
  715.                                 OLED_16x32(96, 2, display_buff[6]);//日
  716.                                 OLED_16x32(112, 2, display_buff[7]);
  717.                         }
  718.                         else if(RTC_Set_ID==4)
  719.                         {
  720.                                 if(RTC_Data[2])                   //時-
  721.                                         RTC_Data[2]--;
  722.                                 display1();
  723.                                 OLED_16x32(0, 2, display_buff[8]);//時
  724.                                 OLED_16x32(16, 2, display_buff[9]);
  725.                                 OLED_16x32(32, 2, 10);//:
  726.                                 OLED_16x32(48, 2, display_buff[10]);//分
  727.                                 OLED_16x32(64, 2, display_buff[11]);
  728.                                 OLED_16x32(80, 2, 10);//:
  729.                                 OLED_16x32(96, 2, display_buff[12]);//秒
  730.                                 OLED_16x32(112, 2, display_buff[13]);
  731.                         }
  732.                         else if(RTC_Set_ID==5)
  733.                         {
  734.                                 if(RTC_Data[1])                   //分-
  735.                                         RTC_Data[1]--;
  736.                                 display1();
  737.                                 OLED_16x32(0, 2, display_buff[8]);//時
  738.                                 OLED_16x32(16, 2, display_buff[9]);
  739.                                 OLED_16x32(32, 2, 10);//:
  740.                                 OLED_16x32(48, 2, display_buff[10]);//分
  741.                                 OLED_16x32(64, 2, display_buff[11]);
  742.                                 OLED_16x32(80, 2, 10);//:
  743.                                 OLED_16x32(96, 2, display_buff[12]);//秒
  744.                                 OLED_16x32(112, 2, display_buff[13]);
  745.                         }
  746.                         else if(RTC_Set_ID==6)
  747.                         {
  748.                                 if(RTC_Data[0])                   //秒-
  749.                                         RTC_Data[0]--;
  750.                                 display1();
  751.                                 OLED_16x32(0, 2, display_buff[8]);//時
  752.                                 OLED_16x32(16, 2, display_buff[9]);
  753.                                 OLED_16x32(32, 2, 10);//:
  754.                                 OLED_16x32(48, 2, display_buff[10]);//分
  755.                                 OLED_16x32(64, 2, display_buff[11]);
  756.                                 OLED_16x32(80, 2, 10);//:
  757.                                 OLED_16x32(96, 2, display_buff[12]);//秒
  758.                                 OLED_16x32(112, 2, display_buff[13]);
  759.                         }
  760.                         else if(RTC_Set_ID==7)
  761.                         {
  762.                                 if(RTC_Data[5])                   //周-
  763.                                         RTC_Data[5]--;
  764.                                 display1();
  765.                                 OLED_16x32(40, 2, 12);//星
  766.                                 OLED_16x32(56, 2, 13);//期
  767.                                 OLED_16x32(72, 2, display_buff[15]+13);
  768.                         }
  769.                 }
  770.                 else if(Im[2]==0x15)//遙控器播放鍵
  771.                 {
  772.                         laba_flag=1;
  773.                         shezhi_display_flag=0;
  774.                         RTC_Save_Flag=1;
  775.                 }
  776.                 IrOK=0;
  777.         }
  778. }
  779. void delayms(uint x)
  780. {
  781.         uint i,j;
  782.         for(i=x;i<0;i--)
  783.                 for(j=110;j<0;j--);
  784. }
  785. /*****************************************************************************************************
  786. ***********************************************oled12864函數******************************************
  787. *****************************************************************************************************/
  788. void oled_IIC_Start()//開始
  789. {
  790.    oled_SCL = 1;               
  791.    oled_SDA = 1;
  792.    oled_SDA = 0;
  793.    oled_SCL = 0;
  794. }
  795. void oled_IIC_Stop()//停止
  796. {
  797.    oled_SCL = 0;
  798.    oled_SDA = 0;
  799.    oled_SCL = 1;
  800.    oled_SDA = 1;
  801. }
  802. void oled_Write_IIC_Byte(uchar IIC_Byte)//寫字節
  803. {
  804.         uchar i;
  805.         for(i=0;i<8;i++)
  806.         {
  807.                 if(IIC_Byte & 0x80)
  808.                         oled_SDA=1;
  809.                 else
  810.                 oled_SDA=0;
  811.                 oled_SCL=1;
  812.                 oled_SCL=0;
  813.                 IIC_Byte<<=1;
  814.         }
  815.         oled_SDA=1;
  816.         oled_SCL=1;
  817.         oled_SCL=0;
  818. }
  819. void OLED_12864_Write_data(uint dat)//寫入數據
  820. {
  821.         oled_IIC_Start();
  822.         oled_Write_IIC_Byte(0x78);
  823.         oled_Write_IIC_Byte(0x40);
  824.         oled_Write_IIC_Byte(dat);
  825.         oled_IIC_Stop();
  826. }
  827. void OLED_12864_Write_commomand(uint dat)//寫入命令
  828. {
  829.         oled_IIC_Start();
  830.         oled_Write_IIC_Byte(0x78);
  831.         oled_Write_IIC_Byte(0x00);
  832.         oled_Write_IIC_Byte(dat);
  833.         oled_IIC_Stop();
  834. }
  835. void OLED_SetPos(uchar x, uchar y)//設置起始坐標
  836. {
  837.         OLED_12864_Write_commomand(0xb0+y);
  838.         OLED_12864_Write_commomand(((x&0xf0)>>4)|0x10);
  839.         OLED_12864_Write_commomand((x&0x0f)|0x01);
  840. }
  841. void OLED_Fill(uchar bmp_dat)//屏幕填充
  842. {
  843.         uchar y,x;
  844.         for(y=0;y<8;y++)
  845.         {
  846.                 OLED_12864_Write_commomand(0xb0+y);
  847.                 OLED_12864_Write_commomand(0x01);
  848.                 OLED_12864_Write_commomand(0x10);
  849.                 for(x=0;x<128;x++)
  850.                 OLED_12864_Write_data(bmp_dat);
  851.         }
  852. }
  853. void OLED_12864_Init()//OLED12864初始化
  854. {
  855.         delayms(500);                                                //初始化之前的延時很重要!
  856.         OLED_12864_Write_commomand(0xae);
  857.         OLED_12864_Write_commomand(0x00);
  858.         OLED_12864_Write_commomand(0x10);
  859.         OLED_12864_Write_commomand(0x40);
  860.         OLED_12864_Write_commomand(0x81);
  861.         OLED_12864_Write_commomand(0xcf);
  862.         OLED_12864_Write_commomand(0xa1);
  863.         OLED_12864_Write_commomand(0xc8);
  864.         OLED_12864_Write_commomand(0xa6);
  865.         OLED_12864_Write_commomand(0xa8);
  866.         OLED_12864_Write_commomand(0x3f);
  867.         OLED_12864_Write_commomand(0xd3);
  868.         OLED_12864_Write_commomand(0x00);
  869.         OLED_12864_Write_commomand(0xd5);
  870.         OLED_12864_Write_commomand(0x80);
  871.         OLED_12864_Write_commomand(0xd9);
  872.         OLED_12864_Write_commomand(0xf1);
  873.         OLED_12864_Write_commomand(0xda);
  874.         OLED_12864_Write_commomand(0x12);
  875.         OLED_12864_Write_commomand(0xdb);
  876.         OLED_12864_Write_commomand(0x40);
  877.         OLED_12864_Write_commomand(0x20);
  878.         OLED_12864_Write_commomand(0x02);
  879.         OLED_12864_Write_commomand(0x8d);
  880.         OLED_12864_Write_commomand(0x14);
  881.         OLED_12864_Write_commomand(0xa4);
  882.         OLED_12864_Write_commomand(0xa6);
  883.         OLED_12864_Write_commomand(0xaf);
  884.         OLED_Fill(0x00);                                         //清屏
  885.         OLED_SetPos(0,0);
  886. }
  887. void OLED_8x16Str(uchar x, uchar y, uchar ch)
  888. {
  889.         uchar i=0;
  890.         if(x>120)
  891.         {
  892.                 x=0;y++;
  893.         }

  894.         OLED_SetPos(x,y);
  895.         for(i=0;i<8;i++)
  896.         {
  897.                 OLED_12864_Write_data(F8X16[ch*16+i]);
  898.         }

  899.         OLED_SetPos(x,y+1);
  900.         for(i=0;i<8;i++)
  901.         {
  902.                 OLED_12864_Write_data(F8X16[ch*16+i+8]);
  903.         }
  904. }
  905. void OLED_16x16CN(uchar x,uchar y,uchar N)//顯示16*16的坐標(x,y),y為頁范圍0~7
  906. {
  907.         uchar i=0;
  908.         uint adder=32*N;

  909.         OLED_SetPos(x,y);
  910.         for(i=0;i<16;i++)
  911.         {
  912.                 OLED_12864_Write_data(F16x16[adder]);
  913.                 adder+=1;
  914.         }

  915.         OLED_SetPos(x,y+1);
  916.         for(i=0;i<16;i++)
  917.         {
  918.                 OLED_12864_Write_data(F16x16[adder]);
  919.                 adder+=1;
  920.         }
  921. }
  922. void OLED_16x32(uchar x, uchar y, uchar ch)//顯示8*16的坐標(x,y),y為頁范圍0~7
  923. {
  924.         uchar i=0;
  925.         if(x>120)
  926.         {
  927.                 x=0;y++;
  928.         }

  929.         OLED_SetPos(x,y);
  930.         for(i=0;i<16;i++)
  931.         {
  932.                 OLED_12864_Write_data(F16X32[ch*64+i]);
  933.         }

  934.         OLED_SetPos(x,y+1);
  935.         for(i=0;i<16;i++)
  936.         {
  937.                 OLED_12864_Write_data(F16X32[ch*64+i+16]);
  938.         }
  939.         OLED_SetPos(x,y+2);
  940.         for(i=0;i<16;i++)
  941.         {
  942.                 OLED_12864_Write_data(F16X32[ch*64+i+32]);
  943.         }
  944.         OLED_SetPos(x,y+3);
  945.         for(i=0;i<16;i++)
  946.         {
  947.                 OLED_12864_Write_data(F16X32[ch*64+i+48]);
  948.         }
  949. }
  950. /*****************************************************************************************************
  951. ***********************************************顯示函數***********************************************
  952. *****************************************************************************************************/
  953. void display1()
  954. {
  955.         display_buff[0] =2;
  956.         display_buff[1] =0;
  957.         display_buff[2] =RTC_Data[6]/10;
  958.         display_buff[3] =RTC_Data[6]%10;                //年
  959.         
  960.         display_buff[4] =RTC_Data[4]/10;
  961.         display_buff[5] =RTC_Data[4]%10;                //月
  962.         
  963.         display_buff[6] =RTC_Data[3]/10;
  964.         display_buff[7] =RTC_Data[3]%10;                //日
  965.         
  966.         display_buff[8] =RTC_Data[2]/10;
  967.         display_buff[9] =RTC_Data[2]%10;                //時
  968.         
  969.         display_buff[10] =RTC_Data[1]/10;
  970.         display_buff[11] =RTC_Data[1]%10;                //分
  971.         
  972.         display_buff[12] =RTC_Data[0]/10;
  973.         display_buff[13] =RTC_Data[0]%10;                //秒
  974.         
  975.         display_buff[14] =RTC_Data[5]/10;
  976.         display_buff[15] =RTC_Data[5]%10;                //星期

  977.         display_buff[16] =RTC_Data[7]/10;
  978.         display_buff[17] =RTC_Data[7]%10;                //溫度
  979. }
  980. void display2()
  981. {
  982.         OLED_8x16Str(24, 0, display_buff[0]);// 年
  983.         OLED_8x16Str(32, 0, display_buff[1]);
  984.         OLED_8x16Str(40, 0, display_buff[2]);
  985.         OLED_8x16Str(48, 0, display_buff[3]);
  986.         OLED_8x16Str(56, 0, 10);                         // -
  987.         OLED_8x16Str(64, 0, display_buff[4]);// 月
  988.         OLED_8x16Str(72, 0, display_buff[5]);
  989.         OLED_8x16Str(80, 0, 10);                         // -
  990.         OLED_8x16Str(88, 0, display_buff[6]);// 日
  991.         OLED_8x16Str(96, 0, display_buff[7]);

  992.         OLED_16x32(0, 2, display_buff[8]);// 時
  993.         OLED_16x32(16, 2, display_buff[9]);

  994.         OLED_16x32(48, 2, display_buff[10]);// 分
  995.         OLED_16x32(64, 2, display_buff[11]);

  996.         OLED_16x32(96, 2, display_buff[12]);// 秒
  997.         OLED_16x32(112, 2, display_buff[13]);

  998.         if(RTC_Data[0]/1%2==0)  OLED_16x32(32, 2, 10);// :
  999.         else  OLED_16x32(32, 2, 21);
  1000.         if(RTC_Data[0]/1%2==0)  OLED_16x32(80, 2, 10);// :
  1001.         else  OLED_16x32(80, 2, 21);

  1002.         OLED_16x16CN(8, 6, 8);// 星
  1003.         OLED_16x16CN(24, 6, 9);// 期
  1004.         OLED_16x16CN(40, 6, display_buff[15]);// ?

  1005.         OLED_8x16Str(96, 6, display_buff[16]);// 溫度
  1006.         OLED_8x16Str(104, 6, display_buff[17]);
  1007.         OLED_16x16CN(112, 6, 10);// ℃
  1008. }
  1009. /*****************************************************************************************************
  1010. **********************************************DS3231函數**********************************************
  1011. *****************************************************************************************************/
  1012. void DS3231_IIC_delay()//IIC延時函數。延時4個機器周期。   
  1013. {
  1014.         _nop_();_nop_();_nop_();_nop_();
  1015. }

  1016. void DS3231_IIC_start()//起始信號
  1017. {   
  1018.      DS3231_IIC_SDA=1;
  1019.      DS3231_IIC_SCL=1;
  1020.      DS3231_IIC_delay();
  1021.      DS3231_IIC_SDA=0;
  1022.      DS3231_IIC_delay();
  1023.      DS3231_IIC_SCL=0;
  1024. }

  1025. void DS3231_IIC_stop()//停止信號
  1026. {
  1027.     DS3231_IIC_SDA=0;
  1028.     DS3231_IIC_delay();
  1029.     DS3231_IIC_SCL=1;
  1030.     DS3231_IIC_delay();
  1031.     DS3231_IIC_SDA=1;
  1032.     DS3231_IIC_delay();
  1033. }

  1034. bit DS3231_IIC_Tack()//接收應答
  1035. {
  1036.     bit ack;
  1037.     DS3231_IIC_SDA=1;
  1038.     DS3231_IIC_delay();
  1039.     DS3231_IIC_SCL=1;
  1040.     DS3231_IIC_delay();
  1041.     ack=DS3231_IIC_SDA;
  1042.     DS3231_IIC_delay();
  1043.     DS3231_IIC_SCL=0;
  1044.     DS3231_IIC_delay();
  1045.     return ack;
  1046. }

  1047. void DS3231_IIC_write_byte(uchar Data)//寫入數據函數
  1048. {
  1049.         uchar i;
  1050.         for(i=0;i<8;i++)
  1051.         {
  1052.                 if(Data&0x80)
  1053.                 DS3231_IIC_SDA=1;
  1054.                 else
  1055.                 DS3231_IIC_SDA = 0;
  1056.                 DS3231_IIC_delay();
  1057.                 DS3231_IIC_SCL=1;
  1058.                 DS3231_IIC_delay();
  1059.                 DS3231_IIC_SCL=0;
  1060.                 DS3231_IIC_delay();
  1061.                 Data=Data<<1;
  1062.         }
  1063. }

  1064. uchar DS3231_IIC_read_byte()//讀取數據函數
  1065. {
  1066.     uchar i;
  1067.     uchar Data;      
  1068.     for(i=0;i<8;i++)
  1069.     {
  1070.         DS3231_IIC_SCL=1;
  1071.         DS3231_IIC_delay();
  1072.         Data=Data<<1;
  1073.         DS3231_IIC_delay();
  1074.       
  1075.         if(DS3231_IIC_SDA)
  1076.         Data=Data|0x01;
  1077.         DS3231_IIC_SCL=0;
  1078.         DS3231_IIC_delay();
  1079.     }
  1080.     return Data;
  1081. }

  1082. ……………………

  1083. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
源程序.zip (54.24 KB, 下載次數: 65)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:281705 發表于 2018-6-13 10:20 | 只看該作者
不錯,我
回復

使用道具 舉報

板凳
ID:138130 發表于 2019-9-2 23:57 | 只看該作者
程序代碼不完整,編譯不了!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表