找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4141|回复: 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 单片机教程网

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