久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3249|回復: 3
打印 上一主題 下一主題
收起左側(cè)

51單片機智能時鐘設(shè)計 stc8系列 藍牙通訊 App Inventor 2編寫手機軟件

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:479740 發(fā)表于 2020-2-13 22:27 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
控制系統(tǒng)直接通過STC 8a8k64s4a12 單片機控制兩組4位的數(shù)碼管進行顯示,使用DS1302時鐘芯片進行獲取時鐘數(shù)據(jù),使用DS18b20,獲取溫度信息,通過HC-05 藍牙模塊進行與手機app通訊,手機app由App Inventor 2編寫 可以實現(xiàn)鬧鐘、用戶設(shè)置數(shù)據(jù)的掉電保存,聯(lián)機自動校時等功能。






作品實物如圖所示:



數(shù)碼管驅(qū)動:
  1. #include <STC8.H>
  2. #include <shumaguan.H>
  3. #include <delay.H>


  4. uchar code shuzi[]={
  5.                                                                                         0xc0,//0
  6.                                                                                         0xf9,//1
  7.                                                                                         0xa4,//2
  8.                                                                                         0xb0,//3
  9.                                                                                         0x99,//4
  10.                                                                                         0x92,//5
  11.                                                                                         0x82,//6
  12.                                                                                         0xf8,//7
  13.                                                                                         0x80,//8
  14.                                                                                         0x90,//9
  15.                                                                                         0x88,//A
  16.                                                                                         0x83,//B  11
  17.                                                                                         0xc6,//C  12
  18.                                                                                         0xa1,//D
  19.                                                                                         0x86,//E
  20.                                                                                         0x8e,//F
  21.                                                                                         0x8c,//P  16
  22.                                                                                         0x40,//0.
  23.                                                                                         0x79,//1.
  24.                                                                                         0x24,//2.
  25.                                                                                         0x30,//3.
  26.                                                                                         0x19,//4.
  27.                                                                                         0x12,//5.
  28.                                                                                         0x02,//6.
  29.                                                                                         0x78,//7.
  30.                                                                                         0x00,//8.
  31.                                                                                         0x10,//9.
  32.                                                                                         0xbf,//-   27
  33.                                                                                         0xff,// 熄滅 28
  34.                                                                                         0x7f,//. 29
  35.                                                                                         0x88,//A  30
  36.                                                                                         0xc7,//L   31
  37.                                                                                         0x87,//t 32
  38.                                                                                         0x86,//E 33
  39.                                                                                         0x8c,//P 34
  40.                                                                                         0x83,//b 35
  41.                                                                                         0x8b,//h 36
  42.                                                                                         0x8e,//F 37
  43.                                                                                         0xc8,//N 38
  44.                                                                                         0x9c,//小圈 39
  45.                                                                                         0xc1,//v 40
  46.                                                                                 };

  47. /***********************************************************************************************************
  48. * 函數(shù)名稱: xianshi()
  49. * 輸入?yún)?shù):uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar
  50. * 輸出參數(shù): void
  51. *
  52. * 功    能: 數(shù)碼管驅(qū)動程序
  53. *
  54. * 備    注:驅(qū)動8位數(shù)碼管、形參的值對應(yīng)數(shù)組shuzi里的位 、第幾位形參對應(yīng)數(shù)碼管的位
  55. *
  56. * 完成時間: 2019.12.25
  57. ************************************************************************************************************/
  58.                                                                                 
  59. void xianshi(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f,uchar g,uchar h)////公陰
  60. {
  61.         P2=0xff-shuzi[a];
  62.         wei1=0;
  63.         delay(2);
  64.         wei1=1;
  65.         P2=0xff-shuzi[b];
  66.         wei2=0;
  67.         delay(2);
  68.         wei2=1;
  69.         P2=0xff-shuzi[c];
  70.         wei3=0;
  71.         delay(2);
  72.         wei3=1;
  73.         P2=0xff-shuzi[d];
  74.         wei4=0;
  75.         delay(2);
  76.         wei4=1;
  77.         P2=0xff-shuzi[e];
  78.         wei5=0;
  79.         delay(2);
  80.         wei5=1;
  81.         P2=0xff-shuzi[f];
  82.         wei6=0;
  83.         delay(2);
  84.         wei6=1;
  85.         P2=0xff-shuzi[g];
  86.         wei7=0;
  87.         delay(2);
  88.         wei7=1;
  89.         P2=0xff-shuzi[h];
  90.         wei8=0;
  91.         delay(2);
  92.         wei8=1;
  93. }

  94. /***********************************************************************************************************
  95. * 函數(shù)名稱: xianshi5()
  96. * 輸入?yún)?shù):uchar,uchar,uchar,uchar,uchar
  97. * 輸出參數(shù): void
  98. *
  99. * 功    能: 數(shù)碼管驅(qū)動程序
  100. *
  101. * 備    注:驅(qū)動5位數(shù)碼管、形參的值對應(yīng)數(shù)組shuzi里的位 、第幾位形參對應(yīng)數(shù)碼管的位、顯示周期短
  102. *
  103. *
  104. * 完成時間: 2019.12.25
  105. ************************************************************************************************************/

  106. void xianshi5(uchar d,uchar e,uchar f,uchar g,uchar h)////公陰
  107. {
  108.         wei1=wei2=wei3=1;
  109.         P2=0xff-shuzi[d];
  110.         wei4=0;
  111.         delay(2);
  112.         wei4=1;
  113.         P2=0xff-shuzi[e];
  114.         wei5=0;
  115.         delay(2);
  116.         wei5=1;
  117.         P2=0xff-shuzi[f];
  118.         wei6=0;
  119.         delay(2);
  120.         wei6=1;
  121.         P2=0xff-shuzi[g];
  122.         wei7=0;
  123.         delay(2);
  124.         wei7=1;
  125.         P2=0xff-shuzi[h];
  126.         wei8=0;
  127.         delay(2);
  128.         wei8=1;
  129. }
  130.                                                                                 
復制代碼

ds1302驅(qū)動:
  1. #include <STC8.H>
  2. #include <ds1302.H>
  3. #include <delay.H>

  4. uchar shijian[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};//時間緩存數(shù)組                                                                                

  5. /***********************************************************************************************************
  6. * 函數(shù)名稱: xie1302()
  7. * 輸入?yún)?shù):uchar
  8. * 輸出參數(shù): void
  9. *
  10. * 功    能: 寫1302時序
  11. *
  12. * 備    注:向DS1302中寫入形參
  13. *
  14. *
  15. * 完成時間: 2019.12.25
  16. ************************************************************************************************************/

  17. void xie1302(uchar dat)//寫1302時序
  18. {
  19.         uchar i;
  20.         SCLK=0; //拉低SCLK,為脈沖上升沿寫入數(shù)據(jù)做好準備
  21.         delayus(2); //稍微等待,使硬件做好準備
  22.         for(i=0;i<8;i++)
  23.         {
  24.                 IO=dat&0x01;//取出dat的第0位數(shù)據(jù)寫入1302
  25.                 delayus(2); //稍微等待,使硬件做好準備
  26.                 SCLK=1; //上升沿寫入數(shù)據(jù)
  27.                 delayus(2); //稍微等待,使硬件做好準備3
  28.                 SCLK=0; //重新拉低SCLK,形成脈沖
  29.                 dat>>=1; //將dat的各數(shù)據(jù)位右移1位,準備寫入下一個數(shù)據(jù)位
  30.         }
  31. }

  32. /***********************************************************************************************************
  33. * 函數(shù)名稱: du1302()
  34. * 輸入?yún)?shù):void
  35. * 輸出參數(shù): uchar
  36. *
  37. * 功    能:讀1302時序
  38. *
  39. * 備    注:將讀到的數(shù)據(jù)輸出
  40. *
  41. *
  42. * 完成時間: 2019.12.25
  43. ************************************************************************************************************/

  44. uchar du1302(void)//讀1302時序
  45. {
  46.         uchar i,dat;
  47.         delayus(2); //稍微等待,使硬件做好準備
  48.         for(i=0;i<8;i++)
  49.         {
  50.                 dat>>=1;//將dat的各數(shù)據(jù)位右移1位,因為先讀出的是字節(jié)的最低位
  51.                 if(IO==1) //如果讀出的數(shù)據(jù)是1
  52.      dat|=0x80; //將1取出,寫在dat的最高位
  53.                 SCLK=1; //將SCLK置于高電平,為下降沿讀出
  54.                 delayus(2); //稍微等待,使硬件做好準備
  55.                 SCLK=0; //拉低SCLK,形成脈沖下降沿
  56.                 delayus(2); //稍微等待,使硬件做好準備
  57.         }
  58.         return dat; //將讀出的數(shù)據(jù)返回
  59. }

  60. /***********************************************************************************************************
  61. * 函數(shù)名稱:xiemingling1302()
  62. * 輸入?yún)?shù):uchar ,uchar
  63. * 輸出參數(shù): void
  64. *
  65. * 功    能:向ds1302寫指令、寫數(shù)據(jù)
  66. *
  67. * 備    注:實際上是調(diào)用兩次xie1302(),分別寫入指令、數(shù)據(jù)
  68. *
  69. *
  70. * 完成時間: 2019.12.25
  71. ************************************************************************************************************/

  72. void xiemingling1302(uchar cmd,uchar dat)//寫命令 數(shù)據(jù)
  73. {
  74.         CE=0;//禁止數(shù)據(jù)傳遞
  75.         SCLK=0; //確保寫數(shù)據(jù)前SCLK被拉低
  76.         CE=1; //啟動數(shù)據(jù)傳輸
  77.         delayus(2); //稍微等待,使硬件做好準備
  78.         xie1302(cmd); //寫入命令字
  79.         xie1302(dat); //寫數(shù)據(jù)
  80.         SCLK=1; //將時鐘電平置于已知狀態(tài)
  81.         CE=0; //禁止數(shù)據(jù)傳遞        
  82. }

  83. /***********************************************************************************************************
  84. * 函數(shù)名稱: dumingling1302()
  85. * 輸入?yún)?shù): uchar
  86. * 輸出參數(shù): uchar
  87. *
  88. * 功    能:向ds1302寫指令、讀數(shù)據(jù)
  89. *
  90. * 備    注:實際上是調(diào)用一次xie1302()一次du1302(),分別寫入指令、讀出數(shù)據(jù)
  91. *
  92. *
  93. * 完成時間: 2019.12.25
  94. ************************************************************************************************************/

  95. uchar dumingling1302(uchar cmd)
  96. {
  97.         uchar dat;
  98.         CE=0; //拉低RST
  99.         SCLK=0; //確保寫數(shù)居前SCLK被拉低
  100.         CE=1; //啟動數(shù)據(jù)傳輸
  101.         xie1302(cmd); //寫入命令字
  102.         dat=du1302(); //讀出數(shù)據(jù)
  103.         SCLK=1; //將時鐘電平置于已知狀態(tài)
  104.         CE=0; //禁止數(shù)據(jù)傳遞
  105.         return dat; //將讀出的數(shù)據(jù)返回
  106. }

  107. /***********************************************************************************************************
  108. * 函數(shù)名稱: zhuanhuan()
  109. * 輸入?yún)?shù): void
  110. * 輸出參數(shù): void
  111. *
  112. * 功    能:讀ds1302的時鐘數(shù)據(jù),并轉(zhuǎn)換之后緩存在shijian[]數(shù)組的相應(yīng)的位
  113. *
  114. * 備    注:實際上是分別讀取ds1302的周、秒、分鐘、小時、日、月、年信息,并根據(jù)數(shù)據(jù)手冊取出其相應(yīng)的位進行存儲
  115. *
  116. *
  117. * 完成時間: 2019.12.25
  118. ************************************************************************************************************/

  119. void zhuanhuan()//轉(zhuǎn)換
  120. {
  121.         
  122.         uchar a,b,c,d,e,f,g;
  123.                 g=dumingling1302(0x8B);//周
  124.                 f=dumingling1302(0x81);//秒
  125.                 e=dumingling1302(0x83);//分鐘
  126.                 d=dumingling1302(0x85);//小時
  127.                 c=dumingling1302(0x87);//日
  128.                 b=dumingling1302(0x89);//月
  129.                 a=dumingling1302(0x8D);//年
  130.                                 
  131.                 shijian[12]=(g&0x07);//周轉(zhuǎn)化個位               
  132.                 shijian[11]=(f&0x0f);//秒轉(zhuǎn)化個位
  133.                 shijian[10]=(f&0x70)>>4;//秒轉(zhuǎn)化十位
  134.                 shijian[9]=(e&0x0f);//分鐘轉(zhuǎn)化個位
  135.                 shijian[8]=(e&0x70)>>4;//分鐘轉(zhuǎn)化十位               
  136.                 shijian[7]=(d&0x0f);//小時轉(zhuǎn)化個位
  137.                 shijian[6]=(d&0x30)>>4;//小時轉(zhuǎn)化十位                                
  138.                 shijian[5]=(c&0x0f);//日轉(zhuǎn)化個位
  139.                 shijian[4]=(c&0x70)>>4;//日轉(zhuǎn)化十位
  140.                 shijian[3]=(b&0x0f);//月轉(zhuǎn)化個位
  141.                 shijian[2]=(b&0x10)>>4;//月轉(zhuǎn)化十位
  142.                 shijian[1]=(a&0x0f);//年轉(zhuǎn)化個位
  143.                 shijian[0]=(a>>4);//年轉(zhuǎn)化十位
  144. }

  145. /***********************************************************************************************************
  146. * 函數(shù)名稱: xieshijian()
  147. * 輸入?yún)?shù): uchar ,uchar ,uchar ,uchar ,uchar , uchar ,uchar
  148. * 輸出參數(shù): void
  149. *
  150. * 功    能:向DS1302寫入時鐘數(shù)據(jù)
  151. *
  152. * 備    注:無
  153. *
  154. *
  155. * 完成時間: 2019.12.25
  156. ************************************************************************************************************/

  157. void xieshijian(uchar nian,uchar yue,uchar ri,uchar shi,uchar fen, uchar miao,uchar zhou)
  158. {
  159.         
  160.                 xiemingling1302(0x8E,0x00);//根據(jù)寫狀態(tài)寄存器命令字, 寫入不保護指令
  161.                 xiemingling1302(0x80,((miao/10)<<4|(miao%10))); //根據(jù)寫秒寄存器命令字,寫入秒的初始值
  162.                 xiemingling1302(0x82,((fen/10)<<4|(fen%10))); //根據(jù)寫分寄存器命令字,寫入分的初始值
  163.                 xiemingling1302(0x84,((shi/10)<<4|(shi%10))); // 根據(jù)寫小時寄存器命令字,寫入小時的初始值
  164.                 xiemingling1302(0x86,((ri/10)<<4|(ri%10))); // 根據(jù)寫日寄存器命令字,寫入日的初始值
  165.                 xiemingling1302(0x88,((yue/10)<<4|(yue%10))); // 根據(jù)寫月寄存器命令字,寫入月的初始值
  166.                 xiemingling1302(0x8c,((nian/10)<<4|(nian%10))); //根據(jù)寫年寄存器命令字,寫入年的初始值
  167.                 xiemingling1302(0x8B,((zhou/10)<<4|(zhou%10))); //根據(jù)寫周寄存器命令字,寫入周的初始值

  168. }
復制代碼

ds18b20驅(qū)動:
  1. #include "18b20.h"
  2. #include <delay.H>
  3. #include <shumaguan.H>

  4. int wendu;//溫度信息
  5. bit deng=0;//等待標志位

  6. /***********************************************************************************************************
  7. * 函數(shù)名稱: DS18b20Init()
  8. * 輸入?yún)?shù):void
  9. * 輸出參數(shù): void
  10. *
  11. * 功    能: ds18b20初始化程序
  12. *
  13. * 備    注:無
  14. *
  15. *
  16. * 完成時間: 2019.12.25
  17. ************************************************************************************************************/

  18. void DS18b20Init()
  19. {
  20.         if(deng==0)
  21.         {
  22.                 DQ = 0;                         //將總線拉低480us~960us
  23.                 Delay640us();
  24.                 DQ = 1;                        //然后拉高總線,如果DS18B20做出反應(yīng)會將在15us~60us后總線拉低
  25.                 deng=1;
  26.         }
  27.         if(DQ&&deng==1)        //等待DS18B20拉低總線
  28.         {
  29.                 deng=0;
  30.                  Delay60us();
  31.         }
  32. }

  33. /***********************************************************************************************************
  34. * 函數(shù)名稱: DS18b20WriteByte()
  35. * 輸入?yún)?shù):uchar
  36. * 輸出參數(shù): void
  37. *
  38. * 功    能: ds18b20寫數(shù)據(jù)程序
  39. *
  40. * 備    注:注意時間的把握
  41. *
  42. *
  43. * 完成時間: 2019.12.25
  44. ************************************************************************************************************/

  45. void DS18b20WriteByte(uchar dat)
  46. {
  47.         uint i;

  48.         for(i=0; i<8; i++)
  49.         {
  50.                 DQ = 0;                       //每寫入一位數(shù)據(jù)之前先把總線拉低1us
  51.                 Delay1us();
  52.                 DQ = dat & 0x01;  //然后寫入一個數(shù)據(jù),從最低位開始
  53.     Delay68us();
  54.                 DQ = 1;        //然后釋放總線,至少1us給總線恢復時間才能接著寫入第二個數(shù)值
  55.                 dat >>= 1;
  56.         }
  57. }

  58. /***********************************************************************************************************
  59. * 函數(shù)名稱: DS18b20ReadByte()
  60. * 輸入?yún)?shù): void
  61. * 輸出參數(shù): uchar
  62. *
  63. * 功    能: ds18b20讀數(shù)據(jù)程序
  64. *
  65. * 備    注:注意時間的把握
  66. *
  67. *
  68. * 完成時間: 2019.12.25
  69. ************************************************************************************************************/

  70. uchar DS18b20ReadByte()
  71. {
  72.         uchar byte, bi;
  73.         uint i;        
  74.         
  75.         for(i=8; i>0; i--)
  76.         {
  77.                 DQ = 0;//先將總線拉低1us
  78.                 Delay1us();
  79.                 DQ = 1;//然后釋放總線
  80.                 Delay6us();
  81.                 bi = DQ;         //讀取數(shù)據(jù),從最低位開始讀取
  82.                 /*將byte左移一位,然后與上右移7位后的bi,注意移動之后移掉那位補0。*/
  83.                 byte = (byte >> 1) | (bi << 7);                                                  
  84.                 Delay48us();                //讀取完之后等待48us再接著讀取下一個數(shù)
  85.         }                                
  86.         return byte;
  87. }

  88. /***********************************************************************************************************
  89. * 函數(shù)名稱: DS18b20ChangTemp()
  90. * 輸入?yún)?shù): void
  91. * 輸出參數(shù): void
  92. *
  93. * 功    能: 向ds18b20寫啟動溫度轉(zhuǎn)換命令
  94. *
  95. * 備    注:
  96. *
  97. *
  98. * 完成時間: 2019.12.25
  99. ************************************************************************************************************/

  100. void DS18b20ChangTemp()
  101. {
  102.         DS18b20Init();
  103.         Delay100us();
  104.         DS18b20WriteByte(0xcc);                //跳過ROM操作命令                 
  105.         DS18b20WriteByte(0x44);            //溫度轉(zhuǎn)換命令
  106. }

  107. /***********************************************************************************************************
  108. * 函數(shù)名稱: DS18b20ReadTempCom()
  109. * 輸入?yún)?shù): void
  110. * 輸出參數(shù): void
  111. *
  112. * 功    能: 向ds18b20寫讀取溫度命令
  113. *
  114. * 備    注:
  115. *
  116. *
  117. * 完成時間: 2019.12.25
  118. ************************************************************************************************************/

  119. void DS18b20ReadTempCom()
  120. {        
  121.         DS18b20Init();
  122.         Delay100us();
  123.         DS18b20WriteByte(0xcc);         //跳過ROM操作命令
  124.         DS18b20WriteByte(0xbe);         //發(fā)送讀取溫度命令
  125. }

  126. /***********************************************************************************************************
  127. * 函數(shù)名稱: DS18b20ReadTemp()
  128. * 輸入?yún)?shù): void
  129. * 輸出參數(shù): int
  130. *
  131. * 功    能: 讀取ds18b20溫度
  132. *
  133. * 備    注:讀取ds18b20溫度,并返回出來
  134. *
  135. *
  136. * 完成時間: 2019.12.25
  137. ************************************************************************************************************/

  138. int DS18b20ReadTemp()
  139. {
  140.         int temp = 0;
  141.         uchar tmh, tml;
  142.         DS18b20ChangTemp();                                 //先寫入轉(zhuǎn)換命令
  143.         DS18b20ReadTempCom();                        //然后等待轉(zhuǎn)換完后發(fā)送讀取溫度命令
  144.         tml = DS18b20ReadByte();                //讀取溫度值共16位,先讀低字節(jié)
  145.         tmh = DS18b20ReadByte();                //再讀高字節(jié)
  146.         temp = tmh;
  147.         temp <<= 8;
  148.         temp |= tml;
  149.         if(tmh>0x07)
  150.         {
  151.                 temp=~temp+1;
  152.                 temp=temp*6.25;
  153.                 temp=temp+5;
  154.                 temp=temp/10;
  155.                 temp=temp+10000;
  156.         }
  157.         else
  158.         {
  159.                 temp=temp*6.25;
  160.                 temp=temp+5;
  161.                 temp=temp/10;
  162.         }
  163.         return temp;
  164. }

  165. /***********************************************************************************************************
  166. * 函數(shù)名稱: xianshiwendu()
  167. * 輸入?yún)?shù): void
  168. * 輸出參數(shù): void
  169. *
  170. * 功    能: 轉(zhuǎn)換溫度數(shù)據(jù)
  171. *
  172. * 備    注:無
  173. *
  174. *
  175. * 完成時間: 2019.12.25
  176. ************************************************************************************************************/

  177. void xianshiwendu()
  178. {
  179.           wendu=DS18b20ReadTemp();
  180.                 if(wendu<10000) xianshi5(28,wendu%1000/100,wendu%100/10+17,wendu%10,12);
  181.                 if(wendu>10000) xianshi5(27,wendu%1000/100,wendu%100/10+17,wendu%10,12);

  182. }







復制代碼

菜單程序(主要邏輯):
  1. #include <STC8.H>
  2. #include <caidan.H>
  3. #include <ds1302.H>
  4. #include <shumaguan.H>
  5. #include <anjian.H>
  6. #include <delay.H>
  7. #include <eeprom.h>
  8. #include <fengmingqi.H>
  9. #include <18b20.H>

  10. extern uchar shijian[13];               
  11. extern uint ms1;//用于閃爍計時
  12. extern uint ms2;//用于按鍵長按快加計時
  13. extern uint ms4;//用于循環(huán)顯示計時
  14. bit changan=0;//長按標志位

  15. uint n=0;//計算平年閏年
  16. uint y=0;//計算月份
  17. bit runnian=1; //閏年標志位
  18. uchar yue=0;//大月標志位 1大月 2 2月 0小月

  19. uchar tiaozheng[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};//調(diào)整時間數(shù)據(jù)暫存數(shù)組

  20. uchar cd=0;//菜單
  21. bit aj1,aj2,aj3,aj4;

  22. extern int nao_kaiguan,nao_shi,nao_fen,nao2_kaiguan,nao2_shi,nao2_fen,wendu_kaiguan;//eeprom數(shù)據(jù)

  23. bit s;//鬧鐘1、2切換標志位

  24. extern int wendu;//溫度信息

  25. /***********************************************************************************************************
  26. * 函數(shù)名稱: caidan()
  27. * 輸入?yún)?shù): void
  28. * 輸出參數(shù): void
  29. *
  30. * 功    能: 菜單程序
  31. *
  32. * 備    注: 該程序是本作品的核心  
  33. *0級菜單用于正常顯示時間、日期、溫度;
  34. *1級菜單用于閃爍全部的時間(提示是否修改)
  35. *2級菜單用于顯示日期的全部閃爍(提示是否修改)
  36. *3級菜單用于閃爍al(提示是否修改鬧鐘信息)
  37. *4級菜單用于閃爍temp(提示是否修改溫度開關(guān))   
  38. *5級菜單預留
  39. *10級菜單用于閃爍小時位                       
  40. *11級菜單用于閃爍分鐘位
  41. *12級菜單用于閃爍秒位                        
  42. *13級級菜單用于閃爍年位
  43. *14級菜單用于閃爍月位                          
  44. *15級級菜單用于閃爍日位
  45. *16級菜單用于閃爍鬧鐘一的開關(guān)                  
  46. *17級級菜單用于閃爍鬧鐘一的時位
  47. *18級菜單用于閃爍鬧鐘一的分位               
  48. *19級級菜單用于閃爍溫度的開關(guān)
  49. *20級菜單用于閃爍鬧鐘一鬧鐘二選擇位         
  50. *21級菜單用于閃爍鬧鐘二的開關(guān)
  51. *22級菜單用于閃爍鬧鐘二的時位               
  52. *23級菜單用于閃爍鬧鐘二的分位
  53. *
  54. *
  55. * 完成時間: 2019.12.25
  56. ************************************************************************************************************/

  57. void caidan()
  58. {
  59.         zhuanhuan();//獲取時間信息
  60.         naozhong();//檢測鬧鐘
  61.         if(cd==0)//0級菜單
  62.         {
  63.                 if(ms4>0&&ms4<10000)        xianshi(shijian[6],shijian[7],27,shijian[8],shijian[9],27,shijian[10],shijian[11]);
  64.     if(ms4>10000&&ms4<10100)         wendu=DS18b20ReadTemp();               
  65.                 if(ms4>10100&&ms4<15000) xianshi(2,0,shijian[0],shijian[1]+17,shijian[2],shijian[3]+17,shijian[4],shijian[5]);
  66.                 if(wendu_kaiguan==0&&ms4>15000) ms4=0;
  67.                 if(ms4>15200&&ms4<20000) xianshiwendu();         
  68.                 if(ms4>20000) ms4=0;
  69.                 if(anjian1==0&&aj1==0)
  70.                 {
  71.                         delay(5);
  72.                         if(anjian1==0) aj1=1;
  73.                 }
  74.                 if(anjian1==1&&aj1==1) aj1=0,cd=1,ms1=0;//按鍵1按下松開,去1級菜單        
  75.         }
  76.         if(cd==1)//1級菜單 閃爍全部時間
  77.         {
  78.                 if(ms1>0&&ms1<300)        xianshi(shijian[6],shijian[7],27,shijian[8],shijian[9],27,shijian[10],shijian[11]);
  79.                 if(ms1>300&&ms1<600)  xianshi(28,28,27,28,28,27,28,28);
  80.                 if(ms1>600) ms1=0;
  81.                
  82.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  83.                 {
  84.                         delay(5);
  85.                         if(anjian1==0) aj1=1;
  86.                 }
  87.                 if(anjian1==1&&aj1==1) aj1=0,cd=2,ms1=0;//按鍵1按下松開,去2級菜單
  88.                
  89.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  90.                 {
  91.                         delay(5);
  92.                         if(anjian2==0) aj2=1;
  93.                 }
  94.                 if(anjian2==1&&aj2==1)
  95.                 {
  96.                         tiaozheng[0]=shijian[0];
  97.                         tiaozheng[1]=shijian[1];
  98.                         tiaozheng[2]=shijian[2];
  99.                         tiaozheng[3]=shijian[3];
  100.                         tiaozheng[4]=shijian[4];
  101.                         tiaozheng[5]=shijian[5];
  102.                         tiaozheng[6]=shijian[6];
  103.                         tiaozheng[7]=shijian[7];
  104.                         tiaozheng[8]=shijian[8];
  105.                         tiaozheng[9]=shijian[9];
  106.                         tiaozheng[10]=shijian[10];
  107.                         tiaozheng[11]=shijian[11];
  108.                         aj2=0;
  109.                         cd=10;
  110.                         ms1=0;//按鍵2按下松開,去10級菜單
  111.                 }
  112.         }
  113.         
  114.         if(cd==2)//2級菜單 閃爍全部日期
  115.         {
  116.                 if(ms1>0&&ms1<300)        xianshi(2,0,shijian[0],shijian[1]+17,shijian[2],shijian[3]+17,shijian[4],shijian[5]);
  117.                 if(ms1>300&&ms1<600)  xianshi(28,28,28,29,28,29,28,28);
  118.                 if(ms1>600) ms1=0;
  119.                
  120.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  121.                 {
  122.                         delay(5);
  123.                         if(anjian1==0) aj1=1;
  124.                 }
  125.                 if(anjian1==1&&aj1==1) aj1=0,cd=3,ms1=0;//按鍵1按下松開,去3級菜單
  126.                
  127.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  128.                 {
  129.                         delay(5);
  130.                         if(anjian2==0) aj2=1;
  131.                 }
  132.                 if(anjian2==1&&aj2==1)
  133.                 {
  134.                         tiaozheng[0]=shijian[0];
  135.                         tiaozheng[1]=shijian[1];
  136.                         tiaozheng[2]=shijian[2];
  137.                         tiaozheng[3]=shijian[3];
  138.                         tiaozheng[4]=shijian[4];
  139.                         tiaozheng[5]=shijian[5];
  140.                         tiaozheng[6]=shijian[6];
  141.                         tiaozheng[7]=shijian[7];
  142.                         tiaozheng[8]=shijian[8];
  143.                         tiaozheng[9]=shijian[9];
  144.                         tiaozheng[10]=shijian[10];
  145.                         tiaozheng[11]=shijian[11];

  146.                         aj2=0;
  147.                         cd=13;
  148.                         ms1=0;//按鍵2按下松開,去13級菜單
  149.                 }
  150.         }
  151.         if(cd==3)//3級菜單 顯示al鬧鐘
  152.         {
  153.                 if(ms1>0&&ms1<300)        xianshi(27,27,27,30,31,27,27,27);
  154.                 if(ms1>300&&ms1<600)  xianshi(27,27,27,28,28,27,27,27);
  155.                 if(ms1>600) ms1=0;
  156.         
  157.                  if(anjian1==0&&aj1==0)//檢測按鍵1
  158.           {
  159.                   delay(5);
  160.                   if(anjian1==0) aj1=1;
  161.           }
  162.           if(anjian1==1&&aj1==1) aj1=0,cd=4,ms1=0;//按鍵1按下松開,去4級菜單
  163.                
  164.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  165.                 {
  166.                         delay(5);
  167.                         if(anjian2==0) aj2=1;
  168.                 }
  169.                 if(anjian2==1&&aj2==1)
  170.                 {
  171.                         aj2=0;
  172.                         cd=20;
  173.                         dunaozhong();//讀取鬧鐘數(shù)據(jù)
  174.                         ms1=0;//按鍵2按下松開,去20級菜單
  175.                 }
  176.         }
  177.         
  178.         if(cd==4)//4級菜單 顯示temp 溫度
  179.         {
  180.                 if(ms1>0&&ms1<300)        xianshi(27,27,32,33,34,33,27,27);
  181.                 if(ms1>300&&ms1<600)  xianshi(27,27,28,28,28,28,27,27);
  182.                 if(ms1>600) ms1=0;
  183.                
  184.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  185.           {
  186.                         
  187.                   delay(5);
  188.                   if(anjian1==0) aj1=1;
  189.           }
  190.           if(anjian1==1&&aj1==1) aj1=0,cd=0,ms1=0;//按鍵1按下松開,去0級菜單
  191.                
  192.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  193.                 {
  194.                         delay(5);
  195.                         if(anjian2==0) aj2=1;
  196.                 }
  197.                 if(anjian2==1&&aj2==1)
  198.                 {
  199.                         aj2=0;
  200.                         cd=19;
  201.                         wendu_kaiguan=IapRead(0x0800);
  202.                         ms1=0;//按鍵2按下松開,去19級菜單
  203.                 }               
  204.         }
  205.         
  206.         if(cd==5)//5級菜單 預留
  207.         {
  208. //                if(ms1>0&&ms1<300)        xianshi(27,27,35,31,32,36,27,27);
  209. //                if(ms1>300&&ms1<600)  xianshi(27,27,28,28,28,28,27,27);
  210. //                if(ms1>600) ms1=0;
  211. //               
  212. //                if(anjian1==0&&aj1==0)//檢測按鍵1
  213. //          {
  214. //                  delay(5);
  215. //                  if(anjian1==0) aj1=1;
  216. //          }
  217. //          if(anjian1==1&&aj1==1) aj1=0,cd=0,ms1=0;//按鍵1按下松開,去0級菜單
  218. //                if(anjian2==0&&aj2==0)//檢測按鍵2
  219. //                {
  220. //                        delay(5);
  221. //                        if(anjian2==0) aj2=1;
  222. //                }
  223. //                if(anjian2==1&&aj2==1)
  224. //                {
  225. //                        aj2=0;
  226. //                        cd=20;//按鍵2按下松開,去20級菜單
  227. //                }               

  228.         }
  229.         
  230.         while(cd==10)//10級菜單  小時位閃爍調(diào)整
  231.         {
  232.                 if(ms1>0&&ms1<300)        xianshi(tiaozheng[6],tiaozheng[7],27,tiaozheng[8],tiaozheng[9],27,tiaozheng[10],tiaozheng[11]);
  233.                 if(ms1>300&&ms1<600)  xianshi(28,28,27,tiaozheng[8],tiaozheng[9],27,tiaozheng[10],tiaozheng[11]);
  234.                 if(ms1>600) ms1=0;
  235.                 if(ms1>300&&changan==1) ms1=0;
  236.                
  237.                
  238.                
  239.                 if(anjian3==0&&aj3==0)//檢測按鍵3
  240.           {
  241.                   delay(5);
  242.                   if(anjian3==0) aj3=1,ms2=0;
  243.           }
  244.           if(anjian3==1&&aj3==1)
  245.                 {
  246.                         tiaozheng[7]++;
  247.                         if((tiaozheng[6]==2)&&(tiaozheng[7]==4)) tiaozheng[6]=tiaozheng[7]=0;
  248.                         if(((tiaozheng[6]==0)||(tiaozheng[6]==1))&&(tiaozheng[7]==10)) tiaozheng[6]++,tiaozheng[7]=0;
  249.                         changan=0;
  250.                         aj3=0;//按鍵1按下松開,小時++
  251.                 }
  252.                 if(aj3==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  253.                 if(aj3==1&&changan==1&&ms2>=100)//快加
  254.                 {
  255.                         tiaozheng[7]++;
  256.                         if((tiaozheng[6]==2)&&(tiaozheng[7]==4)) tiaozheng[6]=tiaozheng[7]=0;
  257.                         if(((tiaozheng[6]==0)||(tiaozheng[6]==1))&&(tiaozheng[7]==10)) tiaozheng[6]++,tiaozheng[7]=0;
  258.                         ms2=0;
  259.                 }
  260.                
  261.                 if(anjian4==0&&aj4==0)//檢測按鍵4
  262.           {
  263.                   delay(5);
  264.                   if(anjian4==0) aj4=1,ms2=0;
  265.           }
  266.           if(anjian4==1&&aj4==1)
  267.                 {
  268.                         tiaozheng[7]--;
  269.                         if((tiaozheng[6]==0)&&(tiaozheng[7]>100)) tiaozheng[6]=2,tiaozheng[7]=3;
  270.                         if(((tiaozheng[6]==2)||(tiaozheng[6]==1))&&(tiaozheng[7]>100)) tiaozheng[6]--,tiaozheng[7]=9;
  271.                         changan=0;
  272.                         aj4=0;//按鍵1按下松開,小時--
  273.                 }
  274.                 if(aj4==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  275.                 if(aj4==1&&changan==1&&ms2>=100)//快減
  276.                 {
  277.                         tiaozheng[7]--;
  278.                         if((tiaozheng[6]==0)&&(tiaozheng[7]>100)) tiaozheng[6]=2,tiaozheng[7]=3;
  279.                         if(((tiaozheng[6]==2)||(tiaozheng[6]==1))&&(tiaozheng[7]>100)) tiaozheng[6]--,tiaozheng[7]=9;
  280.                         ms2=0;
  281.                 }
  282.                
  283.                
  284.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  285.                 {
  286.                         delay(5);
  287.                         if(anjian2==0) aj2=1;
  288.                 }
  289.                 if(anjian2==1&&aj2==1)
  290.                 {
  291.                         aj2=0;
  292.                         cd=11;
  293.                         ms1=0;//按鍵2按下松開,去11級菜單
  294.                 }

  295.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  296.                 {
  297.                         delay(5);
  298.                         if(anjian1==0) aj1=1;
  299.                 }
  300.                 if(anjian1==1&&aj1==1)
  301.                 {
  302.                         aj1=0;
  303.                         cd=2;
  304.                         xieshijian(tiaozheng[0]*10+tiaozheng[1],tiaozheng[2]*10+tiaozheng[3],tiaozheng[4]*10+tiaozheng[5],tiaozheng[6]*10+tiaozheng[7],tiaozheng[8]*10+tiaozheng[9],tiaozheng[10]*10+tiaozheng[11],shijian[12]);
  305.                         ms1=0;//按鍵1按下松開,去2級菜單
  306.                 }
  307.         }
  308.         while(cd==11)//11級菜單  分鐘位閃爍調(diào)整
  309.         {
  310.                 if(ms1>0&&ms1<300)        xianshi(tiaozheng[6],tiaozheng[7],27,tiaozheng[8],tiaozheng[9],27,tiaozheng[10],tiaozheng[11]);
  311.                 if(ms1>300&&ms1<600)  xianshi(tiaozheng[6],tiaozheng[7],27,28,28,27,tiaozheng[10],tiaozheng[11]);
  312.                 if(ms1>600) ms1=0;
  313.                 if(ms1>300&&changan==1) ms1=0;
  314.                
  315.                 if(anjian3==0&&aj3==0)//檢測按鍵3
  316.           {
  317.                   delay(5);
  318.                   if(anjian3==0) aj3=1,ms2=0;
  319.           }
  320.           if(anjian3==1&&aj3==1)
  321.                 {
  322.                         tiaozheng[9]++;
  323.                         if(tiaozheng[9]==10) tiaozheng[8]++,tiaozheng[9]=0;
  324.                         if(tiaozheng[8]==6) tiaozheng[8]=tiaozheng[9]=0;
  325.                         changan=0;
  326.                         aj3=0;//按鍵1按下松開,小時++
  327.                 }
  328.                 if(aj3==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  329.                 if(aj3==1&&changan==1&&ms2>=100)//快加
  330.                 {
  331.                         tiaozheng[9]++;
  332.                         if(tiaozheng[9]==10) tiaozheng[8]++,tiaozheng[9]=0;
  333.                         if(tiaozheng[8]==6) tiaozheng[8]=tiaozheng[9]=0;
  334.                         ms2=0;
  335.                 }
  336.                
  337.                 if(anjian4==0&&aj4==0)//檢測按鍵4
  338.           {
  339.                   delay(5);
  340.                   if(anjian4==0) aj4=1,ms2=0;
  341.           }
  342.           if(anjian4==1&&aj4==1)
  343.                 {
  344.                         tiaozheng[9]--;
  345.                         if(tiaozheng[9]>100) tiaozheng[8]--,tiaozheng[9]=9;
  346.                         if(tiaozheng[8]>100) tiaozheng[8]=5,tiaozheng[9]=9;
  347.                         changan=0;
  348.                         aj4=0;//按鍵1按下松開,小時--
  349.                 }
  350.                 if(aj4==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  351.                 if(aj4==1&&changan==1&&ms2>=100)//快減
  352.                 {
  353.                         tiaozheng[9]--;
  354.                         if(tiaozheng[9]>100) tiaozheng[8]--,tiaozheng[9]=9;
  355.                         if(tiaozheng[8]>100) tiaozheng[8]=5,tiaozheng[9]=9;
  356.                         ms2=0;
  357.                 }

  358.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  359.                 {
  360.                         delay(5);
  361.                         if(anjian2==0) aj2=1;
  362.                 }
  363.                 if(anjian2==1&&aj2==1)
  364.                 {
  365.                         aj2=0;
  366.                         cd=12;
  367.                         ms1=0;//按鍵2按下松開,去12級菜單
  368.                 }

  369.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  370.                 {
  371.                         delay(5);
  372.                         if(anjian1==0) aj1=1;
  373.                 }
  374.                 if(anjian1==1&&aj1==1)
  375.                 {
  376.                         aj1=0;
  377.                         cd=2;
  378.                         xieshijian(tiaozheng[0]*10+tiaozheng[1],tiaozheng[2]*10+tiaozheng[3],tiaozheng[4]*10+tiaozheng[5],tiaozheng[6]*10+tiaozheng[7],tiaozheng[8]*10+tiaozheng[9],tiaozheng[10]*10+tiaozheng[11],shijian[12]);
  379.                         ms1=0;//按鍵1按下松開,去2級菜單
  380.                 }               
  381.         
  382.         }

  383.         while(cd==12)//12級菜單  秒位閃爍調(diào)整
  384.         {
  385.                 if(ms1>0&&ms1<300)        xianshi(tiaozheng[6],tiaozheng[7],27,tiaozheng[8],tiaozheng[9],27,tiaozheng[10],tiaozheng[11]);
  386.                 if(ms1>300&&ms1<600)  xianshi(tiaozheng[6],tiaozheng[7],27,tiaozheng[8],tiaozheng[9],27,28,28);
  387.                 if(ms1>600) ms1=0;
  388.                 if(ms1>300&&changan==1) ms1=0;
  389.                
  390.                 if(anjian3==0&&aj3==0)//檢測按鍵3
  391.           {
  392.                   delay(5);
  393.                   if(anjian3==0) aj3=1,ms2=0;
  394.           }
  395.           if(anjian3==1&&aj3==1)
  396.                 {
  397.                         tiaozheng[11]++;
  398.                         if(tiaozheng[11]==10) tiaozheng[10]++,tiaozheng[11]=0;
  399.                         if(tiaozheng[10]==6) tiaozheng[10]=tiaozheng[11]=0;
  400.                         changan=0;
  401.                         aj3=0;//按鍵1按下松開,小時++
  402.                 }
  403.                 if(aj3==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  404.                 if(aj3==1&&changan==1&&ms2>=100)//快加
  405.                 {
  406.                         tiaozheng[11]++;
  407.                         if(tiaozheng[11]==10) tiaozheng[10]++,tiaozheng[11]=0;
  408.                         if(tiaozheng[10]==6) tiaozheng[10]=tiaozheng[11]=0;
  409.                         ms2=0;
  410.                 }
  411.                
  412.                 if(anjian4==0&&aj4==0)//檢測按鍵4
  413.           {
  414.                   delay(5);
  415.                   if(anjian4==0) aj4=1,ms2=0;
  416.           }
  417.           if(anjian4==1&&aj4==1)
  418.                 {
  419.                         tiaozheng[11]--;
  420.                         if(tiaozheng[11]>100) tiaozheng[10]--,tiaozheng[11]=9;
  421.                         if(tiaozheng[10]>100) tiaozheng[10]=5,tiaozheng[11]=9;
  422.                         changan=0;
  423.                         aj4=0;//按鍵1按下松開,小時--
  424.                 }
  425.                 if(aj4==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  426.                 if(aj4==1&&changan==1&&ms2>=100)//快減
  427.                 {
  428.                         tiaozheng[11]--;
  429.                         if(tiaozheng[11]>100) tiaozheng[10]--,tiaozheng[11]=9;
  430.                         if(tiaozheng[10]>100) tiaozheng[10]=5,tiaozheng[11]=9;
  431.                         ms2=0;
  432.                 }

  433.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  434.                 {
  435.                         delay(5);
  436.                         if(anjian2==0) aj2=1;
  437.                 }
  438.                 if(anjian2==1&&aj2==1)
  439.                 {
  440.                         aj2=0;
  441.                         cd=10;
  442.                         ms1=0;//按鍵2按下松開,去10級菜單
  443.                 }

  444.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  445.                 {
  446.                         delay(5);
  447.                         if(anjian1==0) aj1=1;
  448.                 }
  449.                 if(anjian1==1&&aj1==1)
  450.                 {
  451.                         aj1=0;
  452.                         cd=2;
  453.                         xieshijian(tiaozheng[0]*10+tiaozheng[1],tiaozheng[2]*10+tiaozheng[3],tiaozheng[4]*10+tiaozheng[5],tiaozheng[6]*10+tiaozheng[7],tiaozheng[8]*10+tiaozheng[9],tiaozheng[10]*10+tiaozheng[11],shijian[12]);
  454.                         ms1=0;//按鍵1按下松開,去2級菜單
  455.                 }               
  456.         }
  457.         while(cd==13)//第13級菜單 年位閃爍
  458.         {
  459.                 if(ms1>0&&ms1<300)        xianshi(2,0,tiaozheng[0],tiaozheng[1]+17,tiaozheng[2],tiaozheng[3]+17,tiaozheng[4],tiaozheng[5]);
  460.                 if(ms1>300&&ms1<600)  xianshi(28,28,28,29,tiaozheng[2],tiaozheng[3]+17,tiaozheng[4],tiaozheng[5]);
  461.                 if(ms1>600) ms1=0;
  462.                 if(ms1>300&&changan==1) ms1=0;

  463.                
  464.                 if(anjian3==0&&aj3==0)//檢測按鍵3
  465.           {
  466.                   delay(5);
  467.                   if(anjian3==0) aj3=1,ms2=0;
  468.           }
  469.           if(anjian3==1&&aj3==1)
  470.                 {
  471.                         tiaozheng[1]++;
  472.                         if(tiaozheng[1]==10) tiaozheng[0]++,tiaozheng[1]=0;
  473.                         if(tiaozheng[0]==10) tiaozheng[0]=tiaozheng[1]=0;
  474.                         changan=0;
  475.                         aj3=0;//按鍵1按下松開,小時++
  476.                 }
  477.                 if(aj3==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  478.                 if(aj3==1&&changan==1&&ms2>=100)//快加
  479.                 {
  480.                         tiaozheng[1]++;
  481.                         if(tiaozheng[1]==10) tiaozheng[0]++,tiaozheng[1]=0;
  482.                         if(tiaozheng[0]==10) tiaozheng[0]=tiaozheng[1]=0;
  483.                         ms2=0;
  484.                 }
  485.                 if(anjian4==0&&aj4==0)//檢測按鍵4
  486.           {
  487.                   delay(5);
  488.                   if(anjian4==0) aj4=1,ms2=0;
  489.           }
  490.           if(anjian4==1&&aj4==1)
  491.                 {
  492.                         tiaozheng[1]--;
  493.                         if(tiaozheng[1]>100) tiaozheng[0]--,tiaozheng[1]=9;
  494.                         if(tiaozheng[0]>100) tiaozheng[0]=9,tiaozheng[1]=9;
  495.                         changan=0;
  496.                         aj4=0;//按鍵1按下松開,小時--
  497.                 }
  498.                 if(aj4==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  499.                 if(aj4==1&&changan==1&&ms2>=100)//快減
  500.                 {
  501.                         tiaozheng[1]--;
  502.                         if(tiaozheng[1]>100) tiaozheng[0]--,tiaozheng[1]=9;
  503.                         if(tiaozheng[0]>100) tiaozheng[0]=9,tiaozheng[1]=9;
  504.                         ms2=0;
  505.                 }
  506.                
  507.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  508.                 {
  509.                         delay(5);
  510.                         if(anjian2==0) aj2=1;
  511.                 }
  512.                 if(anjian2==1&&aj2==1)
  513.                 {
  514.                         aj2=0;
  515.                         cd=14;
  516.                         ms1=0;//按鍵2按下松開,去14級菜單
  517.                 }               
  518.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  519.                 {
  520.                         delay(5);
  521.                         if(anjian1==0) aj1=1;
  522.                 }
  523.                 if(anjian1==1&&aj1==1)
  524.                 {
  525.                         aj1=0;
  526.                         cd=3;
  527.                         xieshijian(tiaozheng[0]*10+tiaozheng[1],tiaozheng[2]*10+tiaozheng[3],tiaozheng[4]*10+tiaozheng[5],tiaozheng[6]*10+tiaozheng[7],tiaozheng[8]*10+tiaozheng[9],tiaozheng[10]*10+tiaozheng[11],shijian[12]);
  528.                         ms1=0;//按鍵1按下松開,去3級菜單
  529.                 }               
  530.         }
  531.         
  532.         while(cd==14)//第14級菜單 月位閃爍
  533.         {
  534.                 if(ms1>0&&ms1<300)        xianshi(2,0,tiaozheng[0],tiaozheng[1]+17,tiaozheng[2],tiaozheng[3]+17,tiaozheng[4],tiaozheng[5]);
  535.                 if(ms1>300&&ms1<600)  xianshi(2,0,tiaozheng[0],tiaozheng[1]+17,28,28,tiaozheng[4],tiaozheng[5]);
  536.                 if(ms1>600) ms1=0;
  537.                 if(ms1>300&&changan==1) ms1=0;

  538.                
  539.                 if(anjian3==0&&aj3==0)//檢測按鍵3
  540.           {
  541.                   delay(5);
  542.                   if(anjian3==0) aj3=1,ms2=0;
  543.           }
  544.           if(anjian3==1&&aj3==1)
  545.                 {
  546.                         tiaozheng[3]++;
  547.                         if(tiaozheng[3]==10) tiaozheng[2]++,tiaozheng[3]=0;
  548.                         if(tiaozheng[2]==1&&tiaozheng[3]==3) tiaozheng[2]=0,tiaozheng[3]=1;
  549.                         changan=0;
  550.                         aj3=0;//按鍵1按下松開,小時++
  551.                 }
  552.                 if(aj3==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  553.                 if(aj3==1&&changan==1&&ms2>=100)//快加
  554.                 {
  555.                         tiaozheng[3]++;
  556.                         if(tiaozheng[3]==10) tiaozheng[2]++,tiaozheng[3]=0;
  557.                         if(tiaozheng[2]==1&&tiaozheng[3]==3) tiaozheng[2]=0,tiaozheng[3]=1;
  558.                         ms2=0;
  559.                 }
  560.                 if(anjian4==0&&aj4==0)//檢測按鍵4
  561.           {
  562.                   delay(5);
  563.                   if(anjian4==0) aj4=1,ms2=0;
  564.           }
  565.           if(anjian4==1&&aj4==1)
  566.                 {
  567.                         tiaozheng[3]--;
  568.                         if(tiaozheng[3]>100) tiaozheng[2]--,tiaozheng[3]=9;
  569.                         if(tiaozheng[2]==0&&tiaozheng[3]==0) tiaozheng[2]=1,tiaozheng[3]=2;
  570.                         changan=0;
  571.                         aj4=0;//按鍵1按下松開,小時--
  572.                 }
  573.                 if(aj4==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  574.                 if(aj4==1&&changan==1&&ms2>=100)//快減
  575.                 {
  576.                         tiaozheng[3]--;
  577.                         if(tiaozheng[3]>100) tiaozheng[2]--,tiaozheng[3]=9;
  578.                         if(tiaozheng[2]==0&&tiaozheng[3]==0) tiaozheng[2]=1,tiaozheng[3]=2;
  579.                         ms2=0;
  580.                 }
  581.                
  582.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  583.                 {
  584.                         delay(5);
  585.                         if(anjian2==0) aj2=1;
  586.                 }
  587.                 if(anjian2==1&&aj2==1)
  588.                 {
  589.                         aj2=0;
  590.                         cd=15;
  591.                         n=2000+tiaozheng[0]*10+tiaozheng[1];//計算平年閏年
  592.                         y=tiaozheng[2]*10+tiaozheng[3];
  593.                         if((n%4==0)&&(n%100!=0)) runnian=1; //閏年標志位
  594.                         else runnian=0;
  595.                         if(y==1||y==3||y==5||y==7||y==8||y==10||y==12) yue=1;//大月標志位
  596.                         else if(y==2) yue=2;//2月標志位
  597.                         else yue=0;//小月標志位
  598.                         ms1=0;//按鍵2按下松開,去15級菜單
  599.                 }               
  600.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  601.                 {
  602.                         delay(5);
  603.                         if(anjian1==0) aj1=1;
  604.                 }
  605.                 if(anjian1==1&&aj1==1)
  606.                 {
  607.                         aj1=0;
  608.                         cd=3;
  609.                         xieshijian(tiaozheng[0]*10+tiaozheng[1],tiaozheng[2]*10+tiaozheng[3],tiaozheng[4]*10+tiaozheng[5],tiaozheng[6]*10+tiaozheng[7],tiaozheng[8]*10+tiaozheng[9],tiaozheng[10]*10+tiaozheng[11],shijian[12]);
  610.                         ms1=0;//按鍵1按下松開,去3級菜單
  611.                 }               
  612.         }
  613.         while(cd==15)//第15級菜單 日位閃爍
  614.         {
  615.                 if(ms1>0&&ms1<300)        xianshi(2,0,tiaozheng[0],tiaozheng[1]+17,tiaozheng[2],tiaozheng[3]+17,tiaozheng[4],tiaozheng[5]);
  616.                 if(ms1>300&&ms1<600)  xianshi(2,0,tiaozheng[0],tiaozheng[1]+17,tiaozheng[2],tiaozheng[3]+17,28,28);
  617.                 if(ms1>600) ms1=0;
  618.                 if(ms1>300&&changan==1) ms1=0;

  619.                
  620.                 if(anjian3==0&&aj3==0)//檢測按鍵3
  621.           {
  622.                   delay(5);
  623.                   if(anjian3==0) aj3=1,ms2=0;
  624.           }
  625.           if(anjian3==1&&aj3==1)
  626.                 {
  627.                         tiaozheng[5]++;
  628.                         if(tiaozheng[5]==10) tiaozheng[4]++,tiaozheng[5]=0;
  629.                         if(runnian==1&&yue==2&&tiaozheng[4]==3) tiaozheng[4]=0,tiaozheng[5]=1;
  630.                         if(runnian==0&&yue==2&&tiaozheng[4]==2&&tiaozheng[5]==9) tiaozheng[4]=0,tiaozheng[5]=1;
  631.                         if(yue==1&&tiaozheng[4]==3&&tiaozheng[5]==2) tiaozheng[4]=0,tiaozheng[5]=1;
  632.                         if(yue==0&&tiaozheng[4]==3&&tiaozheng[5]==1) tiaozheng[4]=0,tiaozheng[5]=1;

  633.                         changan=0;
  634.                         aj3=0;//按鍵1按下松開,日++
  635.                 }
  636.                 if(aj3==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  637.                 if(aj3==1&&changan==1&&ms2>=100)//快加
  638.                 {
  639.                         tiaozheng[5]++;
  640.                         if(tiaozheng[5]==10) tiaozheng[4]++,tiaozheng[5]=0;
  641.                         if(runnian==1&&yue==2&&tiaozheng[4]==3) tiaozheng[4]=0,tiaozheng[5]=1;
  642.                         if(runnian==0&&yue==2&&tiaozheng[4]==2&&tiaozheng[5]==9) tiaozheng[4]=0,tiaozheng[5]=1;
  643.                         if(yue==1&&tiaozheng[4]==3&&tiaozheng[5]==2) tiaozheng[4]=0,tiaozheng[5]=1;
  644.                         if(yue==0&&tiaozheng[4]==3&&tiaozheng[5]==1) tiaozheng[4]=0,tiaozheng[5]=1;
  645.                         ms2=0;
  646.                 }
  647.                 if(anjian4==0&&aj4==0)//檢測按鍵4
  648.           {
  649.                   delay(5);
  650.                   if(anjian4==0) aj4=1,ms2=0;
  651.           }
  652.           if(anjian4==1&&aj4==1)
  653.                 {
  654.                         tiaozheng[5]--;
  655.                         if(tiaozheng[5]>100) tiaozheng[4]--,tiaozheng[5]=9;
  656.                         if(runnian==1&&yue==2&&tiaozheng[4]==0&&tiaozheng[5]==0) tiaozheng[4]=2,tiaozheng[5]=9;
  657.                         if(runnian==0&&yue==2&&tiaozheng[4]==0&&tiaozheng[5]==0) tiaozheng[4]=2,tiaozheng[5]=8;
  658.                         if(yue==1&&tiaozheng[4]==0&&tiaozheng[5]==0) tiaozheng[4]=3,tiaozheng[5]=1;
  659.                         if(yue==0&&tiaozheng[4]==0&&tiaozheng[5]==0) tiaozheng[4]=3,tiaozheng[5]=0;
  660.                         changan=0;
  661.                         aj4=0;//按鍵1按下松開,日--
  662.                 }
  663.                 if(aj4==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  664.                 if(aj4==1&&changan==1&&ms2>=100)//快減
  665.                 {
  666.                         tiaozheng[5]--;
  667.                         if(tiaozheng[5]>100) tiaozheng[4]--,tiaozheng[5]=9;
  668.                         if(runnian==1&&yue==2&&tiaozheng[4]==0&&tiaozheng[5]==0) tiaozheng[4]=2,tiaozheng[5]=9;
  669.                         if(runnian==0&&yue==2&&tiaozheng[4]==0&&tiaozheng[5]==0) tiaozheng[4]=2,tiaozheng[5]=8;
  670.                         if(yue==1&&tiaozheng[4]==0&&tiaozheng[5]==0) tiaozheng[4]=3,tiaozheng[5]=1;
  671.                         if(yue==0&&tiaozheng[4]==0&&tiaozheng[5]==0) tiaozheng[4]=3,tiaozheng[5]=0;
  672.                         ms2=0;
  673.                 }
  674.                
  675.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  676.                 {
  677.                         delay(5);
  678.                         if(anjian2==0) aj2=1;
  679.                 }
  680.                 if(anjian2==1&&aj2==1)
  681.                 {
  682.                         aj2=0;
  683.                         cd=13;
  684.                         ms1=0;//按鍵2按下松開,去13級菜單
  685.                 }               
  686.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  687.                 {
  688.                         delay(5);
  689.                         if(anjian1==0) aj1=1;
  690.                 }
  691.                 if(anjian1==1&&aj1==1)
  692.                 {
  693.                         aj1=0;
  694.                         cd=3;
  695.                         xieshijian(tiaozheng[0]*10+tiaozheng[1],tiaozheng[2]*10+tiaozheng[3],tiaozheng[4]*10+tiaozheng[5],tiaozheng[6]*10+tiaozheng[7],tiaozheng[8]*10+tiaozheng[9],tiaozheng[10]*10+tiaozheng[11],shijian[12]);
  696.                         ms1=0;//按鍵1按下松開,去3級菜單
  697.                 }               
  698.         }
  699.         while(cd==16)//菜單16 設(shè)置鬧鐘1開關(guān)
  700.         {
  701.                 if(nao_kaiguan==0)
  702.                 {
  703.                         if(ms1>0&&ms1<300)        xianshi(30,31,1,27,27,0,37,37);
  704.                         if(ms1>300&&ms1<600)  xianshi(30,31,1,27,27,28,28,28);
  705.                         if(ms1>600) ms1=0;
  706.                 }
  707.                 if(nao_kaiguan==1)
  708.                 {
  709.                         if(ms1>0&&ms1<300)        xianshi(30,31,1,27,27,27,0,38);
  710.                         if(ms1>300&&ms1<600)  xianshi(30,31,1,27,27,27,28,28);
  711.                         if(ms1>600) ms1=0;
  712.                 }
  713.                
  714.                 if(anjian3==0&&aj3==0)//檢測按鍵3
  715.                 {
  716.                         delay(5);
  717.                         if(anjian3==0) aj3=1;
  718.                 }
  719.                 if(anjian3==1&&aj3==1)
  720.                 {
  721.                         aj3=0;
  722.                         nao_kaiguan++;
  723.                 }
  724.                 if(anjian4==0&&aj4==0)//檢測按鍵4
  725.                 {
  726.                         delay(5);
  727.                         if(anjian4==0) aj4=1;
  728.                 }
  729.                 if(anjian4==1&&aj4==1)
  730.                 {
  731.                         aj4=0;
  732.                         nao_kaiguan++;
  733.                 }
  734.                 if(nao_kaiguan>1) nao_kaiguan=0;
  735.                
  736.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  737.                 {
  738.                         delay(5);
  739.                         if(anjian1==0) aj1=1;
  740.                 }
  741.                 if(anjian1==1&&aj1==1)
  742.                 {
  743.                         aj1=0;
  744.                         cd=4;
  745.                   IapErase(0x0200);
  746.                   IapProgram(0x0200, nao_kaiguan);//寫開關(guān)值
  747.                 }
  748.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  749.                 {
  750.                         delay(5);
  751.                         if(anjian2==0) aj2=1;
  752.                 }
  753.                 if(anjian2==1&&aj2==1)
  754.                 {
  755.                         aj2=0;
  756.                         cd=17;//去菜單17
  757.                   IapErase(0x0200);
  758.                   IapProgram(0x0200, nao_kaiguan);//寫開關(guān)值
  759.                 }
  760.         }
  761.         while(cd==17)//菜單17 設(shè)置鬧鐘1 時
  762.         {
  763.                 if(ms1>0&&ms1<300)        xianshi(27,nao_shi/10,nao_shi%10,27,27,nao_fen/10,nao_fen%10,27);
  764.                 if(ms1>300&&ms1<600)  xianshi(27,28,28,27,27,nao_fen/10,nao_fen%10,27);
  765.                 if(ms1>600) ms1=0;
  766.                 if(ms1>300&&changan==1) ms1=0;
  767.                
  768.                
  769.                
  770.                 if(anjian3==0&&aj3==0)//檢測按鍵3
  771.           {
  772.                   delay(5);
  773.                   if(anjian3==0) aj3=1,ms2=0;
  774.           }
  775.           if(anjian3==1&&aj3==1)
  776.                 {
  777.                         nao_shi++;
  778.                         if(nao_shi==25) nao_shi=0;
  779.                         changan=0;
  780.                         aj3=0;//按鍵1按下松開,小時++
  781.                 }
  782.                 if(aj3==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  783.                 if(aj3==1&&changan==1&&ms2>=100)//快加
  784.                 {
  785.                         nao_shi++;
  786.                         if(nao_shi==25) nao_shi=0;
  787.                         ms2=0;
  788.                 }
  789.                
  790.                 if(anjian4==0&&aj4==0)//檢測按鍵4
  791.           {
  792.                   delay(5);
  793.                   if(anjian4==0) aj4=1,ms2=0;
  794.           }
  795.           if(anjian4==1&&aj4==1)
  796.                 {
  797.                         nao_shi--;
  798.                         if(nao_shi<0) nao_shi=24;
  799.                         changan=0;
  800.                         aj4=0;//按鍵1按下松開,小時--
  801.                 }
  802.                 if(aj4==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  803.                 if(aj4==1&&changan==1&&ms2>=100)//快減
  804.                 {
  805.                         nao_shi--;
  806.                         if(nao_shi<0) nao_shi=24;
  807.                         ms2=0;
  808.                 }
  809.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  810.                 {
  811.                         delay(5);
  812.                         if(anjian1==0) aj1=1;
  813.                 }
  814.                 if(anjian1==1&&aj1==1)
  815.                 {
  816.                         aj1=0;
  817.                         cd=4;
  818.                   IapErase(0x0400);
  819.                   IapProgram(0x0400, nao_shi);//寫小時值
  820.                 }
  821.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  822.                 {
  823.                         delay(5);
  824.                         if(anjian2==0) aj2=1;
  825.                 }
  826.                 if(anjian2==1&&aj2==1)
  827.                 {
  828.                         aj2=0;
  829.                         cd=18;//去菜單18
  830.                   IapErase(0x0400);
  831.                   IapProgram(0x0400, nao_shi);//寫小時值
  832.                 }
  833.                
  834.         }
  835.         while(cd==18)//菜單18 設(shè)置鬧鐘1 分
  836.         {
  837.                 if(ms1>0&&ms1<300)        xianshi(27,nao_shi/10,nao_shi%10,27,27,nao_fen/10,nao_fen%10,27);
  838.                 if(ms1>300&&ms1<600)  xianshi(27,nao_shi/10,nao_shi%10,27,27,28,28,27);
  839.                 if(ms1>600) ms1=0;
  840.                 if(ms1>300&&changan==1) ms1=0;
  841.                
  842.                
  843.                
  844.                 if(anjian3==0&&aj3==0)//檢測按鍵3
  845.           {
  846.                   delay(5);
  847.                   if(anjian3==0) aj3=1,ms2=0;
  848.           }
  849.           if(anjian3==1&&aj3==1)
  850.                 {
  851.                         nao_fen++;
  852.                         if(nao_fen==60) nao_fen=0;
  853.                         changan=0;
  854.                         aj3=0;//按鍵1按下松開,小時++
  855.                 }
  856.                 if(aj3==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  857.                 if(aj3==1&&changan==1&&ms2>=100)//快加
  858.                 {
  859.                         nao_fen++;
  860.                         if(nao_fen==60) nao_fen=0;
  861.                         ms2=0;
  862.                 }
  863.                
  864.                 if(anjian4==0&&aj4==0)//檢測按鍵4
  865.           {
  866.                   delay(5);
  867.                   if(anjian4==0) aj4=1,ms2=0;
  868.           }
  869.           if(anjian4==1&&aj4==1)
  870.                 {
  871.                         nao_fen--;
  872.                         if(nao_fen<0) nao_fen=59;
  873.                         changan=0;
  874.                         aj4=0;//按鍵1按下松開,小時--
  875.                 }
  876.                 if(aj4==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  877.                 if(aj4==1&&changan==1&&ms2>=100)//快減
  878.                 {
  879.                         nao_fen--;
  880.                         if(nao_fen<0) nao_fen=59;
  881.                         ms2=0;
  882.                 }
  883.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  884.                 {
  885.                         delay(5);
  886.                         if(anjian1==0) aj1=1;
  887.                 }
  888.                 if(anjian1==1&&aj1==1)
  889.                 {
  890.                         aj1=0;
  891.                         cd=4;
  892.                   IapErase(0x0600);
  893.                   IapProgram(0x0600, nao_fen);//寫小時值
  894.                 }
  895.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  896.                 {
  897.                         delay(5);
  898.                         if(anjian2==0) aj2=1;
  899.                 }
  900.                 if(anjian2==1&&aj2==1)
  901.                 {
  902.                         aj2=0;
  903.                         cd=20;//去菜單20
  904.                   IapErase(0x0600);
  905.                   IapProgram(0x0600, nao_fen);//寫小時值
  906.                 }
  907.         }
  908.         while(cd==19)//菜單19 設(shè)置溫度開關(guān)
  909.         {
  910.                 if(wendu_kaiguan==0)
  911.                 {
  912.                         if(ms1>0&&ms1<300)        xianshi(32,33,34,33,27,0,37,37);
  913.                         if(ms1>300&&ms1<600)  xianshi(32,33,34,33,27,28,28,28);
  914.                         if(ms1>600) ms1=0;
  915.                 }
  916.                 if(wendu_kaiguan==1)
  917.                 {
  918.                         if(ms1>0&&ms1<300)        xianshi(32,33,34,33,27,27,0,38);
  919.                         if(ms1>300&&ms1<600)  xianshi(32,33,34,33,27,27,28,28);
  920.                         if(ms1>600) ms1=0;
  921.                 }
  922.                
  923.                 if(anjian3==0&&aj3==0)//檢測按鍵3
  924.                 {
  925.                         delay(5);
  926.                         if(anjian3==0) aj3=1;
  927.                 }
  928.                 if(anjian3==1&&aj3==1)
  929.                 {
  930.                         aj3=0;
  931.                         wendu_kaiguan++;
  932.                 }
  933.                 if(anjian4==0&&aj4==0)//檢測按鍵4
  934.                 {
  935.                         delay(5);
  936.                         if(anjian4==0) aj4=1;
  937.                 }
  938.                 if(anjian4==1&&aj4==1)
  939.                 {
  940.                         aj4=0;
  941.                         wendu_kaiguan++;
  942.                 }
  943.                 if(wendu_kaiguan>1) wendu_kaiguan=0;
  944.                
  945.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  946.                 {
  947.                         delay(5);
  948.                         if(anjian1==0) aj1=1;
  949.                 }
  950.                 if(anjian1==1&&aj1==1)
  951.                 {
  952.                         aj1=0;
  953.                         cd=0;
  954.                   IapErase(0x0800);
  955.                   IapProgram(0x0800, wendu_kaiguan);//寫開關(guān)值
  956.                 }
  957.         }
  958.         while(cd==20)//菜單20 選擇鬧鐘1、2
  959.         {
  960.                 if(s==0)
  961.                 {
  962.                         if(nao_kaiguan==0)
  963.                         {
  964.                                 if(ms1>0&&ms1<300)        xianshi(30,31,1,27,27,0,37,37);
  965.                                 if(ms1>300&&ms1<600)  xianshi(30,31,28,27,27,0,37,37);
  966.                                 if(ms1>600) ms1=0;
  967.                         }
  968.                         if(nao_kaiguan==1)
  969.                         {
  970.                                 if(ms1>0&&ms1<300)        xianshi(30,31,1,27,27,27,0,38);
  971.                                 if(ms1>300&&ms1<600)  xianshi(30,31,28,27,27,27,0,38);
  972.                                 if(ms1>600) ms1=0;
  973.                         }
  974.                 }        
  975.                 if(s==1)
  976.                 {
  977.                         if(nao2_kaiguan==0)
  978.                         {
  979.                                 if(ms1>0&&ms1<300)        xianshi(30,31,2,27,27,0,37,37);
  980.                                 if(ms1>300&&ms1<600)  xianshi(30,31,28,27,27,0,37,37);
  981.                                 if(ms1>600) ms1=0;
  982.                         }
  983.                         if(nao2_kaiguan==1)
  984.                         {
  985.                                 if(ms1>0&&ms1<300)        xianshi(30,31,2,27,27,27,0,38);
  986.                                 if(ms1>300&&ms1<600)  xianshi(30,31,28,27,27,27,0,38);
  987.                                 if(ms1>600) ms1=0;
  988.                         }
  989.                 }
  990.                
  991.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  992.           {
  993.                   delay(5);
  994.                   if(anjian1==0) aj1=1;
  995.           }
  996.           if(anjian1==1&&aj1==1) aj1=0,cd=4,ms1=0;//按鍵1按下松開,去4級菜單
  997.                
  998.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  999.                 {
  1000.                         delay(5);
  1001.                         if(anjian2==0) aj2=1;
  1002.                 }
  1003.                 if(anjian2==1&&aj2==1)
  1004.                 {
  1005.                         aj2=0;
  1006.                         if(s==1) cd=21;//按鍵2按下松開,去21級菜單
  1007.                         if(s==0) cd=16;//按鍵2按下松開,去16級菜單
  1008.                 }        
  1009.                                 
  1010.                 if(anjian3==0&&aj3==0)//檢測按鍵3
  1011.                 {
  1012.                         delay(5);
  1013.                         if(anjian3==0) aj3=1;
  1014.                 }
  1015.                 if(anjian3==1&&aj3==1)
  1016.                 {
  1017.                         aj3=0;
  1018.                         s=1;
  1019.                 }
  1020.                 if(anjian4==0&&aj4==0)//檢測按鍵4
  1021.                 {
  1022.                         delay(5);
  1023.                         if(anjian4==0) aj4=1;
  1024.                 }
  1025.                 if(anjian4==1&&aj4==1)
  1026.                 {
  1027.                         aj4=0;
  1028.                         s=0;
  1029.                 }
  1030.         }
  1031.         while(cd==21)//菜單21 設(shè)置鬧鐘2開關(guān)
  1032.         {
  1033.                 if(nao2_kaiguan==0)
  1034.                 {
  1035.                         if(ms1>0&&ms1<300)        xianshi(30,31,2,27,27,0,37,37);
  1036.                         if(ms1>300&&ms1<600)  xianshi(30,31,2,27,27,28,28,28);
  1037.                         if(ms1>600) ms1=0;
  1038.                 }
  1039.                 if(nao2_kaiguan==1)
  1040.                 {
  1041.                         if(ms1>0&&ms1<300)        xianshi(30,31,2,27,27,27,0,38);
  1042.                         if(ms1>300&&ms1<600)  xianshi(30,31,2,27,27,27,28,28);
  1043.                         if(ms1>600) ms1=0;
  1044.                 }
  1045.                
  1046.                 if(anjian3==0&&aj3==0)//檢測按鍵3
  1047.                 {
  1048.                         delay(5);
  1049.                         if(anjian3==0) aj3=1;
  1050.                 }
  1051.                 if(anjian3==1&&aj3==1)
  1052.                 {
  1053.                         aj3=0;
  1054.                         nao2_kaiguan++;
  1055.                 }
  1056.                 if(anjian4==0&&aj4==0)//檢測按鍵4
  1057.                 {
  1058.                         delay(5);
  1059.                         if(anjian4==0) aj4=1;
  1060.                 }
  1061.                 if(anjian4==1&&aj4==1)
  1062.                 {
  1063.                         aj4=0;
  1064.                         nao2_kaiguan++;
  1065.                 }
  1066.                 if(nao2_kaiguan>1) nao2_kaiguan=0;
  1067.                
  1068.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  1069.                 {
  1070.                         delay(5);
  1071.                         if(anjian1==0) aj1=1;
  1072.                 }
  1073.                 if(anjian1==1&&aj1==1)
  1074.                 {
  1075.                         aj1=0;
  1076.                         cd=4;
  1077.                   IapErase(0x0c00);
  1078.                   IapProgram(0x0c00, nao2_kaiguan);//寫開關(guān)值
  1079.                 }
  1080.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  1081.                 {
  1082.                         delay(5);
  1083.                         if(anjian2==0) aj2=1;
  1084.                 }
  1085.                 if(anjian2==1&&aj2==1)
  1086.                 {
  1087.                         aj2=0;
  1088.                         cd=22;//去菜單22
  1089.                   IapErase(0x0c00);
  1090.                   IapProgram(0x0c00, nao2_kaiguan);//寫開關(guān)值
  1091.                 }
  1092.         }
  1093.         while(cd==22)//菜單22 設(shè)置鬧鐘2 時
  1094.         {
  1095.                 if(ms1>0&&ms1<300)        xianshi(27,nao2_shi/10,nao2_shi%10,27,27,nao2_fen/10,nao2_fen%10,27);
  1096.                 if(ms1>300&&ms1<600)  xianshi(27,28,28,27,27,nao2_fen/10,nao2_fen%10,27);
  1097.                 if(ms1>600) ms1=0;
  1098.                 if(ms1>300&&changan==1) ms1=0;
  1099.                
  1100.                
  1101.                
  1102.                 if(anjian3==0&&aj3==0)//檢測按鍵3
  1103.           {
  1104.                   delay(5);
  1105.                   if(anjian3==0) aj3=1,ms2=0;
  1106.           }
  1107.           if(anjian3==1&&aj3==1)
  1108.                 {
  1109.                         nao2_shi++;
  1110.                         if(nao2_shi==25) nao2_shi=0;
  1111.                         changan=0;
  1112.                         aj3=0;//按鍵1按下松開,小時++
  1113.                 }
  1114.                 if(aj3==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  1115.                 if(aj3==1&&changan==1&&ms2>=100)//快加
  1116.                 {
  1117.                         nao2_shi++;
  1118.                         if(nao2_shi==25) nao2_shi=0;
  1119.                         ms2=0;
  1120.                 }
  1121.                
  1122.                 if(anjian4==0&&aj4==0)//檢測按鍵4
  1123.           {
  1124.                   delay(5);
  1125.                   if(anjian4==0) aj4=1,ms2=0;
  1126.           }
  1127.           if(anjian4==1&&aj4==1)
  1128.                 {
  1129.                         nao2_shi--;
  1130.                         if(nao2_shi<0) nao2_shi=24;
  1131.                         changan=0;
  1132.                         aj4=0;//按鍵1按下松開,小時--
  1133.                 }
  1134.                 if(aj4==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  1135.                 if(aj4==1&&changan==1&&ms2>=100)//快減
  1136.                 {
  1137.                         nao2_shi--;
  1138.                         if(nao2_shi<0) nao2_shi=24;
  1139.                         ms2=0;
  1140.                 }
  1141.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  1142.                 {
  1143.                         delay(5);
  1144.                         if(anjian1==0) aj1=1;
  1145.                 }
  1146.                 if(anjian1==1&&aj1==1)
  1147.                 {
  1148.                         aj1=0;
  1149.                         cd=4;
  1150.                   IapErase(0x0e00);
  1151.                   IapProgram(0x0e00, nao2_shi);//寫小時值
  1152.                 }
  1153.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  1154.                 {
  1155.                         delay(5);
  1156.                         if(anjian2==0) aj2=1;
  1157.                 }
  1158.                 if(anjian2==1&&aj2==1)
  1159.                 {
  1160.                         aj2=0;
  1161.                         cd=23;//去菜單23
  1162.                   IapErase(0x0e00);
  1163.                   IapProgram(0x0e00, nao2_shi);//寫小時值
  1164.                 }        
  1165.         }
  1166.         

  1167.         while(cd==23)//菜單23 設(shè)置鬧鐘2 分
  1168.         {
  1169.                 if(ms1>0&&ms1<300)        xianshi(27,nao2_shi/10,nao2_shi%10,27,27,nao2_fen/10,nao2_fen%10,27);
  1170.                 if(ms1>300&&ms1<600)  xianshi(27,nao2_shi/10,nao2_shi%10,27,27,28,28,27);
  1171.                 if(ms1>600) ms1=0;
  1172.                 if(ms1>300&&changan==1) ms1=0;
  1173.                
  1174.                 if(anjian3==0&&aj3==0)//檢測按鍵3
  1175.           {
  1176.                   delay(5);
  1177.                   if(anjian3==0) aj3=1,ms2=0;
  1178.           }
  1179.           if(anjian3==1&&aj3==1)
  1180.                 {
  1181.                         nao2_fen++;
  1182.                         if(nao2_fen==60) nao2_fen=0;
  1183.                         changan=0;
  1184.                         aj3=0;//按鍵1按下松開,小時++
  1185.                 }
  1186.                 if(aj3==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  1187.                 if(aj3==1&&changan==1&&ms2>=100)//快加
  1188.                 {
  1189.                         nao2_fen++;
  1190.                         if(nao2_fen==60) nao2_fen=0;
  1191.                         ms2=0;
  1192.                 }
  1193.                
  1194.                 if(anjian4==0&&aj4==0)//檢測按鍵4
  1195.           {
  1196.                   delay(5);
  1197.                   if(anjian4==0) aj4=1,ms2=0;
  1198.           }
  1199.           if(anjian4==1&&aj4==1)
  1200.                 {
  1201.                         if(nao2_fen==0) nao2_fen=60;
  1202.                         nao2_fen--;
  1203.                         changan=0;
  1204.                         aj4=0;//按鍵1按下松開,小時--
  1205.                 }
  1206.                 if(aj4==1&&ms2>=700) changan=1,ms2=0;//檢測長按時間0.5s
  1207.                 if(aj4==1&&changan==1&&ms2>=100)//快減
  1208.                 {
  1209.                         nao2_fen--;
  1210.                         if(nao2_fen<0) nao2_fen=59;
  1211.                         ms2=0;
  1212.                 }
  1213.                 if(anjian1==0&&aj1==0)//檢測按鍵1
  1214.                 {
  1215.                         delay(5);
  1216.                         if(anjian1==0) aj1=1;
  1217.                 }
  1218.                 if(anjian1==1&&aj1==1)
  1219.                 {
  1220.                         aj1=0;
  1221.                         cd=4;
  1222.                   IapErase(0x1000);
  1223.                   IapProgram(0x1000, nao2_fen);//寫小時值
  1224.                 }
  1225.                 if(anjian2==0&&aj2==0)//檢測按鍵2
  1226.                 {
  1227.                         delay(5);
  1228.                         if(anjian2==0) aj2=1;
  1229.                 }
  1230.                 if(anjian2==1&&aj2==1)
  1231.                 {
  1232.                         aj2=0;
  1233.                         cd=20;//去菜單20
  1234.                   IapErase(0x1000);
  1235.                   IapProgram(0x1000, nao2_fen);//寫小時值
  1236.                 }
  1237.         }
  1238. }

















復制代碼

串口驅(qū)動:

  1. #include <STC8.H>
  2. #include <uart.H>
  3. #include "intrins.h"

  4. #define FOSC            11059200UL
  5. #define BRT             (65536 - FOSC / 115200 / 4)

  6. bit busy;
  7. //extern uchar tiaozheng[];
  8. char a=0;
  9. uchar huancun[15]={0};

  10. /*Z-------------A*/ //傳送時間數(shù)據(jù)
  11. /*Z----------B*/ //傳送鬧鐘數(shù)據(jù)
  12. /*Z----------C*/ //請求傳送溫度數(shù)據(jù)

  13. /***********************************************************************************************************
  14. * 函數(shù)名稱: UartIsr()
  15. * 輸入?yún)?shù): void
  16. * 輸出參數(shù): void
  17. *
  18. * 功    能: 串口1中斷(第4號中斷)
  19. *
  20. * 備    注:將數(shù)據(jù)緩存在 huancun[]數(shù)組中
  21. *
  22. * 作    者: 范
  23. *
  24. * 完成時間: 2019.12.25
  25. ************************************************************************************************************/

  26. void UartIsr() interrupt 4
  27. {
  28.     if (TI)
  29.     {
  30.         TI = 0;
  31.         busy = 0;
  32.     }
  33.     if (RI)
  34.     {
  35.         RI = 0;
  36.                         switch(SBUF)
  37.                         {
  38.                                 case 'Z': a=0;//時間數(shù)據(jù)傳送開始標志
  39.                                 break;
  40.                                 case 'A': huancun[14]=1;//時間數(shù)據(jù)更新標志
  41.                                 break;
  42.                                 case 'B': huancun[14]=2;//鬧鐘數(shù)據(jù)更新標志
  43.                                 break;
  44.                                 case 'C': huancun[14]=3;//請求傳送溫度數(shù)據(jù) 標志
  45.                                 break;
  46.                                 case '0': huancun[a]=0,a++;
  47.                                 break;
  48.                                 case '1': huancun[a]=1,a++;
  49.                                 break;
  50.                                 case '2': huancun[a]=2,a++;
  51.                                 break;
  52.                                 case '3': huancun[a]=3,a++;
  53.                                 break;
  54.                                 case '4': huancun[a]=4,a++;
  55.                                 break;
  56.                                 case '5': huancun[a]=5,a++;
  57.                                 break;
  58.                                 case '6': huancun[a]=6,a++;
  59.                                 break;
  60.                                 case '7': huancun[a]=7,a++;
  61.                                 break;
  62.                                 case '8': huancun[a]=8,a++;
  63.                                 break;
  64.                                 case '9': huancun[a]=9,a++;
  65.                                 break;
  66.                                 default:break;
  67.                         }
  68.     }
  69. }

  70. /***********************************************************************************************************
  71. * 函數(shù)名稱: UartInit()
  72. * 輸入?yún)?shù): void
  73. * 輸出參數(shù): void
  74. *
  75. * 功    能: 串口1初始化
  76. *
  77. * 備    注:用定時器2做波特率發(fā)生器
  78. *
  79. * 作    者: 范
  80. *
  81. * 完成時間: 2019.12.25
  82. ************************************************************************************************************/

  83. void UartInit()
  84. {
  85.     SCON = 0x50;
  86.     T2L = BRT;
  87.     T2H = BRT >> 8;
  88.     AUXR = 0x15;
  89.     busy = 0;
  90. }

  91. /***********************************************************************************************************
  92. * 函數(shù)名稱: UartSend()
  93. * 輸入?yún)?shù): char
  94. * 輸出參數(shù): void
  95. *
  96. * 功    能: 串口1發(fā)送一個字符
  97. *
  98. * 備    注:無
  99. *
  100. * 作    者: 范
  101. *
  102. * 完成時間: 2019.12.25
  103. ************************************************************************************************************/

  104. void UartSend(char dat)
  105. {
  106.     while (busy);
  107.     busy = 1;
  108.     SBUF = dat;
  109. }

  110. /***********************************************************************************************************
  111. * 函數(shù)名稱: UartSendStr()
  112. * 輸入?yún)?shù): char *p
  113. * 輸出參數(shù): void
  114. *
  115. * 功    能: 串口1發(fā)送一個字符串
  116. *
  117. * 備    注:無
  118. *
  119. * 作    者: 范
  120. *
  121. * 完成時間: 2019.12.25
  122. ************************************************************************************************************/

  123. void UartSendStr(char *p)
  124. {
  125.     while (*p)
  126.     {
  127.         UartSend(*p++);
  128.     }
  129. }


復制代碼

主函數(shù):
  1. #include <STC8.H>
  2. #include <caidan.H>//菜單
  3. #include <chushihua.H>//初始化
  4. #include <uart.H>
  5. #include <ds1302.H>
  6. #include "eeprom.h"

  7. extern uchar huancun[];//藍牙接收緩存數(shù)據(jù)
  8. extern int nao_kaiguan,nao_shi,nao_fen,nao2_kaiguan,nao2_shi,nao2_fen;//eeprom數(shù)據(jù)
  9. extern int wendu;//溫度信息
  10. uchar wenzhuan[5]={0,0,0,0,0};
  11. uchar i;
  12. uchar xiawu;//下午標志位

  13. /***********************************************************************************************************
  14. * 函數(shù)名稱: main()
  15. * 輸入?yún)?shù): void
  16. * 輸出參數(shù): void
  17. *
  18. * 功    能: 主函數(shù)
  19. *
  20. * 備    注:程序的初始化、串口打印、串口接收手機端發(fā)來的數(shù)據(jù)、運行菜單程序
  21. *
  22. * 作    者: 范
  23. *
  24. * 完成時間: 2019.12.25
  25. ************************************************************************************************************/

  26. void main()
  27. {
  28.         itin();
  29.   UartSendStr("Uart Test !\r\n");

  30.         while(1)
  31.         {
  32.                 caidan();
  33.                 if(huancun[14]==1)//待時間更新數(shù)據(jù)
  34.                 {
  35.                         huancun[14]=0;//清標志位
  36.                         if(huancun[13]==1) xiawu=12;
  37.                         if(huancun[13]==0) xiawu=0;
  38.                         xieshijian(huancun[0]*10+huancun[1],huancun[2]*10+huancun[3],huancun[4]*10+huancun[5],huancun[6]*10+huancun[7]+xiawu,huancun[8]*10+huancun[9],huancun[10]*10+huancun[11],huancun[12]);//更新時間
  39.                         UartSendStr("時間信息已校準\r\n");
  40.                 }
  41.     if(huancun[14]==2)//待鬧鐘更新數(shù)據(jù)
  42.                 {
  43.                         huancun[14]=0;//清標志位
  44.                         nao_kaiguan=huancun[0];
  45.                         nao_shi=huancun[1]*10+huancun[2];
  46.                         nao_fen=huancun[3]*10+huancun[4];
  47.                         nao2_kaiguan=huancun[5];
  48.                         nao2_shi=huancun[6]*10+huancun[7];
  49.                         nao2_fen=huancun[8]*10+huancun[9];
  50.                         IapErase(0x0200);
  51.                         IapProgram(0x0200, nao_kaiguan);//寫鬧鐘1開關(guān)默認值
  52.                         IapErase(0x0400);
  53.                         IapProgram(0x0400, nao_shi);//寫鬧鐘1小時默認值
  54.                         IapErase(0x0600);
  55.                         IapProgram(0x0600, nao_fen);//寫鬧鐘1分鐘默認值
  56.                         IapErase(0x0c00);
  57.                         IapProgram(0x0c00, nao2_kaiguan);//寫鬧鐘2分鐘默認值
  58.                         IapErase(0x0e00);
  59.                         IapProgram(0x0e00, nao2_shi);//寫鬧鐘2分鐘默認值
  60.                         IapErase(0x1000);
  61.                         IapProgram(0x1000, nao2_fen);//寫鬧鐘2亮度默認值
  62.                         UartSendStr("鬧鐘信息已更改\r\n");
  63.                 }
  64.                 if(huancun[14]==3)//請求傳送溫度數(shù)據(jù) 標志
  65.                 {
  66.                         huancun[14]=0;//清標志位
  67.                         wenzhuan[0]=wendu%1000/100;
  68.                         if(wendu<10000) wenzhuan[0]=wendu%1000/100,wenzhuan[1]=wendu%100/10,wenzhuan[2]=wendu%10,wenzhuan[3]=0;
  69.                   if(wendu>10000) wenzhuan[0]=wendu%1000/100,wenzhuan[1]=wendu%100/10,wenzhuan[2]=wendu%10,wenzhuan[3]=1;
  70.                         for(i=0;i<4;i++)
  71.                         {
  72.                                 switch(wenzhuan[i])
  73.                                 {
  74.                                         case 0 : UartSend('0');
  75.                                         break;
  76.                                         case 1 : UartSend('1');
  77.                                         break;
  78.                                         case 2 : UartSend('2');
  79.                                         break;
  80.                                         case 3 : UartSend('3');
  81.                                         break;
  82.                                         case 4 : UartSend('4');
  83.                                         break;
  84.                                         case 5 : UartSend('5');
  85.                                         break;
  86.                                         case 6 : UartSend('6');
  87.                                         break;
  88.                                         case 7 : UartSend('7');
  89.                                         break;
  90.                                         case 8 : UartSend('8');
  91.                                         break;
  92.                                         case 9 : UartSend('9');
  93.                                         break;
  94.                                         default:break;
  95.                                 }
  96.                         }
  97.                 }
  98.         }
  99. }
復制代碼


由于代碼較多,完整的代碼、原理圖、pcb圖、手機app等 可以從附件中查找
123.zip (17.73 MB, 下載次數(shù): 53)





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

使用道具 舉報

沙發(fā)
ID:352815 發(fā)表于 2020-3-6 19:37 | 只看該作者
帶測試效果,制作中
回復

使用道具 舉報

板凳
ID:352815 發(fā)表于 2020-3-9 14:47 | 只看該作者
請問藍牙8針插座如何連接?有木有具體引腳及藍牙模塊具體型號?網(wǎng)上好多是6腳的。感謝
回復

使用道具 舉報

地板
ID:479740 發(fā)表于 2020-3-30 22:20 | 只看該作者
tanpride 發(fā)表于 2020-3-9 14:47
請問藍牙8針插座如何連接?有木有具體引腳及藍牙模塊具體型號?網(wǎng)上好多是6腳的。感謝

HC06
回復

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕一区二区三区在线乱码 | 自拍偷拍第一页 | 91精品国产色综合久久不卡蜜臀 | 天天躁日日躁aaaa视频 | 亚洲三区在线播放 | 欧美久久精品一级c片 | 欧美日韩中文字幕在线 | 久久久99国产精品免费 | 成人国产精品 | 日韩三级一区 | 欧美精品久久久久久久久久 | 中文字幕日本一区二区 | 亚洲欧美日韩一区二区 | 亚洲欧美一区二区三区1000 | 国产夜恋视频在线观看 | 亚洲成人av | 一区二区精品视频 | 中文字幕国产第一页 | 久久久www成人免费无遮挡大片 | 日本三级播放 | 国产区一区| 精品一区二区久久久久久久网站 | 国产精品久久毛片av大全日韩 | 9191av| 国产精品视频观看 | m豆传媒在线链接观看 | 日本不卡一区二区三区在线观看 | 91精品国产91久久久久久不卞 | 免费h视频 | 久久影音先锋 | 在线看亚洲 | 亚洲欧美日韩精品 | 国产精品免费一区二区 | 天天搞天天操 | 色妞av | 欧美精品福利 | 97色在线视频 | 午夜欧美a级理论片915影院 | h视频免费看 | 全免一级毛片 | 成人在线播放网站 |