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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3174|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)DS18B20測(cè)溫LCD1602顯示可設(shè)時(shí)設(shè)溫調(diào)時(shí)的項(xiàng)目工程

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本帖最后由 51黑電子會(huì)員 于 2020-4-24 22:28 編輯
  1. #include<reg52.h>//包含51單片機(jī)內(nèi)部寄存器頭文件
  2. #define uchar unsigned char // 自定義uchar為unsigned char(即無(wú)符號(hào)字符型數(shù)據(jù),數(shù)據(jù)范圍:0到255。)
  3. #define uint unsigned int//自定義uint為unsigned int(即無(wú)符號(hào)字符整數(shù)型數(shù)據(jù),數(shù)據(jù)范圍:0到6355。)
  4. sbit RS=P0^7;//位定義LCD1602字符型液晶顯示器的數(shù)據(jù)/命令選擇引腳                 
  5. sbit RW=P0^6;//位定義LCD1602字符型液晶顯示器的讀寫(xiě)引腳                        
  6. sbit EN=P0^5; //位定義LCD1602字符型液晶顯示器的使能引腳
  7. sbit DQ=P1^6;//位定義DS18B20數(shù)據(jù)端口
  8. sbit S=P3^7;//設(shè)時(shí)按鍵S
  9. sbit S0=P3^6;//設(shè)溫按鍵S0
  10. sbit S1=P3^5;//調(diào)時(shí)按鍵S1
  11. sbit S2=P3^4;//增加按鍵S2
  12. sbit S3=P3^3;//減少按鍵S3
  13. sbit S4=P3^2;//啟停按鍵S4
  14. sbit FengNingQi=P3^1;//位定義蜂鳴器口
  15. uchar count,Snum,S0num,S1num,S4num,S2numflag,S3numflag,TR0flag,setsecondflag,setminutanflag,sethourflag,miaoflag,fenflag,shiflag,settemperatureflag;//定時(shí)器0中斷次數(shù)變量、設(shè)時(shí)按鍵S按鍵按下次數(shù)變量、設(shè)溫按鍵S0按鍵按下次數(shù)變量、調(diào)時(shí)按鍵S1按下次數(shù)變量、啟停按鍵S4按下次數(shù)標(biāo)志位變量、增加鍵標(biāo)志位變量、減少鍵標(biāo)志位變量、定時(shí)器0標(biāo)志位變量、設(shè)時(shí)秒鐘標(biāo)志位變量、設(shè)時(shí)分鐘標(biāo)志位變量、設(shè)時(shí)時(shí)鐘標(biāo)志位變量、秒鐘標(biāo)志位變量、分鐘標(biāo)志位變量、時(shí)鐘標(biāo)志位變量、設(shè)溫標(biāo)志位變量、
  16. uchar sethour,setminutan,setsecond;//設(shè)時(shí)時(shí)鐘變量、設(shè)時(shí)分鐘變量
  17. uchar setsecondge,setsecondshi;//設(shè)時(shí)秒鐘個(gè)位變量、設(shè)時(shí)秒鐘十位變量
  18. uchar setminutange,setminutanshi;//設(shè)時(shí)分鐘個(gè)位變量、設(shè)時(shí)分鐘十位變量
  19. uchar sethourge,sethourshi;//設(shè)時(shí)時(shí)鐘個(gè)位變量、設(shè)時(shí)時(shí)鐘十位變量
  20. uchar shi,fen,miao;//時(shí)鐘變量、分鐘變量、秒鐘變量
  21. uchar secondge,secondshi; //秒鐘個(gè)位變量、秒鐘十位變量
  22. uchar minutange,minutanshi;//分鐘個(gè)位變量、分鐘十位變量
  23. uchar hourge,hourshi;//時(shí)鐘個(gè)位變量、時(shí)鐘十位變量
  24. uchar qitingflag,temperaturedisplayflag,lcd1602displaytimeflag,settimedisplayflag,settemperaturedisplayflag,tiaotimedisplayflag,timebaojingflag,temperatruebaojingflag;//啟停鍵標(biāo)志位變量、溫度顯示標(biāo)志位變量、液晶顯示器顯示時(shí)間標(biāo)志位變量、設(shè)時(shí)顯示標(biāo)志位變量、設(shè)溫顯示標(biāo)志位變量、調(diào)時(shí)顯示標(biāo)志位變量、時(shí)間報(bào)警標(biāo)志位變量、溫度報(bào)警標(biāo)志位變量
  25. uint temperature,t;//讀溫度值變量
  26. uint temperatureflag;//負(fù)溫度標(biāo)志位變量
  27. uint wendu,wendubai,wendushi,wenduge,xiaoshudian,wenduxiaoshu,fuhaowei,setwendu,setwendubai,setwendushi,setwenduge,setwenduxiaoshu,settemperature;//溫度值變量、溫度百位變量、溫度十位變量、溫度個(gè)位變量、小數(shù)點(diǎn)變量、小數(shù)變量、符號(hào)位變量、設(shè)溫變量、設(shè)溫百位變量、設(shè)溫十位變量、設(shè)溫個(gè)位變量、設(shè)溫小數(shù)變量、設(shè)溫變量
  28. //uchar table0[]="00:00:00";//LCD1602第一行初始顯示
  29. uchar table1[]="00:00:00";//LCD1602第二行初始顯示
  30.   void Delay(uint z)//延時(shí)程序
  31. {
  32.    uint x,y;
  33.    for(x=z;x>0;x--)
  34.     for(y=110;y>0;y--);
  35. }
  36.   void WriteCommand(uchar command)//LCD1602字符型液晶顯示器寫(xiě)指令函數(shù)
  37. {
  38.    RS=0;//LCD1602字符型液晶顯示器指令寄存器低電平
  39.    RW=0;//LCD1602字符型液晶顯示器寫(xiě)指令操作低電平
  40.    P2=command;//LCD1602字符型液晶顯示器寫(xiě)指令函數(shù)寫(xiě)指令到單片機(jī)P2組端口,再輸送到LCD1602字符型液晶顯示器指令寄存器中執(zhí)行。
  41.    Delay(5);//實(shí)際單片機(jī)演示,可以去掉延時(shí)。Proteus 仿真,需要保留延時(shí)。
  42.    EN=1;//LCD1602字符型液晶顯示器使能端高電平  
  43.    Delay(5);//實(shí)際單片機(jī)演示,可以去掉延時(shí)。Proteus 仿真,需要保留延時(shí)。
  44.    EN=0;//LCD1602字符型液晶顯示器使能端低電平
  45. }
  46.   void WriteData(uchar information)//LCD1602字符型液晶顯示器寫(xiě)數(shù)據(jù)函數(shù)
  47. {  
  48.    RS=1;//LCD1602字符型液晶顯示器數(shù)據(jù)寄存器高電平
  49.    RW=0;//LCD1602字符型液晶顯示器寫(xiě)數(shù)據(jù)操作低電平
  50.    P2=information;//LCD1602字符型液晶顯示器寫(xiě)數(shù)據(jù)函數(shù)寫(xiě)數(shù)據(jù)到單片機(jī)P2組端口,再輸送到LCD1602字符型液晶顯示器上顯示。
  51.    Delay(5);//實(shí)際單片機(jī)演示,可以去掉延時(shí)。Proteus 仿真,需要保留延時(shí)。
  52.    EN=1;//LCD1602字符型液晶顯示器使能端高電平
  53.    Delay(5);//實(shí)際單片機(jī)演示,可以去掉延時(shí)。Proteus 仿真,需要保留延時(shí)。
  54.    EN=0;//LCD1602字符型液晶顯示器使能端低電平
  55. }
  56.   void LCD1602Init()//LCD1602初始化函數(shù)
  57. {
  58.    WriteCommand(0x38);//設(shè)置LCD1602字符型液晶顯示器16x2顯示,5*7或5*8點(diǎn)陣,8位數(shù)據(jù)并口,簡(jiǎn)稱顯模。
  59.    WriteCommand(0x08);//設(shè)置LCD1602字符型液晶顯示器顯示開(kāi),簡(jiǎn)稱亮屏。
  60.    WriteCommand(0x01);//設(shè)置清除LCD1602字符型液晶顯示器屏上所有內(nèi)容,并讓光標(biāo)復(fù)位到LCD1602字符型液晶顯示器屏左上角,簡(jiǎn)稱清屏。
  61.    WriteCommand(0x06);//設(shè)置開(kāi)光標(biāo)(或字符)地址指針自增1,光標(biāo)右移動(dòng)一個(gè)字符位,整屏顯示不移動(dòng)。
  62.    WriteCommand(0x0c);//設(shè)置開(kāi)LCD1602字符型液晶顯示器顯示,關(guān)光標(biāo),關(guān)光標(biāo)(字符)閃爍。
  63. }
  64.   void Timer0Init()//定時(shí)器0初始化函數(shù)
  65. {
  66.    TMOD=0x01;//設(shè)定定時(shí)器0工作模式為模式1
  67.    TH0=(65536-50000)/256;//TH0裝初值
  68.    TL0=(65536-50000)%256;//TL0裝初值
  69.    EA=1;//開(kāi)啟定時(shí)器總中斷
  70.    ET0=1;//開(kāi)啟定時(shí)器0中斷開(kāi)關(guān)
  71.    TR0=0;//啟動(dòng)定時(shí)器0
  72. }
  73.   void LCD1602Display()//LCD1602字符型液晶顯示器顯示函數(shù)
  74. {
  75.    uchar j;//j表示數(shù)組元素個(gè)數(shù)變量
  76. //   WriteCommand(0x80+0x00);//LCD1602字符型液晶顯示器第一行第一個(gè)位置顯示
  77. //   for(j=0;j<8;j++)//有10個(gè)字符,要循環(huán)10次。
  78. //  {
  79. //    WriteData(table0[j]);//顯示字符串
  80. //    Delay(5);
  81. //   }
  82.    WriteCommand(0x80+0x40);//LCD1602字符型液晶顯示器第二行第一個(gè)位置顯示
  83.    for(j=0;j<8;j++)//有8個(gè)字符,要循環(huán)8次。
  84.   {
  85.     WriteData(table1[j]);//顯示字符串
  86.     Delay(5);
  87.    }
  88. }
  89.   void LCD1602DisplayTime(uchar address,uchar num)//LCD1602顯示時(shí)間兩位數(shù)分解函數(shù)
  90. {
  91.    uchar shi,ge;//十位、個(gè)位的變量
  92.    shi=num/10;//十位數(shù)
  93.    ge=num%10;//個(gè)位數(shù)
  94.    WriteCommand(0x80+0x40+address);//LCD1602字符型液晶顯示器第二行某個(gè)顯示位
  95.    WriteData(0x30+shi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示十位可顯示0到9的數(shù)字。
  96.    WriteData(0x30+ge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示個(gè)位可顯示0到9的數(shù)字。
  97. }
  98.   void LCD1602DisplayGeDigitResolve(uchar address,uchar num)//LCD1602字符型液晶顯示器顯示修改時(shí)間個(gè)位數(shù)分解函數(shù)
  99. {
  100.    uchar ge;//個(gè)位的變量
  101.    ge=num%10;//個(gè)位數(shù)
  102.    WriteCommand(0x80+0x40+address);//LCD1602字符型液晶顯示器第二行某個(gè)顯示位
  103.    WriteData(0x30+ge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示個(gè)位可顯示0到9的數(shù)字。
  104. }
  105.   void LCD1602DisplayShiDigitResolve(uchar address,uchar num)//LCD1602字符型液晶顯示器修改時(shí)間十位數(shù)分解函數(shù)
  106. {
  107.    uchar shi;//十位變量
  108.    shi=num%10;//十位數(shù)
  109.    WriteCommand(0x80+0x40+address);//LCD1602字符型液晶顯示器第二行某個(gè)顯示位
  110.    WriteData(0x30+shi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示十位可顯示0到9的數(shù)字。
  111. }
  112.   void SetTimeKeyScan()//設(shè)時(shí)按鍵掃描函數(shù)
  113. {
  114.    if(S==0)//判斷設(shè)時(shí)按鍵S是否按下
  115.   {
  116.     Delay(5);//延時(shí)
  117.     if(S==0)//再次判斷設(shè)時(shí)按鍵S是否按下
  118.    {
  119.      settemperatureflag=0;//設(shè)溫標(biāo)志位變量置0,在溫度報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,溫度報(bào)警函數(shù)里邊余留settemperatureflag==1和TR0=1,當(dāng)操作設(shè)時(shí)按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng),因此在設(shè)時(shí)按鍵掃描函數(shù)里邊添加settemperatureflag=0和TR0=0,執(zhí)行設(shè)時(shí)按鍵掃描函數(shù)后,溫度報(bào)警函數(shù)里邊settemperatureflag==1和TR0=1被置換成settemperatureflag=0和TR0=0,很好地解決了在操作設(shè)時(shí)按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng)?shù)膯?wèn)題。
  120.      Snum++;//設(shè)時(shí)按鍵S按鍵次數(shù)變量先賦值再自加
  121.      while(!S);//等待設(shè)時(shí)按鍵S彈起
  122.      switch(Snum)//設(shè)時(shí)按鍵S按鍵按下次數(shù)變量選擇位
  123.     {
  124.       case 1://設(shè)時(shí)按鍵S按鍵第一次按下
  125.              TR0=0;//關(guān)定時(shí)器0
  126.              TR0flag=0;//定時(shí)器0標(biāo)志位變量置0,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留TR0flag==1,當(dāng)再次操作設(shè)時(shí)按鍵掃描函數(shù)設(shè)時(shí)時(shí),會(huì)發(fā)生在設(shè)時(shí)過(guò)程中觸發(fā)設(shè)時(shí)報(bào)警條件而報(bào)警,因此在設(shè)時(shí)按鍵掃描函數(shù)里邊添加TR0flag=0,再次執(zhí)行設(shè)時(shí)按鍵掃描函數(shù)后,溫度報(bào)警函數(shù)里邊TR0flag==1被置換成TR0flag=0,很好地解決了再次操作設(shè)時(shí)按鍵掃描函數(shù)設(shè)時(shí)時(shí),在設(shè)時(shí)過(guò)程中觸發(fā)設(shè)時(shí)報(bào)警條件而報(bào)警的問(wèn)題。
  127.              tiaotimedisplayflag=1;//調(diào)時(shí)顯示標(biāo)志位變量置1,在操作設(shè)時(shí)按鍵掃描函數(shù)的情況下,不能操作調(diào)時(shí)按鍵掃描函數(shù)。
  128.              settemperaturedisplayflag=1;//設(shè)溫顯示標(biāo)志位變量置1,在操作設(shè)時(shí)按鍵掃描函數(shù)的情況下,不能操作設(shè)溫按鍵掃描函數(shù)。
  129.              lcd1602displaytimeflag=1;//液晶顯示器顯示時(shí)間標(biāo)志位變量置1,在操作設(shè)時(shí)按鍵掃描函數(shù)的情況下,不受時(shí)鐘兩位數(shù)分解函數(shù)和分鐘兩位數(shù)分解函數(shù)和秒鐘兩位數(shù)分解函數(shù)影響。
  130.              temperaturedisplayflag=1;//溫度顯示標(biāo)志位變量置1,在操作設(shè)時(shí)按鍵掃描函數(shù)的情況下,不受溫度分解函數(shù)和溫度顯示函數(shù)影響。
  131.              WriteCommand(0x80+0x00+0x07);//LCD1602字符型液晶顯示器第一行第7個(gè)(從第0開(kāi)始數(shù))位置的顯示位
  132.              WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  133.                          break;
  134.       case 2://設(shè)時(shí)按鍵S按鍵第二次按下
  135.              WriteCommand(0x80+0x00+0x06);//LCD1602字符型液晶顯示器第一行第6個(gè)(從第0開(kāi)始數(shù))個(gè)位置的顯示位
  136.              WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  137.              break;
  138.       case 3://設(shè)時(shí)按鍵S按鍵第三次按下
  139.              WriteCommand(0x80+0x00+0x04);//LCD1602字符型液晶顯示器第一行第4個(gè)(從第0開(kāi)始數(shù))位置的顯示位
  140.              WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  141.                          break;
  142.       case 4://設(shè)時(shí)按鍵S按鍵第四次按下
  143.               WriteCommand(0x80+0x00+0x03);//LCD1602字符型液晶顯示器第一行第3個(gè)(從第0開(kāi)始數(shù))位置的顯示位
  144.               WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  145.               break;
  146.       case 5://設(shè)時(shí)按鍵S按鍵第五次按下
  147.              WriteCommand(0x80+0x00+0x01);//LCD1602字符型液晶顯示器第一行第1個(gè)(從第0開(kāi)始數(shù))位置的顯示位
  148.              WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  149.              break;
  150.       case 6://設(shè)時(shí)按鍵S按鍵第六次按下
  151.              WriteCommand(0x80+0x00+0x00);//LCD1602字符型液晶顯示器第一行第0個(gè)(從第0開(kāi)始數(shù))位置的顯示位
  152.              WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  153.              break;
  154.       case 7://設(shè)時(shí)按鍵S按鍵第七次按下
  155.              WriteCommand(0x80+0x00+0x07);//LCD1602字符型液晶顯示器第一行第0個(gè)(從第0開(kāi)始數(shù))位置的顯示位
  156.              WriteCommand(0x0c);//關(guān)光標(biāo)(或字符)閃爍。
  157.              TR0=1;//開(kāi)定時(shí)器0
  158.              TR0flag=1;//定時(shí)器0標(biāo)志位變量置1,為了在操作設(shè)時(shí)按鍵掃描函數(shù)進(jìn)行設(shè)時(shí)后,可以執(zhí)行時(shí)間報(bào)警函數(shù)。
  159.              Snum=0;//設(shè)時(shí)按鍵S按鍵按下次數(shù)清零,可以反復(fù)操作設(shè)時(shí)按鍵。
  160.              tiaotimedisplayflag=0;//調(diào)時(shí)顯示標(biāo)志位變量置0,讓設(shè)時(shí)按鍵掃描函數(shù)執(zhí)行后,可允許調(diào)時(shí)按鍵掃描函數(shù)執(zhí)行。
  161.              settemperaturedisplayflag=0;//設(shè)溫顯示標(biāo)志位變量置0,讓設(shè)時(shí)按鍵掃描函數(shù)執(zhí)行后,可允許設(shè)溫按鍵掃描函數(shù)執(zhí)行。
  162.              lcd1602displaytimeflag=0;//液晶顯示器顯示時(shí)間標(biāo)志位變量等于0,讓設(shè)時(shí)按鍵掃描函數(shù)執(zhí)行后,可允許時(shí)鐘兩位數(shù)分解函數(shù)和分鐘兩位數(shù)分解函數(shù)和秒鐘兩位數(shù)分解函數(shù)執(zhí)行。
  163.              temperaturedisplayflag=0;//溫度顯示標(biāo)志位變量等于0,讓設(shè)時(shí)按鍵掃描函數(shù)執(zhí)行后,可允許溫度分解函數(shù)和溫度顯示函數(shù)執(zhí)行。
  164.              break;
  165.     default:
  166.              S0num=0;//設(shè)溫按鍵S0按鍵按下次數(shù)清零,可以反復(fù)操作設(shè)時(shí)按鍵。
  167.              break;  
  168.    }
  169.   }
  170. }
  171.    if(Snum!=0)//判斷設(shè)時(shí)按鍵S按鍵按下次數(shù)變量是否為0
  172.   {
  173.     if(S2==0)//判斷增加按鍵S2是否按下
  174.    {
  175.      Delay(5);//延時(shí)
  176.      if(S2==0)//再次判斷增加按鍵S2是否按下
  177.     {
  178.       S2numflag=1;//增加鍵標(biāo)志位變量置1,可以在時(shí)間報(bào)警函數(shù)內(nèi)進(jìn)行設(shè)時(shí)報(bào)警。
  179.       while(!S2);//等待增加按鍵S2彈起
  180.       switch(Snum)//設(shè)時(shí)按鍵S按鍵按下次數(shù)變量選擇位
  181.      {
  182.        case 1://設(shè)時(shí)按鍵S按鍵第一次按下
  183.               setsecondflag=1;//設(shè)時(shí)秒鐘標(biāo)志位變量置1,表示設(shè)時(shí)秒鐘數(shù)值修改。
  184.               setsecondge++;//設(shè)時(shí)秒鐘個(gè)位變量先賦值再加加
  185.               if(setsecondge==10)//判斷設(shè)時(shí)秒鐘個(gè)位變量設(shè)定值是否達(dá)到10
  186.               setsecondge=0;//設(shè)時(shí)秒鐘個(gè)位變量歸零
  187.               WriteCommand(0x80+0x00+0x07);//寫(xiě)入LCD1602字符型液晶顯示器第一行第7個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)秒鐘個(gè)位變量顯示位
  188.               WriteData(0x30+setsecondge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)秒鐘個(gè)位變量可顯示0到9的數(shù)字。
  189.               WriteCommand(0x80+0x00+0x07);//寫(xiě)入LCD1602字符型液晶顯示器第一行第7個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)秒鐘個(gè)位變量顯示位
  190.               setsecond=setsecondshi*10+setsecondge;//設(shè)時(shí)秒鐘變量求值
  191.               break;
  192.        case 2://設(shè)時(shí)按鍵S按鍵第二次按下
  193.               setsecondflag=1;//設(shè)時(shí)秒鐘標(biāo)志位變量置1,表示設(shè)時(shí)秒鐘數(shù)值修改。
  194.               setsecondshi++;//設(shè)時(shí)秒鐘十位變量先賦值再加加
  195.               if(setsecondshi==6)//判斷設(shè)時(shí)秒鐘十位變量設(shè)定值是否達(dá)到6
  196.               setsecondshi=0;//設(shè)時(shí)秒鐘十位變量數(shù)歸零
  197.               WriteCommand(0x80+0x00+0x06);//寫(xiě)入LCD1602字符型液晶顯示器第一行第6個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)秒鐘十位變量顯示位
  198.               WriteData(0x30+setsecondshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)秒鐘十位變量變量可顯示0到9的數(shù)字。
  199.               WriteCommand(0x80+0x00+0x06);//寫(xiě)入LCD1602字符型液晶顯示器第一行第6個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)秒鐘十位變量顯示位
  200.               setsecond=setsecondshi*10+setsecondge;//設(shè)時(shí)秒鐘變量求值
  201.               break;
  202.        case 3://設(shè)時(shí)按鍵S按鍵第三次按下
  203.               setminutanflag=1;//設(shè)時(shí)分鐘標(biāo)志位變量置1,表示設(shè)時(shí)分鐘數(shù)值修改。
  204.               setminutange++;//設(shè)時(shí)分鐘個(gè)位變量先賦值再加加
  205.               if(setminutange==10)//判斷設(shè)時(shí)分鐘個(gè)位變量設(shè)定值是否達(dá)到10
  206.               setminutange=0;//設(shè)時(shí)分鐘個(gè)位變量歸零
  207.               WriteCommand(0x80+0x00+0x04);//寫(xiě)入LCD1602字符型液晶顯示器第一行第4個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)分鐘個(gè)位變量顯示位
  208.               WriteData(0x30+setminutange);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)分鐘個(gè)位變量可顯示0到9的數(shù)字。
  209.               WriteCommand(0x80+0x00+0x04);//寫(xiě)入LCD1602字符型液晶顯示器第一行第4個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)分鐘個(gè)位變量顯示位
  210.               setminutan=setminutanshi*10+setminutange;//設(shè)時(shí)分鐘變量求值
  211.               break;
  212.        case 4://設(shè)時(shí)按鍵S按鍵第四次按下
  213.               setminutanflag=1;//設(shè)時(shí)分鐘標(biāo)志位變量置1,表示設(shè)時(shí)分鐘數(shù)值修改。
  214.               setminutanshi++;//設(shè)時(shí)分鐘十位變量先賦值再加加
  215.               if(setminutanshi==6)//判斷設(shè)時(shí)分鐘十位變量設(shè)定值是否達(dá)到6
  216.               setminutanshi=0;//設(shè)時(shí)分鐘十位變量歸零
  217.               WriteCommand(0x80+0x00+0x03);//寫(xiě)入LCD1602字符型液晶顯示器第一行第3個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)分鐘十位變量顯示位
  218.               WriteData(0x30+setminutanshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)分鐘十位變量可顯示0到9的數(shù)字。
  219.               WriteCommand(0x80+0x00+0x03);//寫(xiě)入LCD1602字符型液晶顯示器第一行第3個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)分鐘十位變量顯示位
  220.               setminutan=setminutanshi*10+setminutange;//設(shè)時(shí)分鐘變量求值
  221.               break;
  222.        case 5://設(shè)時(shí)按鍵S按鍵第五次按下
  223.               sethourflag=1;//設(shè)時(shí)時(shí)鐘標(biāo)志位變量置1,表示設(shè)時(shí)時(shí)鐘數(shù)值修改。
  224.               sethourge++;//設(shè)時(shí)時(shí)鐘個(gè)位變量先賦值再加加
  225.               if(sethourge==4)//判斷設(shè)時(shí)時(shí)鐘個(gè)位變量設(shè)定值是否達(dá)到4
  226.               sethourge=0;//設(shè)時(shí)時(shí)鐘個(gè)位變量歸零
  227.               WriteCommand(0x80+0x00+0x01);//寫(xiě)入LCD1602字符型液晶顯示器第一行第1個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)時(shí)鐘個(gè)位顯示位
  228.               WriteData(0x30+sethourge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)時(shí)鐘個(gè)位可顯示0到9的數(shù)字。
  229.               WriteCommand(0x80+0x00+0x01);//寫(xiě)入LCD1602字符型液晶顯示器第一行第1個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)時(shí)鐘個(gè)位顯示位
  230.               sethour=sethourshi*10+sethourge;//設(shè)時(shí)時(shí)鐘變量求值
  231.               break;
  232.        case 6://設(shè)時(shí)按鍵S按鍵第六次按下
  233.               sethourflag=1;//設(shè)時(shí)時(shí)鐘標(biāo)志位變量置1,表示設(shè)時(shí)時(shí)鐘數(shù)值修改。
  234.               sethourshi++;//設(shè)時(shí)時(shí)鐘十位變量先賦值再加加
  235.               if(sethourshi==3)//判斷設(shè)時(shí)時(shí)鐘十位設(shè)定值是否達(dá)到3
  236.               sethourshi=0;//設(shè)時(shí)時(shí)鐘十位歸零
  237.               WriteCommand(0x80+0x00+0x00);//寫(xiě)入LCD1602字符型液晶顯示器第一行第0個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)時(shí)鐘十位顯示位
  238.               WriteData(0x30+sethourshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)時(shí)鐘十位可顯示0到9的數(shù)字。
  239.               WriteCommand(0x80+0x00+0x00);//寫(xiě)入LCD1602字符型液晶顯示器第一行第0個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)時(shí)鐘十位顯示位
  240.               sethour=sethourshi*10+sethourshi;//設(shè)時(shí)時(shí)鐘變量求值
  241.               break;
  242.              }
  243.            }
  244.          }
  245.        }
  246.    if(Snum!=0)//判斷設(shè)時(shí)按鍵S按鍵按下次數(shù)變量是否為0
  247.   {
  248.     if(S3==0)//判斷減少按鍵S3是否按下
  249.    {
  250.      Delay(5);//延時(shí)
  251.      if(S3==0)//再次判斷減少按鍵S3是否按下
  252.     {
  253.       S3numflag=1;//減少鍵標(biāo)志位變量,可以在時(shí)間報(bào)警函數(shù)內(nèi)進(jìn)行設(shè)時(shí)報(bào)警。
  254.       while(!S3);//等待減少按鍵S3彈起
  255.       switch(Snum)//設(shè)時(shí)按鍵S按鍵按下次數(shù)變量選擇位
  256.      {
  257.        case 1://設(shè)時(shí)按鍵S按鍵第一次按下
  258.               setsecondflag=1;//設(shè)時(shí)秒鐘標(biāo)志位變量置1,表示設(shè)時(shí)秒鐘數(shù)值修改。
  259.               setsecondge--;//設(shè)時(shí)秒鐘個(gè)位變量先賦值再減減
  260.               if(setsecondge==-1)//判斷設(shè)時(shí)秒鐘個(gè)位變量設(shè)定值是否達(dá)到-1
  261.               setsecondge=9;//設(shè)時(shí)秒鐘個(gè)位變量置9
  262.               WriteCommand(0x80+0x00+0x07);//寫(xiě)入LCD1602字符型液晶顯示器第一行第7個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)秒鐘個(gè)位變量顯示位
  263.               WriteData(0x30+setsecondge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)秒鐘個(gè)位變量可顯示0到9的數(shù)字。
  264.               WriteCommand(0x80+0x00+0x07);//寫(xiě)入LCD1602字符型液晶顯示器第一行第7個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)秒鐘個(gè)位變量顯示位
  265.               setsecond=setsecondshi*10+setsecondge;//設(shè)時(shí)秒鐘變量求值
  266.               break;
  267.        case 2://設(shè)時(shí)按鍵S按鍵第二次按下
  268.               setsecondflag=1;//設(shè)時(shí)秒鐘標(biāo)志位變量置1,表示設(shè)時(shí)秒鐘數(shù)值修改。
  269.               setsecondshi--;//設(shè)時(shí)秒鐘十位變量先賦值再減減
  270.               if(setsecondshi==-1)//判斷設(shè)時(shí)秒鐘十位變量設(shè)定值是否達(dá)到-1
  271.               setsecondshi=5;//設(shè)時(shí)秒鐘十位變量數(shù)置5
  272.               WriteCommand(0x80+0x00+0x06);//寫(xiě)入LCD1602字符型液晶顯示器第一行第6個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)秒鐘十位變量顯示位
  273.               WriteData(0x30+setsecondshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)秒鐘十位變量變量可顯示0到9的數(shù)字。
  274.               WriteCommand(0x80+0x00+0x06);//寫(xiě)入LCD1602字符型液晶顯示器第一行第6個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)秒鐘十位變量顯示位
  275.               setsecond=setsecondshi*10+setsecondge;//設(shè)時(shí)秒鐘變量求值
  276.               break;
  277.        case 3://設(shè)時(shí)按鍵S按鍵第三次按下
  278.               setminutanflag=1;//設(shè)時(shí)分鐘標(biāo)志位變量置1,表示設(shè)時(shí)分鐘數(shù)值修改。
  279.               setminutange--;//設(shè)時(shí)分鐘個(gè)位變量先賦值再減減
  280.               if(setminutange==-1)//判斷設(shè)時(shí)分鐘個(gè)位變量設(shè)定值是否達(dá)到-1
  281.               setminutange=9;//設(shè)時(shí)分鐘個(gè)位變量置9
  282.               WriteCommand(0x80+0x00+0x04);//寫(xiě)入LCD1602字符型液晶顯示器第一行第4個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)分鐘個(gè)位變量顯示位
  283.               WriteData(0x30+setminutange);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)分鐘個(gè)位變量可顯示0到9的數(shù)字。
  284.               WriteCommand(0x80+0x00+0x04);//寫(xiě)入LCD1602字符型液晶顯示器第一行第4個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)分鐘個(gè)位變量顯示位
  285.               setminutan=setminutanshi*10+setminutange;//設(shè)時(shí)分鐘變量求值
  286.               break;
  287.        case 4://設(shè)時(shí)按鍵S按鍵第四次按下
  288.               setminutanflag=1;//設(shè)時(shí)分鐘標(biāo)志位變量置1,表示設(shè)時(shí)分鐘數(shù)值修改。
  289.               setminutanshi--;//設(shè)時(shí)分鐘十位變量先賦值再減減
  290.               if(setminutanshi==-1)//判斷設(shè)時(shí)分鐘十位變量設(shè)定值是否達(dá)到-1
  291.               setminutanshi=5;//設(shè)時(shí)分鐘十位變量置9
  292.               WriteCommand(0x80+0x00+0x03);//寫(xiě)入LCD1602字符型液晶顯示器第一行第3個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)分鐘十位變量顯示位
  293.               WriteData(0x30+setminutanshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)分鐘十位變量可顯示0到9的數(shù)字。
  294.               WriteCommand(0x80+0x00+0x03);//寫(xiě)入LCD1602字符型液晶顯示器第一行第3個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)分鐘十位變量顯示位
  295.               setminutan=setminutanshi*10+setminutange;//設(shè)時(shí)分鐘變量求值
  296.               break;
  297.        case 5://設(shè)時(shí)按鍵S按鍵第五次按下
  298.               sethourflag=1;//設(shè)時(shí)時(shí)鐘標(biāo)志位變量置1,表示設(shè)時(shí)時(shí)鐘數(shù)值修改。
  299.               sethourge--;//設(shè)時(shí)時(shí)鐘個(gè)位變量先賦值再減減
  300.               if(sethourge==-1)//判斷設(shè)時(shí)時(shí)鐘個(gè)位變量設(shè)定值是否達(dá)到-1
  301.               sethourge=3;//設(shè)時(shí)時(shí)鐘個(gè)位變量置3
  302.               WriteCommand(0x80+0x00+0x01);//寫(xiě)入LCD1602字符型液晶顯示器第一行第1個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)時(shí)鐘個(gè)位顯示位
  303.               WriteData(0x30+sethourge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)時(shí)鐘個(gè)位可顯示0到9的數(shù)字。
  304.               WriteCommand(0x80+0x00+0x01);//寫(xiě)入LCD1602字符型液晶顯示器第一行第1個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)時(shí)鐘個(gè)位顯示位
  305.               sethour=sethourshi*10+sethourge;//設(shè)時(shí)時(shí)鐘變量求值
  306.               break;
  307.        case 6://設(shè)時(shí)按鍵S按鍵第六次按下
  308.               sethourflag=1;//設(shè)時(shí)時(shí)鐘標(biāo)志位變量置1,表示設(shè)時(shí)時(shí)鐘數(shù)值修改。
  309.               sethourshi--;//設(shè)時(shí)時(shí)鐘十位變量先賦值再減減
  310.               if(sethourshi==-1)//判斷設(shè)時(shí)時(shí)鐘十位設(shè)定值是否達(dá)到-1
  311.               sethourshi=2;//設(shè)時(shí)時(shí)鐘十位置2
  312.               WriteCommand(0x80+0x00+0x00);//寫(xiě)入LCD1602字符型液晶顯示器第一行第0個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)時(shí)鐘十位顯示位
  313.               WriteData(0x30+sethourshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)時(shí)鐘十位可顯示0到9的數(shù)字。
  314.               WriteCommand(0x80+0x00+0x00);//寫(xiě)入LCD1602字符型液晶顯示器第一行第0個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)時(shí)時(shí)鐘十位顯示位
  315.               sethour=sethourshi*10+sethourge;//設(shè)時(shí)時(shí)鐘變量求值
  316.               break;
  317.             }
  318.            }
  319.          }
  320.        }
  321.      }   
  322.   void SetTemperatureKeyScan()//設(shè)溫按鍵掃描函數(shù)
  323. {
  324.    if(S0==0)//判斷設(shè)溫按鍵S0是否按下
  325.   {
  326.     Delay(5);//延時(shí)
  327.     if(S0==0)//再次判斷設(shè)溫按鍵S0是否按下
  328.    {
  329.      settemperatureflag=0;//設(shè)溫標(biāo)志位變量置0,在溫度報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,余留settemperatureflag==1,當(dāng)再次操作設(shè)溫按鍵掃描函數(shù)設(shè)溫時(shí),會(huì)發(fā)生在設(shè)溫過(guò)程中觸發(fā)設(shè)溫報(bào)警條件而報(bào)警,因此在設(shè)溫按鍵掃描函數(shù)里邊添加settemperatureflag=0,再次執(zhí)行設(shè)溫按鍵掃描函數(shù)后,溫度報(bào)警函數(shù)里邊settemperatureflag==1被置換成settemperatureflag=0,很好地解決了再次操作設(shè)溫按鍵掃描函數(shù)設(shè)溫時(shí),在設(shè)溫過(guò)程中觸發(fā)設(shè)溫報(bào)警條件而報(bào)警的問(wèn)題。
  330.      TR0flag=0;//定時(shí)器0標(biāo)志位變量置0,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留TR0flag==1,假若時(shí)間報(bào)警函數(shù)里邊存在TR0=1,當(dāng)操作設(shè)溫按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng),因此在設(shè)溫按鍵掃描函數(shù)里邊添加TR0flag=0,執(zhí)行設(shè)溫按鍵掃描函數(shù)后,時(shí)間報(bào)警函數(shù)里邊TR0flag==1被置換成TR0flag=1,很好地解決了在操作設(shè)溫按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng)?shù)膯?wèn)題
  331.      setsecondflag=0;//設(shè)時(shí)秒鐘標(biāo)志位變量置0,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留setsecondflag==1,假若時(shí)間報(bào)警函數(shù)里邊存在TR0=1,當(dāng)操作設(shè)溫按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng),因此在設(shè)溫按鍵掃描函數(shù)里邊添加setsecondflag=0,執(zhí)行設(shè)溫按鍵掃描函數(shù)后,時(shí)間報(bào)警函數(shù)里邊setsecondflag==1被置換成setsecondflag=0,很好地解決了在操作設(shè)溫按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng)?shù)膯?wèn)題
  332.      setminutanflag=0;//設(shè)時(shí)分鐘標(biāo)志位變量置0,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留setminutanflag==1,假若時(shí)間報(bào)警函數(shù)里邊存在TR0=1,當(dāng)操作設(shè)溫按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng),因此在設(shè)溫按鍵掃描函數(shù)里邊添加setminutanflag=0,執(zhí)行設(shè)溫按鍵掃描函數(shù)后,時(shí)間報(bào)警函數(shù)里邊setminutanflag==1被置換成setminutanflag=0,很好地解決了在操作設(shè)溫按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng)?shù)膯?wèn)題
  333.      sethourflag=0;//設(shè)時(shí)時(shí)鐘標(biāo)志位變量置0,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留sethourflag==1,假若時(shí)間報(bào)警函數(shù)里邊存在TR0=1,當(dāng)操作設(shè)溫按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng),因此在設(shè)溫按鍵掃描函數(shù)里邊添加sethourflag=0,執(zhí)行設(shè)溫按鍵掃描函數(shù)后,時(shí)間報(bào)警函數(shù)里邊sethourflag==1被置換成sethourflag=0,很好地解決了在操作設(shè)溫按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng)?shù)膯?wèn)題
  334.      S0num++;//設(shè)溫按鍵S0按鍵次數(shù)變量先賦值再自加
  335.      while(!S0);//等待設(shè)溫按鍵S0彈起
  336.      switch(S0num)//設(shè)溫按鍵S0按鍵按下次數(shù)變量選擇位
  337.     {
  338.       case 1://設(shè)溫按鍵S0按鍵第一次按下
  339.              TR0=0;//關(guān)定時(shí)器0
  340.              settimedisplayflag=1;//設(shè)時(shí)顯示標(biāo)志位變量置1,在操作設(shè)溫按鍵掃描函數(shù)的情況下,不能操作設(shè)時(shí)按鍵掃描函數(shù)。
  341.              tiaotimedisplayflag=1;//調(diào)時(shí)顯示標(biāo)志位變量置1,在操作設(shè)溫按鍵掃描函數(shù)的情況下,不能操作調(diào)時(shí)按鍵掃描函數(shù)。
  342.              lcd1602displaytimeflag=1;//液晶顯示器顯示時(shí)間標(biāo)志位變量置1,在操作設(shè)溫按鍵掃描函數(shù)的情況下,不受時(shí)鐘兩位數(shù)分解函數(shù)和分鐘兩位數(shù)分解函數(shù)和秒鐘兩位數(shù)分解函數(shù)影響。
  343.              temperaturedisplayflag=1;//溫度顯示標(biāo)志位變量置1,在操作設(shè)溫按鍵掃描函數(shù)的情況下,不受溫度分解函數(shù)和溫度顯示函數(shù)影響。
  344.              WriteCommand(0x80+0x00+0x0d);//LCD1602字符型液晶顯示器第一行第13個(gè)(從第0開(kāi)始數(shù))位置的顯示位
  345.              WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  346.              break;
  347.       case 2://設(shè)溫按鍵S0按鍵第二次按下
  348.              WriteCommand(0x80+0x00+0x0b);//LCD1602字符型液晶顯示器第一行第11個(gè)(從第0開(kāi)始數(shù))個(gè)位置的顯示位
  349.              WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  350.              break;
  351.       case 3://設(shè)溫按鍵S0按鍵第三次按下
  352.              WriteCommand(0x80+0x00+0x0a);//LCD1602字符型液晶顯示器第一行第10個(gè)(從第0開(kāi)始數(shù))位置的顯示位
  353.               WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  354.               break;
  355.       case 4://設(shè)溫按鍵S0按鍵第四次按下
  356.              WriteCommand(0x80+0x00+0x09);//LCD1602字符型液晶顯示器第一行第9個(gè)(從第0開(kāi)始數(shù))位置的顯示位
  357.              WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  358.              break;
  359.       case 5://設(shè)溫按鍵S0按鍵第五次按下
  360.              WriteCommand(0x80+0x00+0x08);//LCD1602字符型液晶顯示器第一行第8個(gè)(從第0開(kāi)始數(shù))位置的顯示位
  361.              WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  362.              break;
  363.       case 6://設(shè)溫按鍵S0按鍵第六次按下
  364.              WriteCommand(0x80+0x00+0x0d);//LCD1602字符型液晶顯示器第一行第13個(gè)(從第0開(kāi)始數(shù))位置的顯示位
  365.              WriteCommand(0x0c);//關(guān)光標(biāo)(或字符)閃爍。
  366.              TR0=1;//開(kāi)定時(shí)器0
  367.              S0num=0;//設(shè)溫按鍵S0按鍵按下次數(shù)清零,可以反復(fù)操作設(shè)溫按鍵。
  368.              settimedisplayflag=0;//設(shè)時(shí)顯示標(biāo)志位變量置0,讓設(shè)溫按鍵掃描函數(shù)執(zhí)行后,可允許設(shè)時(shí)按鍵掃描函數(shù)執(zhí)行。
  369.              tiaotimedisplayflag=0;//調(diào)時(shí)顯示標(biāo)志位變量置0,讓設(shè)溫按鍵掃描函數(shù)執(zhí)行后,可允許調(diào)時(shí)按鍵掃描函數(shù)執(zhí)行。
  370.              lcd1602displaytimeflag=0;//液晶顯示器顯示時(shí)間標(biāo)志位變量置0,讓設(shè)溫按鍵掃描函數(shù)執(zhí)行后,可允許時(shí)鐘兩位數(shù)分解函數(shù)和分鐘兩位數(shù)分解函數(shù)和秒鐘兩位數(shù)分解函數(shù)執(zhí)行。
  371.              temperaturedisplayflag=0;//溫度顯示標(biāo)志位變量置0,讓設(shè)溫按鍵掃描函數(shù)執(zhí)行后,可允許溫度分解函數(shù)和溫度顯示函數(shù)執(zhí)行。
  372.              settemperatureflag=1;//設(shè)溫標(biāo)志位變量置1,為了在操作設(shè)溫按鍵掃描函數(shù)進(jìn)行設(shè)溫后,可以執(zhí)行溫度報(bào)警函數(shù)。
  373.              break;
  374.      default:
  375.              S0num=0;//設(shè)溫按鍵S0按鍵按下次數(shù)清零
  376.              break;
  377.                            
  378.     }
  379.    }
  380.   }
  381.    if(S0num!=0)//判斷設(shè)溫按鍵S0按鍵按下次數(shù)變量是否為0
  382.   {
  383.     if(S2==0)//判斷增加按鍵S2是否按下
  384.    {
  385.      Delay(5);//延時(shí)
  386.      if(S2==0)//再次判斷增加按鍵S2是否按下
  387.     {
  388.       S2numflag=1;//增加鍵標(biāo)志位變量置1,可以在溫度報(bào)警函數(shù)內(nèi)進(jìn)行設(shè)報(bào)警。
  389.       while(!S2);//等待增加按鍵S2彈起
  390.       switch(S0num)//設(shè)溫按鍵S0按鍵按下次數(shù)變量選擇位
  391.      {
  392.        case 1://設(shè)溫按鍵S0按鍵第一次按下
  393.               setwenduxiaoshu++;//設(shè)溫小數(shù)位變量先賦值再加加
  394.               if(setwenduxiaoshu==10)//判斷設(shè)溫小數(shù)位變量設(shè)定值是否達(dá)到10
  395.               setwenduxiaoshu=0;//設(shè)溫小數(shù)位變量歸零
  396.               WriteCommand(0x80+0x00+0x0d);//寫(xiě)入LCD1602字符型液晶顯示器第一行第13個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫小數(shù)位顯示位
  397.               WriteData(0x30+setwenduxiaoshu);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫小數(shù)位可顯示0到9的數(shù)字。
  398.               WriteCommand(0x80+0x00+0x0d);//寫(xiě)入LCD1602字符型液晶顯示器第一行第13個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫小數(shù)位顯示位
  399.               settemperature=setwendubai*1000+setwendushi*100+setwenduge*10+setwenduxiaoshu;//設(shè)溫變量求值
  400.               break;
  401.        case 2://設(shè)溫按鍵S0按鍵第二次按下
  402.               setwenduge++;//設(shè)溫個(gè)位變量先賦值再加加
  403.               if(setwenduge==6)//判斷設(shè)溫個(gè)位變量設(shè)定值是否達(dá)到6
  404.               setwenduge=0;//設(shè)溫個(gè)位變量數(shù)歸零
  405.               WriteCommand(0x80+0x00+0x0b);//寫(xiě)入LCD1602字符型液晶顯示器第一行第11個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫個(gè)位顯示位
  406.               WriteData(0x30+setwenduge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫個(gè)位可顯示0到9的數(shù)字。
  407.               WriteCommand(0x80+0x00+0x0b);//寫(xiě)入LCD1602字符型液晶顯示器第一行第11個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫個(gè)位顯示位
  408.               settemperature=setwendubai*1000+setwendushi*100+setwenduge*10+setwenduxiaoshu;//設(shè)溫變量求值
  409.               break;
  410.        case 3://設(shè)溫按鍵S0按鍵第三次按下
  411.               setwendushi++;//設(shè)溫十位變量先賦值再加加
  412.               if(setwendushi==3)//判斷設(shè)溫十位變量設(shè)定值是否達(dá)到3
  413.               setwendushi=0;//設(shè)溫十位變量歸零
  414.               WriteCommand(0x80+0x00+0x0a);//寫(xiě)入LCD1602字符型液晶顯示器第一行第10個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫十位顯示位
  415.               WriteData(0x30+setwendushi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫十位可顯示0到9的數(shù)字。
  416.               WriteCommand(0x80+0x00+0x0a);//寫(xiě)入LCD1602字符型液晶顯示器第一行第10個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫十位顯示位
  417.               settemperature=setwendubai*1000+setwendushi*100+setwenduge*10+setwenduxiaoshu;//設(shè)溫變量求值
  418.               break;
  419.        case 4://設(shè)溫按鍵S0按鍵第四次按下
  420.               setwendubai++;//設(shè)溫百位變量先賦值再加加
  421.               if(setwendubai==2)//判斷設(shè)溫百位變量設(shè)定值是否達(dá)到2
  422.               setwendubai=0;//設(shè)溫百位變量歸零
  423.               WriteCommand(0x80+0x00+0x09);//寫(xiě)入LCD1602字符型液晶顯示器第一行第9個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫百位顯示位
  424.               WriteData(0x30+setwendubai);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫百位可顯示0到9的數(shù)字。
  425.               WriteCommand(0x80+0x00+0x09);//寫(xiě)入LCD1602字符型液晶顯示器第一行第9個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫百位顯示位
  426.               settemperature=setwendubai*1000+setwendushi*100+setwenduge*10+setwenduxiaoshu;//設(shè)溫變量求值
  427.               break;
  428.        case 5://設(shè)溫按鍵S0按鍵第五次按下
  429.               WriteCommand(0x80+0x00+0x08);//寫(xiě)入LCD1602字符型液晶顯示器第一行第8個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫負(fù)符號(hào)顯示位
  430.               WriteData(0x2b);//0x2d表示字符庫(kù)的正符號(hào)
  431.               WriteCommand(0x80+0x00+0x08);//寫(xiě)入LCD1602字符型液晶顯示器第一行第8個(gè)(從第0個(gè)開(kāi)始數(shù))個(gè)位置的設(shè)溫負(fù)符號(hào)顯示位
  432.               break;
  433.       }
  434.      }
  435.     }
  436.    }
  437.    if(S0num!=0)//判斷設(shè)溫按鍵S0按鍵按下次數(shù)變量是否為0
  438.   {
  439.     if(S3==0)//判斷減少按鍵S2是否按下
  440.    {
  441.      Delay(5);//延時(shí)
  442.      if(S3==0)//再次判斷減少按鍵S2是否按下
  443.     {
  444.       S3numflag=1;//減少鍵標(biāo)志位變量置1,可以在溫度報(bào)警函數(shù)內(nèi)進(jìn)行設(shè)報(bào)警。
  445.       while(!S3);//等待減少按鍵S2彈起
  446.       switch(S0num)//設(shè)溫按鍵S0按鍵按下次數(shù)變量選擇位
  447.      {
  448.         case 1://設(shè)溫按鍵S0按鍵第一次按下
  449.                setwenduxiaoshu--;//設(shè)溫小數(shù)位變量先賦值再減減
  450.                if(setwenduxiaoshu==-1)//判斷設(shè)溫小數(shù)位變量設(shè)定值是否達(dá)到-1
  451.                setwenduxiaoshu=9;//設(shè)溫小數(shù)位變量置9
  452.                WriteCommand(0x80+0x00+0x0d);//寫(xiě)入LCD1602字符型液晶顯示器第一行第13個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫小數(shù)位顯示位
  453.                WriteData(0x30+setwenduxiaoshu);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫小數(shù)位可顯示0到9的數(shù)字。
  454.                WriteCommand(0x80+0x00+0x0d);//寫(xiě)入LCD1602字符型液晶顯示器第一行第13個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫小數(shù)位顯示位
  455.                settemperature=setwendubai*1000+setwendushi*100+setwenduge*10+setwenduxiaoshu;//設(shè)溫變量求值
  456.                break;
  457.         case 2://設(shè)溫按鍵S0按鍵第二次按下
  458.                setwenduge--;//設(shè)溫個(gè)位變量先賦值再減減
  459.                if(setwenduge==-1)//判斷設(shè)溫個(gè)位變量設(shè)定值是否達(dá)到-1
  460.                setwenduge=5;//設(shè)溫個(gè)位變量數(shù)置5
  461.                WriteCommand(0x80+0x00+0x0b);//寫(xiě)入LCD1602字符型液晶顯示器第一行第11個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫個(gè)位顯示位
  462.                WriteData(0x30+setwenduge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫個(gè)位可顯示0到9的數(shù)字。
  463.                WriteCommand(0x80+0x00+0x0b);//寫(xiě)入LCD1602字符型液晶顯示器第一行第11個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫個(gè)位顯示位
  464.                settemperature=setwendubai*1000+setwendushi*100+setwenduge*10+setwenduxiaoshu;//設(shè)溫變量求值
  465.                break;
  466.         case 3://設(shè)溫按鍵S0按鍵第三次按下
  467.                setwendushi--;//設(shè)溫十位變量先賦值再減減
  468.                if(setwendushi==-1)//判斷設(shè)溫十位變量設(shè)定值是否達(dá)到-1
  469.                setwendushi=2;//設(shè)溫十位變量置2
  470.                WriteCommand(0x80+0x00+0x0a);//寫(xiě)入LCD1602字符型液晶顯示器第一行第10個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫十位顯示位
  471.                WriteData(0x30+setwendushi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫十位可顯示0到9的數(shù)字。
  472.                WriteCommand(0x80+0x00+0x0a);//寫(xiě)入LCD1602字符型液晶顯示器第一行第10個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫十位顯示位
  473.                settemperature=setwendubai*1000+setwendushi*100+setwenduge*10+setwenduxiaoshu;//設(shè)溫變量求值
  474.                break;
  475.         case 4://設(shè)溫按鍵S0按鍵第四次按下
  476.                setwendubai--;//設(shè)溫百位變量先賦值再減減
  477.                if(setwendubai==-1)//判斷設(shè)溫百位變量設(shè)定值是否達(dá)到-1
  478.                setwendubai=1;//設(shè)溫百位變量置1
  479.                WriteCommand(0x80+0x00+0x09);//寫(xiě)入LCD1602字符型液晶顯示器第一行第9個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫百位顯示位
  480.                WriteData(0x30+setwendubai);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫百位可顯示0到9的數(shù)字。
  481.                WriteCommand(0x80+0x00+0x09);//寫(xiě)入LCD1602字符型液晶顯示器第一行第9個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫百位顯示位
  482.                settemperature=setwendubai*1000+setwendushi*100+setwenduge*10+setwenduxiaoshu;//設(shè)溫變量求值
  483.                break;
  484.         case 5://設(shè)溫按鍵S0按鍵第五次按下
  485.                WriteCommand(0x80+0x00+0x08);//寫(xiě)入LCD1602字符型液晶顯示器第一行第8個(gè)(從第0個(gè)開(kāi)始數(shù))位置的設(shè)溫負(fù)符號(hào)顯示位
  486.                WriteData(0x2d);//0x2d表示字符庫(kù)的負(fù)符號(hào)
  487.                WriteCommand(0x80+0x00+0x08);//寫(xiě)入LCD1602字符型液晶顯示器第一行第8個(gè)(從第0個(gè)開(kāi)始數(shù))個(gè)位置的設(shè)溫負(fù)符號(hào)顯示位
  488.                break;
  489.        }
  490.       }
  491.      }
  492.     }
  493.    }
  494.   void TiaoTimeKeyScan()//調(diào)時(shí)按鍵掃描函數(shù)
  495. {
  496.    if(S1==0)//判斷調(diào)時(shí)按鍵S1是否按下                                          
  497.   {
  498.     Delay(5);//延時(shí)
  499.     if(S1==0)//再次判斷調(diào)時(shí)按鍵S1是否按下
  500.    {        
  501.      settemperatureflag=0;//設(shè)溫標(biāo)志位變量置0,在溫度報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,溫度報(bào)警函數(shù)里邊余留settemperatureflag==1和TR0=1,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng),因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加settemperatureflag=0和TR0=0,執(zhí)行調(diào)時(shí)按鍵掃描函數(shù)后,溫度報(bào)警函數(shù)里邊settemperatureflag==1和TR0=1被置換成settemperatureflag=0和TR0=0,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)時(shí),計(jì)時(shí)依然在執(zhí)行,導(dǎo)致計(jì)時(shí)不恰當(dāng)?shù)膯?wèn)題。
  502.      S1num++;//調(diào)時(shí)按鍵S1按鍵次數(shù)變量先賦值再自加
  503.      while(!S1);//等待調(diào)時(shí)按鍵S1彈起
  504.      switch(S1num)//調(diào)時(shí)按鍵S1按鍵按下次數(shù)變量選擇位
  505.     {
  506.       case 1://調(diào)時(shí)按鍵S1按鍵第一次按下
  507.              TR0=0;//關(guān)定時(shí)器0
  508.              settimedisplayflag=1;//設(shè)時(shí)顯示標(biāo)志位變量置1,在操作調(diào)時(shí)按鍵掃描函數(shù)的情況下,不能操作設(shè)時(shí)按鍵掃描函數(shù)。
  509.              settemperaturedisplayflag=1;//設(shè)溫顯示標(biāo)志位變量置1,在操作調(diào)時(shí)按鍵掃描函數(shù)的情況下,不能操作設(shè)溫按鍵掃描函數(shù)。
  510.              lcd1602displaytimeflag=1;//液晶顯示器顯示時(shí)間標(biāo)志位變量等于1,在操作調(diào)時(shí)按鍵掃描函數(shù)的情況下,不受時(shí)鐘兩位數(shù)分解函數(shù)和分鐘兩位數(shù)分解函數(shù)和秒鐘兩位數(shù)分解函數(shù)影響。
  511.              temperaturedisplayflag=1;//溫度顯示標(biāo)志位變量等于1,在操作調(diào)時(shí)按鍵掃描函數(shù)的情況下,不受溫度分解函數(shù)和溫度顯示函數(shù)影響。
  512.              secondge=miao%10;//關(guān)掉定時(shí)器0定時(shí)后,把秒鐘計(jì)時(shí)時(shí)間數(shù)值取余賦給秒鐘個(gè)位顯示位。
  513.              secondshi=miao/10;//關(guān)掉定時(shí)器0定時(shí)后,把秒鐘計(jì)時(shí)時(shí)間數(shù)值取除賦給秒鐘十位顯示位。
  514.              WriteCommand(0x80+0x40+0x07);//LCD1602字符型液晶顯示器第二行第8個(gè)位置的顯示位
  515.              WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  516.              break;
  517.       case 2://調(diào)時(shí)按鍵S1按鍵第二次按下
  518.              secondshi=secondshi;//關(guān)掉定時(shí)器0定時(shí)后,把秒鐘計(jì)時(shí)時(shí)間數(shù)值取除后得到的值再賦給秒鐘十位顯示位。
  519.              WriteCommand(0x80+0x40+0x06);//LCD1602字符型液晶顯示器第二行第7個(gè)位置的顯示位
  520.              WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  521.              break;
  522.       case 3://調(diào)時(shí)按鍵S1按鍵第三次按下
  523.              minutange=fen%10;//關(guān)掉定時(shí)器0定時(shí)后,把分鐘計(jì)時(shí)時(shí)間數(shù)值取余賦給分鐘個(gè)位顯示位。
  524.              minutanshi=fen/10;//關(guān)掉定時(shí)器0定時(shí)后,把分鐘計(jì)時(shí)時(shí)間數(shù)值取除賦給分鐘十位顯示位。
  525.              WriteCommand(0x80+0x40+0x04);//LCD1602字符型液晶顯示器第二行第5個(gè)位置的顯示位
  526.              WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  527.              break;
  528.       case 4://調(diào)時(shí)按鍵S1按鍵第四次按下
  529.              minutanshi=minutanshi;//關(guān)掉定時(shí)器0定時(shí)后,把分鐘計(jì)時(shí)時(shí)間數(shù)值取除后得到的值再賦給分鐘十位顯示位。
  530.              WriteCommand(0x80+0x40+0x03);//LCD1602字符型液晶顯示器第二行第4個(gè)位置的顯示位
  531.              WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  532.              break;
  533.       case 5://調(diào)時(shí)按鍵S1按鍵第五次按下
  534.              hourge=shi%10;//關(guān)掉定時(shí)器0定時(shí)后,把時(shí)鐘計(jì)時(shí)時(shí)間數(shù)值取余賦給時(shí)鐘個(gè)位顯示位。
  535.              hourshi=shi/10;//關(guān)掉定時(shí)器0定時(shí)后,把時(shí)鐘計(jì)時(shí)時(shí)間數(shù)值取除賦給時(shí)鐘十位顯示位。
  536.              WriteCommand(0x80+0x40+0x01);//LCD1602字符型液晶顯示器第二行第2個(gè)位置的顯示位
  537.              WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  538.              break;
  539.       case 6://調(diào)時(shí)按鍵S1按鍵第六次按下
  540.              hourshi=hourshi;//關(guān)掉定時(shí)器0定時(shí)后,把時(shí)鐘計(jì)時(shí)時(shí)間數(shù)值取除后得到的值再賦給時(shí)鐘十位顯示位。
  541.              WriteCommand(0x80+0x40+0x00);//LCD1602字符型液晶顯示器第二行第1個(gè)位置的顯示位
  542.              WriteCommand(0x0f);//開(kāi)LCD1602字符型液晶顯示器顯示,開(kāi)光標(biāo),開(kāi)光標(biāo)(或字符)閃爍。
  543.              break;
  544.       case 7://調(diào)時(shí)按鍵S1按鍵第七次按下
  545.              WriteCommand(0x80+0x40+0x07);//LCD1602字符型液晶顯示器第二行第8個(gè)位置的顯示位
  546.              WriteCommand(0x0c);//關(guān)光標(biāo)(或字符)閃爍。
  547.              TR0=1;//開(kāi)定時(shí)器0
  548.              S1num=0;//調(diào)時(shí)按鍵S1按鍵按下次數(shù)清零,可以反復(fù)操作調(diào)時(shí)按鍵。
  549.              settimedisplayflag=0;//設(shè)時(shí)顯示標(biāo)志位變量置0,讓調(diào)時(shí)按鍵掃描函數(shù)執(zhí)行后,可允許設(shè)時(shí)按鍵掃描函數(shù)執(zhí)行。
  550.              settemperaturedisplayflag=0;//設(shè)溫顯示標(biāo)志位變量置0,讓調(diào)時(shí)按鍵掃描函數(shù)執(zhí)行后,可允許設(shè)溫按鍵掃描函數(shù)執(zhí)行。
  551.              lcd1602displaytimeflag=0;//液晶顯示器顯示時(shí)間標(biāo)志位變量等于0,讓調(diào)時(shí)按鍵掃描函數(shù)執(zhí)行后,可允許時(shí)鐘兩位數(shù)分解函數(shù)和分鐘兩位數(shù)分解函數(shù)和秒鐘兩位數(shù)分解函數(shù)執(zhí)行。
  552.              temperaturedisplayflag=0;//溫度顯示標(biāo)志位變量等于0,讓調(diào)時(shí)按鍵掃描函數(shù)執(zhí)行后,可允許溫度分解函數(shù)和溫度顯示函數(shù)執(zhí)行。
  553.              miaoflag=0;//秒鐘標(biāo)志位變量置0,在操作調(diào)時(shí)按鍵掃描函數(shù)進(jìn)行調(diào)時(shí)后,調(diào)時(shí)按鍵掃描函數(shù)里邊余留miaoflag==1,不解除會(huì)導(dǎo)致時(shí)間報(bào)警函數(shù)不能啟動(dòng)報(bào)警判別,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加miaoflag=0,執(zhí)行調(diào)時(shí)按鍵掃描函數(shù)后,時(shí)間報(bào)警函數(shù)就可以做出相應(yīng)時(shí)間報(bào)警。
  554.              fenflag=0;//分鐘標(biāo)志位變量置0,在操作調(diào)時(shí)按鍵掃描函數(shù)進(jìn)行調(diào)時(shí)后,調(diào)時(shí)按鍵掃描函數(shù)里邊余留fenflag==1,不解除會(huì)導(dǎo)致時(shí)間報(bào)警函數(shù)不能啟動(dòng)報(bào)警判別,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加fenflag=0,執(zhí)行調(diào)時(shí)按鍵掃描函數(shù)后,時(shí)間報(bào)警函數(shù)就可以做出相應(yīng)時(shí)間報(bào)警。
  555.              shiflag=0;//時(shí)鐘標(biāo)志位變量置0,在操作調(diào)時(shí)按鍵掃描函數(shù)進(jìn)行調(diào)時(shí)后,調(diào)時(shí)按鍵掃描函數(shù)里邊余留shiflag==1,不解除會(huì)導(dǎo)致時(shí)間報(bào)警函數(shù)不能啟動(dòng)報(bào)警判別,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加shiflag=0,執(zhí)行調(diào)時(shí)按鍵掃描函數(shù)后,時(shí)間報(bào)警函數(shù)就可以做出相應(yīng)時(shí)間報(bào)警。
  556.              break;
  557.      default:
  558.              S1num=0;//調(diào)時(shí)按鍵S1按鍵按下次數(shù)清零,可以反復(fù)操作調(diào)時(shí)按鍵。
  559.              break;
  560.     }
  561.    }
  562.   }
  563.    if(S1num!=0)//判斷調(diào)時(shí)按鍵S1按鍵按下次數(shù)變量是否為0
  564.   {
  565.     if(S2==0)//判斷增加按鍵S2是否按下
  566.    {
  567.      Delay(5);//延時(shí)
  568.      if(S2==0)//再次判斷增加按鍵S2是否按下
  569.     {
  570.       while(!S2);//等待增加按鍵S2彈起
  571.       switch(S1num)//調(diào)時(shí)按鍵S1按鍵按下次數(shù)變量選擇位
  572.      {
  573.        case 1://調(diào)時(shí)按鍵S1按鍵第一次按下
  574.               miaoflag=1;//秒鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留miaoflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加miaoflag=1,時(shí)間報(bào)警函數(shù)里邊miaoflag==0被置換成miaoflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
  575.               secondge++;//秒鐘個(gè)位數(shù)先賦值再加加
  576.               if(secondge==10)//判斷秒鐘個(gè)位數(shù)設(shè)定值是否達(dá)到10
  577.               secondge=0;//秒鐘個(gè)位數(shù)歸零
  578.               LCD1602DisplayGeDigitResolve(0x07,secondge);//LCD1602字符型液晶顯示器第二行第8個(gè)位置的秒鐘個(gè)位顯示位的顯示數(shù)
  579.               WriteCommand(0x80+0x40+0x07);//寫(xiě)入LCD1602字符型液晶顯示器第二行第8個(gè)位置的秒鐘個(gè)位顯示位
  580.               miao=secondshi*10+secondge;//移位修改秒鐘個(gè)位顯示位的數(shù)值后,需要通過(guò)秒鐘十位顯示位的數(shù)值加上秒鐘個(gè)位顯示位的數(shù)值之和賦給秒鐘變量,才能在修改秒鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:秒鐘個(gè)位或十位顯示位的數(shù)值是在秒鐘的數(shù)值上分解得來(lái),當(dāng)秒鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,秒鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
  581.               break;
  582.        case 2://調(diào)時(shí)按鍵S1按鍵第二次按下
  583.               miaoflag=1;//秒鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留miaoflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加miaoflag=1,時(shí)間報(bào)警函數(shù)里邊miaoflag==0被置換成miaoflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
  584.               secondshi++;//秒鐘十位數(shù)先賦值再加加
  585.               if(secondshi==6)//判斷秒鐘十位數(shù)設(shè)定值是否達(dá)到6
  586.               secondshi=0;//秒鐘十位數(shù)歸零
  587.               LCD1602DisplayShiDigitResolve(0x06,secondshi);//LCD1602字符型液晶顯示器第二行第7個(gè)位置的秒鐘十位顯示位的顯示數(shù)
  588.               WriteCommand(0x80+0x40+0x06);//寫(xiě)入LCD1602字符型液晶顯示器第二行第7個(gè)位置的秒鐘十位顯示位
  589.               miao=secondshi*10+secondge;//移位修改秒鐘十位顯示位的數(shù)值后,需要通過(guò)秒鐘十位顯示位的數(shù)值加上秒鐘個(gè)位顯示位的數(shù)值之和賦給秒鐘變量,才能在修改秒鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:秒鐘個(gè)位或十位顯示位的數(shù)值是在秒鐘的數(shù)值上分解得來(lái),當(dāng)秒鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,秒鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
  590.               break;
  591.        case 3://調(diào)時(shí)按鍵S1按鍵第三次按下
  592.               fenflag=1;//分鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留fenflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加fenflag=1,時(shí)間報(bào)警函數(shù)里邊f(xié)enflag==0被置換成fenflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
  593.               minutange++;//分鐘個(gè)位數(shù)先賦值再加加
  594.               if(minutange==10)//判斷分鐘個(gè)位數(shù)設(shè)定值是否達(dá)到10
  595.               minutange=0;//分鐘個(gè)位數(shù)歸零
  596.               LCD1602DisplayGeDigitResolve(0x04,minutange);//LCD1602字符型液晶顯示器第二行第5個(gè)位置的分鐘個(gè)位顯示位的顯示數(shù)
  597.               WriteCommand(0x80+0x40+0x04);//寫(xiě)入LCD1602字符型液晶顯示器第二行第5個(gè)位置的分鐘個(gè)位顯示位
  598.               fen=minutanshi*10+minutange;//移位修改分鐘個(gè)位顯示位的數(shù)值后,需要通過(guò)分鐘十位顯示位的數(shù)值加上分鐘個(gè)位顯示位的數(shù)值之和賦給分鐘變量,才能在修改分鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:分鐘個(gè)位或十位顯示位的數(shù)值是在分鐘的數(shù)值上分解得來(lái),當(dāng)分鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,分鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
  599.               break;
  600.        case 4://調(diào)時(shí)按鍵S1按鍵第四次按下
  601.               fenflag=1;//分鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留fenflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加fenflag-=1,時(shí)間報(bào)警函數(shù)里邊f(xié)enflag==0被置換成fenflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
  602.               minutanshi++;//分鐘十位數(shù)先賦值再加加
  603.               if(minutanshi==6)//判斷分鐘十位數(shù)設(shè)定值是否達(dá)到6
  604.               minutanshi=0;//分鐘十位數(shù)歸零
  605.               LCD1602DisplayShiDigitResolve(0x03,minutanshi);//LCD1602字符型液晶顯示器第二行第4個(gè)位置的分鐘十位顯示位的顯示數(shù)
  606.               WriteCommand(0x80+0x40+0x03);//寫(xiě)入LCD1602字符型液晶顯示器第二行第7個(gè)位置的分鐘十位顯示位
  607.               fen=minutanshi*10+minutange;//移位修改分鐘十位顯示位的數(shù)值后,需要通過(guò)分鐘十位顯示位的數(shù)值加上分鐘個(gè)位顯示位的數(shù)值之和賦給分鐘變量,才能在修改分鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:分鐘個(gè)位或十位顯示位的數(shù)值是在分鐘的數(shù)值上分解得來(lái),當(dāng)分鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,分鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
  608.               break;
  609.        case 5://調(diào)時(shí)按鍵S1按鍵第五次按下
  610.               shiflag=1;//時(shí)鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留shiflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加shiflag=1,時(shí)間報(bào)警函數(shù)里邊shiflag==0被置換成shiflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
  611.               hourge++;//時(shí)鐘個(gè)位數(shù)先賦值再加加
  612.               if(hourge==4)//判斷時(shí)鐘個(gè)位數(shù)設(shè)定值是否達(dá)到4
  613.               hourge=0;//時(shí)鐘個(gè)位數(shù)歸零
  614.               LCD1602DisplayGeDigitResolve(0x01,hourge);//LCD1602字符型液晶顯示器第二行第2個(gè)位置的時(shí)鐘個(gè)位顯示位的顯示數(shù)
  615.               WriteCommand(0x80+0x40+0x01);//寫(xiě)入LCD1602字符型液晶顯示器第二行第2個(gè)位置的時(shí)鐘個(gè)位顯示位
  616.               shi=hourshi*10+hourge;//移位修改時(shí)鐘個(gè)位顯示位的數(shù)值后,需要通過(guò)時(shí)鐘十位顯示位的數(shù)值加上時(shí)鐘個(gè)位顯示位的數(shù)值之和賦給時(shí)鐘變量,才能在修改時(shí)鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:時(shí)鐘個(gè)位或十位顯示位的數(shù)值是在時(shí)鐘的數(shù)值上分解得來(lái),當(dāng)時(shí)鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,時(shí)鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
  617.               break;
  618.        case 6://調(diào)時(shí)按鍵S1按鍵第六次按下
  619.               shiflag=1;//時(shí)鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留shiflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加shiflag=1,時(shí)間報(bào)警函數(shù)里邊shiflag==0被置換成shiflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
  620.               hourshi++;//時(shí)鐘十位數(shù)先賦值再加加
  621.               if(hourshi==3)//判斷時(shí)鐘十位數(shù)設(shè)定值是否達(dá)到3
  622.               hourshi=0;//時(shí)鐘十位數(shù)歸零
  623.               LCD1602DisplayShiDigitResolve(0x00,hourshi);//LCD1602字符型液晶顯示器第二行第1個(gè)位置的時(shí)鐘十位顯示位的顯示數(shù)
  624.               WriteCommand(0x80+0x40+0x00);//寫(xiě)入LCD1602第二行第1個(gè)位置的時(shí)鐘十位顯示位
  625.               shi=hourshi*10+hourge;//移位修改時(shí)鐘十位顯示位的數(shù)值后,需要通過(guò)時(shí)鐘十位顯示位的數(shù)值加上時(shí)鐘個(gè)位顯示位的數(shù)值之和賦給時(shí)鐘變量,才能在修改時(shí)鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:時(shí)鐘個(gè)位或十位顯示位的數(shù)值是在時(shí)鐘的數(shù)值上分解得來(lái),當(dāng)時(shí)鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,時(shí)鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
  626.               break;
  627.       default:
  628.               S1num=0;//調(diào)時(shí)按鍵S1按鍵按下次數(shù)清零,可以反復(fù)操作調(diào)時(shí)按鍵。
  629.               break;
  630.      }
  631.     }
  632.    }
  633.    if(S3==0)//判斷減少按鍵S3是否按下
  634.   {
  635.     Delay(5);//延時(shí)
  636.     if(S3==0)//再次判斷減少按鍵S3是否按下
  637.    {
  638.      while(!S3);//等待減少按鍵S3彈起
  639.      switch(S1num)//調(diào)時(shí)按鍵S1按鍵按下次數(shù)變量選擇位
  640.     {
  641.       case 1://調(diào)時(shí)按鍵S1按鍵第一次按下
  642.              miaoflag=1;//秒鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留miaoflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加miaoflag=1,時(shí)間報(bào)警函數(shù)里邊miaoflag==0被置換成miaoflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
  643.              secondge--;//秒鐘個(gè)位數(shù)先賦值再減減
  644.              if(secondge==-1)//判斷秒鐘個(gè)位數(shù)設(shè)定值是否達(dá)到-1
  645.              secondge=9;//秒鐘個(gè)位數(shù)歸9
  646.              LCD1602DisplayGeDigitResolve(0x07,secondge);//LCD1602字符型液晶顯示器第二行第8個(gè)位置的秒鐘個(gè)位顯示位的顯示數(shù)
  647.              WriteCommand(0x80+0x40+0x07);//寫(xiě)入LCD1602字符型液晶顯示器第二行第8個(gè)位置的秒鐘個(gè)位顯示位
  648.              miao=secondshi*10+secondge;//移位修改秒鐘個(gè)位顯示位的數(shù)值后,需要通過(guò)秒鐘十位顯示位的數(shù)值加上秒鐘個(gè)位顯示位的數(shù)值之和賦給秒鐘變量,才能在修改秒鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:秒鐘個(gè)位或十位顯示位的數(shù)值是在秒鐘的數(shù)值上分解得來(lái),當(dāng)秒鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,秒鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
  649.              break;
  650.       case 2://調(diào)時(shí)按鍵S1按鍵第二次按下
  651.              miaoflag=1;//秒鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留miaoflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加miaoflag=1,時(shí)間報(bào)警函數(shù)里邊miaoflag==0被置換成miaoflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
  652.              secondshi--;//秒鐘十位數(shù)先賦值再減減
  653.              if(secondshi==-1)//判斷秒鐘十位數(shù)設(shè)定值是否達(dá)到-1
  654.              secondshi=5;//秒鐘十位數(shù)歸5
  655.              LCD1602DisplayShiDigitResolve(0x06,secondshi);//LCD1602字符型液晶顯示器第二行第7個(gè)位置的秒鐘十位顯示位的顯示數(shù)
  656.              WriteCommand(0x80+0x40+0x06);//寫(xiě)入LCD1602字符型液晶顯示器第二行第7個(gè)位置的秒鐘十位顯示位
  657.              miao=secondshi*10+secondge;//移位修改秒鐘十位顯示位的數(shù)值后,需要通過(guò)秒鐘十位顯示位的數(shù)值加上秒鐘個(gè)位顯示位的數(shù)值之和賦給秒鐘變量,才能在修改秒鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:秒鐘個(gè)位或十位顯示位的數(shù)值是在秒鐘的數(shù)值上分解得來(lái),當(dāng)秒鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,秒鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
  658.              break;
  659.       case 3://調(diào)時(shí)按鍵S1按鍵第三次按下
  660.              fenflag=1;//分鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留fenflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加fenflag=1,時(shí)間報(bào)警函數(shù)里邊f(xié)enflag==0被置換成fenflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
  661.              minutange--;//分鐘個(gè)位數(shù)先賦值再減減
  662.              if(minutange==-1)//判斷分鐘個(gè)位數(shù)設(shè)定值是否達(dá)到-1
  663.              minutange=9;//分鐘個(gè)位數(shù)歸9
  664.              LCD1602DisplayGeDigitResolve(0x04,minutange);//LCD1602字符型液晶顯示器第二行第5個(gè)位置的分鐘個(gè)位顯示位的顯示數(shù)
  665.              WriteCommand(0x80+0x40+0x04);//寫(xiě)入LCD1602字符型液晶顯示器第二行第5個(gè)位置的分鐘個(gè)位顯示位
  666.              fen=minutanshi*10+minutange;//移位修改分鐘個(gè)位顯示位的數(shù)值后,需要通過(guò)分鐘十位顯示位的數(shù)值加上分鐘個(gè)位顯示位的數(shù)值之和賦給分鐘變量,才能在修改分鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:分鐘個(gè)位或十位顯示位的數(shù)值是在分鐘的數(shù)值上分解得來(lái),當(dāng)分鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,分鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
  667.              break;
  668.       case 4://調(diào)時(shí)按鍵S1按鍵第四次按下
  669.              fenflag=1;//分鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留fenflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加fenflag=1,時(shí)間報(bào)警函數(shù)里邊f(xié)enflag==0被置換成fenflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
  670.              minutanshi--;//分鐘十位數(shù)先賦值再減減
  671.              if(minutanshi==-1)//判斷分鐘十位數(shù)設(shè)定值是否達(dá)到6
  672.              minutanshi=5;//分鐘十位數(shù)歸5
  673.              LCD1602DisplayShiDigitResolve(0x03,minutanshi);//LCD1602字符型液晶顯示器第二行第4個(gè)位置的分鐘十位顯示位的顯示數(shù)
  674.              WriteCommand(0x80+0x40+0x03);//寫(xiě)入LCD1602字符型液晶顯示器第二行第7個(gè)位置的分鐘十位顯示位
  675.              fen=minutanshi*10+minutange;//移位修改分鐘十位顯示位的數(shù)值后,需要通過(guò)分鐘十位顯示位的數(shù)值加上分鐘個(gè)位顯示位的數(shù)值之和賦給分鐘變量,才能在修改分鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:分鐘個(gè)位或十位顯示位的數(shù)值是在分鐘的數(shù)值上分解得來(lái),當(dāng)分鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,分鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
  676.              break;
  677.       case 5://調(diào)時(shí)按鍵S1按鍵第五次按下
  678.              shiflag=1;//時(shí)鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留shiflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加shiflag=1,時(shí)間報(bào)警函數(shù)里邊shiflag==0被置換成shiflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
  679.              hourge--;//時(shí)鐘個(gè)位數(shù)先賦值再減減
  680.              if(hourge==-1)//判斷時(shí)鐘個(gè)位數(shù)設(shè)定值是否達(dá)到-1
  681.              hourge=3;//時(shí)鐘個(gè)位數(shù)歸3
  682.              LCD1602DisplayGeDigitResolve(0x01,hourge);//LCD1602字符型液晶顯示器第二行第2個(gè)位置的時(shí)鐘個(gè)位顯示位的顯示數(shù)
  683.              WriteCommand(0x80+0x40+0x01);//寫(xiě)入LCD1602字符型液晶顯示器第二行第2個(gè)位置的時(shí)鐘個(gè)位顯示位
  684.              shi=hourshi*10+hourge;//移位修改時(shí)鐘個(gè)位顯示位的數(shù)值后,需要通過(guò)時(shí)鐘十位顯示位的數(shù)值加上時(shí)鐘個(gè)位顯示位的數(shù)值之和賦給時(shí)鐘變量,才能在修改時(shí)鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:時(shí)鐘個(gè)位或十位顯示位的數(shù)值是在時(shí)鐘的數(shù)值上分解得來(lái),當(dāng)時(shí)鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,時(shí)鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
  685.              break;
  686.       case 6://調(diào)時(shí)按鍵S1按鍵第六次按下
  687.              shiflag=1;//時(shí)鐘標(biāo)志位變量置1,在時(shí)間報(bào)警函數(shù)執(zhí)行后但不報(bào)警的情況下,時(shí)間報(bào)警函數(shù)里邊余留shiflag==0,當(dāng)操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),會(huì)發(fā)生在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警,因此在調(diào)時(shí)按鍵掃描函數(shù)里邊添加shiflag=1,時(shí)間報(bào)警函數(shù)里邊shiflag==0被置換成shiflag=1,很好地解決了在操作調(diào)時(shí)按鍵掃描函數(shù)調(diào)時(shí)時(shí),在調(diào)時(shí)過(guò)程中觸發(fā)時(shí)間報(bào)警條件而報(bào)警的問(wèn)題。
  688.              hourshi--;//時(shí)鐘十位數(shù)先賦值再減減
  689.              if(hourshi==-1)//判斷時(shí)鐘十位數(shù)設(shè)定值是否達(dá)到-1
  690.              hourshi=2;//時(shí)鐘十位數(shù)歸2
  691.              LCD1602DisplayShiDigitResolve(0x00,hourshi);//LCD1602字符型液晶顯示器第二行第1個(gè)位置的時(shí)鐘十位顯示位的顯示數(shù)
  692.              WriteCommand(0x80+0x40+0x00);//寫(xiě)入LCD1602字符型液晶顯示器第二行第1個(gè)位置的時(shí)鐘十位顯示位
  693.              shi=hourshi*10+hourge;//移位修改時(shí)鐘十位顯示位的數(shù)值后,需要通過(guò)時(shí)鐘十位顯示位的數(shù)值加上時(shí)鐘個(gè)位顯示位的數(shù)值之和賦給時(shí)鐘變量,才能在修改時(shí)鐘個(gè)位或十位顯示位的數(shù)值后重新計(jì)時(shí)。(原因:時(shí)鐘個(gè)位或十位顯示位的數(shù)值是在時(shí)鐘的數(shù)值上分解得來(lái),當(dāng)時(shí)鐘個(gè)位或十位顯示位的數(shù)值發(fā)生變化后,時(shí)鐘的數(shù)值也要變化,否則不能在原基礎(chǔ)上修改后重新計(jì)時(shí),只能返回原基礎(chǔ)上計(jì)時(shí)。)
  694.              break;
  695.      default:
  696.              S1num=0;//調(diào)時(shí)按鍵S1按鍵按下次數(shù)清零,可以反復(fù)操作調(diào)時(shí)按鍵。
  697.              break;
  698.     }
  699.    }
  700.   }
  701. }
  702. }
  703.   void SumKeyScan()//總按鍵掃描函數(shù)
  704. {
  705.    if(S4==0)//判斷啟停按鍵S4是否按下
  706.   {
  707.     Delay(5);//延時(shí)
  708.     if(S4==0)//再次判斷啟停按鍵S4是否按下
  709.    {
  710.      S4num++;//啟停按鍵S4按下次數(shù)先賦值再加加
  711.      while(!S4);//等待啟停按鍵S4彈起
  712.      if(S4num==1)//判斷啟停按鍵S4是否第一次按下過(guò),實(shí)現(xiàn)直接停止。
  713.     {
  714.       qitingflag=1;//啟停標(biāo)志位變量置1,用來(lái)啟動(dòng)時(shí)間報(bào)警函數(shù)和溫度報(bào)警函數(shù)和設(shè)時(shí)按鍵掃描函數(shù)和設(shè)溫按鍵掃描函數(shù)和調(diào)時(shí)按鍵掃描函數(shù)和秒鐘顯示兩位數(shù)分解函數(shù)和分鐘顯示兩位數(shù)分解函數(shù)和時(shí)鐘顯示兩位數(shù)分解函數(shù)和溫度分解函數(shù)和溫度顯示函數(shù)。
  715.       TR0=1;//啟動(dòng)定時(shí)器0
  716.      }
  717.      if(S4num==2&&settimedisplayflag==0&&settemperaturedisplayflag==0&&tiaotimedisplayflag==0&&timebaojingflag==0)//判斷啟停按鍵S4是否第二次按下過(guò)及設(shè)時(shí)顯示標(biāo)志位變量是否為0和設(shè)溫顯示標(biāo)志位變量是否為0和調(diào)時(shí)顯示標(biāo)志位變量是否為0和時(shí)間報(bào)警標(biāo)志位變量是否為0,相當(dāng)于第一次按下啟停鍵啟動(dòng)后,在沒(méi)有按其他按鍵的情況下,第二次按下啟停鍵就停止。
  718.     {
  719.       qitingflag=1;//啟停標(biāo)志位變量置1,用來(lái)啟動(dòng)時(shí)間報(bào)警函數(shù)和溫度報(bào)警函數(shù)和設(shè)時(shí)按鍵掃描函數(shù)和設(shè)溫按鍵掃描函數(shù)和調(diào)時(shí)按鍵掃描函數(shù)和秒鐘顯示兩位數(shù)分解函數(shù)和分鐘顯示兩位數(shù)分解函數(shù)和時(shí)鐘顯示兩位數(shù)分解函數(shù)和溫度分解函數(shù)和溫度顯示函數(shù),相當(dāng)于總開(kāi)關(guān)。
  720.       TR0=0;//關(guān)定時(shí)器0
  721.       S4num=0;//啟停按鍵S4按下次數(shù)清零,可以反復(fù)操作啟停按鍵。
  722.       settimedisplayflag=1;//設(shè)時(shí)顯示標(biāo)志位變量置1,限制操作設(shè)時(shí)按鍵掃描函數(shù)。
  723.       settemperaturedisplayflag=1;//設(shè)溫顯示標(biāo)志位變量置1,限制操作設(shè)溫按鍵掃描函數(shù)。
  724.       tiaotimedisplayflag=1;//調(diào)時(shí)顯示標(biāo)志位變量置1,限制操作調(diào)時(shí)按鍵掃描函數(shù)。
  725.      }
  726.      if(S4num==1&&settimedisplayflag==1&&settemperaturedisplayflag==1&&tiaotimedisplayflag==1)//判斷啟停按鍵S4是否第一次按下過(guò)以及調(diào)時(shí)顯示標(biāo)志位變量為1及設(shè)溫顯示標(biāo)志位變量是否為1和調(diào)時(shí)顯示標(biāo)志位變量是否為1,相當(dāng)于第一次按下啟停鍵啟動(dòng)后,第二次按下啟停鍵停止后,在沒(méi)有按其他按鍵的情況下,第三次按下啟停鍵就啟動(dòng)。
  727.     {
  728.       qitingflag=1;//啟停標(biāo)志位變量置1,用來(lái)啟動(dòng)時(shí)間報(bào)警函數(shù)和溫度報(bào)警函數(shù)和設(shè)時(shí)按鍵掃描函數(shù)和設(shè)溫按鍵掃描函數(shù)和調(diào)時(shí)按鍵掃描函數(shù)和秒鐘顯示兩位數(shù)分解函數(shù)和分鐘顯示兩位數(shù)分解函數(shù)和時(shí)鐘顯示兩位數(shù)分解函數(shù)和溫度分解函數(shù)和溫度顯示函數(shù),相當(dāng)于總開(kāi)關(guān)。
  729.       TR0=1;//啟動(dòng)定時(shí)器0
  730.       S4num=1;//啟停按鍵S4按下次數(shù)置1,為下一次按下啟停鍵實(shí)現(xiàn)停止做準(zhǔn)備。
  731.       settimedisplayflag=0;//設(shè)時(shí)顯示標(biāo)志位變量置0,可操作設(shè)時(shí)按鍵掃描函數(shù)。
  732.       settemperaturedisplayflag=0;//設(shè)溫顯示標(biāo)志位變量置0,可操作設(shè)溫按鍵掃描函數(shù)。
  733.       tiaotimedisplayflag=0;//調(diào)時(shí)顯示標(biāo)志位變量置0,可操作調(diào)時(shí)按鍵掃描函數(shù)。
  734.      }
  735.      if(S4num==2&&timebaojingflag==1)//判斷啟停按鍵S4是否第二次按下過(guò)及時(shí)間報(bào)警標(biāo)志位變量是否為1,相當(dāng)于時(shí)間報(bào)警解除。
  736.     {
  737.       TR0=1;//開(kāi)定時(shí)器0
  738.       S4num=1;//啟停按鍵S4按下次數(shù)置1,為下一次按下啟停鍵實(shí)現(xiàn)停止做準(zhǔn)備。
  739.       timebaojingflag=0;//時(shí)間報(bào)警標(biāo)志位變量置0,釋放時(shí)間報(bào)警標(biāo)志位。
  740.       setsecondge=0;//設(shè)時(shí)秒鐘個(gè)位變量變0,釋放設(shè)時(shí)秒鐘個(gè)位標(biāo)志位。
  741.       setsecondshi=0;//設(shè)時(shí)秒鐘十位變量變0,釋放設(shè)時(shí)秒鐘十位標(biāo)志位。
  742.       setminutange=0;//設(shè)時(shí)分鐘個(gè)位變量變0,釋放設(shè)時(shí)分鐘個(gè)位標(biāo)志位。
  743.       setminutanshi=0;//設(shè)時(shí)分鐘十位變量變0,釋放設(shè)時(shí)分鐘十位標(biāo)志位。
  744.       sethourge=0;//設(shè)時(shí)時(shí)鐘個(gè)位變量變0,釋放設(shè)時(shí)時(shí)鐘個(gè)位標(biāo)志位。
  745.       sethourshi=0;//設(shè)時(shí)時(shí)鐘十位變量變0,釋放設(shè)時(shí)時(shí)鐘十位標(biāo)志位。
  746.       WriteCommand(0x80+0x07);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)秒鐘個(gè)位。
  747.       WriteData(0x30+setsecondge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)秒鐘個(gè)位顯示0。
  748.       WriteCommand(0x80+0x06);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)秒鐘十位。
  749.       WriteData(0x30+setsecondshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)秒鐘十位顯示0。
  750.       WriteCommand(0x80+0x04);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)分鐘個(gè)位。
  751.       WriteData(0x30+setminutange);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)分鐘個(gè)位顯示0。
  752.       WriteCommand(0x80+0x03);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)分鐘十位。
  753.       WriteData(0x30+setminutanshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)分鐘十位顯示0。
  754.       WriteCommand(0x80+0x01);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)時(shí)鐘個(gè)位。
  755.       WriteData(0x30+sethourge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)時(shí)鐘個(gè)位顯示0。
  756.       WriteCommand(0x80+0x00);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)時(shí)鐘十位。
  757.       WriteData(0x30+sethourshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)時(shí)鐘十位顯示0。
  758.       S2numflag=0;//增加鍵標(biāo)志位變量置0,釋放增加鍵標(biāo)志位。
  759.       S3numflag=0;//減少鍵標(biāo)志位變量置0,釋放減少鍵標(biāo)志位。
  760.       TR0flag=0;//定時(shí)器0標(biāo)志位變量置0
  761.       settimedisplayflag=0;//設(shè)時(shí)顯示標(biāo)志位變量置0,釋放設(shè)時(shí)顯示標(biāo)志位。
  762.       settemperaturedisplayflag=0;//設(shè)溫顯示標(biāo)志位變量置0,釋放設(shè)溫顯示標(biāo)志位。
  763.       tiaotimedisplayflag=0;//調(diào)時(shí)顯示標(biāo)志位變量置0,釋放調(diào)時(shí)顯示標(biāo)志位。
  764.       setsecondflag=0;//設(shè)時(shí)秒鐘標(biāo)志位變量置0,釋放設(shè)時(shí)秒鐘標(biāo)志位。
  765.       setminutanflag=0;//設(shè)時(shí)分鐘標(biāo)志位變量置0,釋放設(shè)時(shí)分鐘標(biāo)志位。
  766.       sethourflag=0;//設(shè)時(shí)時(shí)鐘標(biāo)志位變量置0,釋放設(shè)時(shí)時(shí)鐘標(biāo)志位。
  767.      }
  768.      if(S4num==2&&temperatruebaojingflag==1)//判斷啟停按鍵S4是否第二次按下過(guò)及溫度報(bào)警標(biāo)志位變量是否為1,相當(dāng)于溫度報(bào)警解除。
  769.     {
  770.       TR0=1;//開(kāi)定時(shí)器0
  771.       S4num=1;//啟停按鍵S4按下次數(shù)置1,為下一次按下啟停鍵實(shí)現(xiàn)停止做準(zhǔn)備。
  772.       temperatruebaojingflag=0;//溫度報(bào)警標(biāo)志位變量置0,釋放溫度報(bào)警標(biāo)志位。
  773.       setwenduxiaoshu=0;//設(shè)溫小數(shù)位變量置0,釋放設(shè)溫小數(shù)位標(biāo)志位。
  774.       setwenduge=0;//設(shè)溫個(gè)位變量置0,釋放設(shè)溫個(gè)位標(biāo)志位。
  775.       setwendushi=0;//設(shè)溫十位變量置0,釋放設(shè)溫十位標(biāo)志位。
  776.       setwendubai=0;//設(shè)溫百位變量置0,釋放設(shè)溫百位標(biāo)志位。
  777.       WriteCommand(0x80+0x09);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)秒鐘個(gè)位。
  778.       WriteData(0x30+setwendubai);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)秒鐘個(gè)位顯示0。
  779.       WriteCommand(0x80+0x0A);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)秒鐘十位。
  780.       WriteData(0x30+setwendushi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)秒鐘十位顯示0。
  781.       WriteCommand(0x80+0x0B);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)分鐘個(gè)位。
  782.       WriteData(0x30+setwenduge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)分鐘個(gè)位顯示0。
  783.       WriteCommand(0x80+0x0D);//LCD1602字符型液晶顯示器第一行第七個(gè)(從第零開(kāi)始數(shù))顯示位,即設(shè)時(shí)分鐘十位。
  784.       WriteData(0x30+setwenduxiaoshu);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)分鐘個(gè)位顯示0。
  785.       S2numflag=0;//增加鍵標(biāo)志位變量置0,釋放增加鍵標(biāo)志位。
  786.       S3numflag=0;//減少鍵標(biāo)志位變量置0,釋放減少鍵標(biāo)志位。
  787.       settemperatureflag=0;//設(shè)溫標(biāo)志位變量置0,釋放設(shè)溫標(biāo)志位。
  788.       settimedisplayflag=0;//設(shè)時(shí)顯示標(biāo)志位變量置0,釋放設(shè)時(shí)顯示標(biāo)志位。
  789.       settemperaturedisplayflag=0;//設(shè)溫顯示標(biāo)志位變量置0,釋放設(shè)溫顯示標(biāo)志位。
  790.       tiaotimedisplayflag=0;//調(diào)時(shí)顯示標(biāo)志位變量置0,釋放調(diào)時(shí)顯示標(biāo)志位。
  791.       temperaturedisplayflag=0;//溫度顯示標(biāo)志位變量等于0,釋放溫度顯示標(biāo)志位。  
  792.      }
  793.      if(S4num>=2&&settemperaturedisplayflag==1&&tiaotimedisplayflag==1)//判斷啟停按鍵S1是否第二或二以上次按下過(guò)及設(shè)溫顯示標(biāo)志位變量為1及調(diào)時(shí)顯示標(biāo)志位變量為1,相當(dāng)于設(shè)時(shí)啟動(dòng)。
  794.     {
  795.       S4num=1;//啟停按鍵S4按下次數(shù)置1,為下一次按下啟停鍵實(shí)現(xiàn)停止做準(zhǔn)備。
  796.       Snum=0;//設(shè)時(shí)按鍵S0按下次數(shù)清零,可以反復(fù)操作設(shè)時(shí)按鍵。
  797.       TR0=1;//啟動(dòng)定時(shí)器0
  798.       TR0flag=1;//定時(shí)器0標(biāo)志位變量置1,進(jìn)入時(shí)間報(bào)警函數(shù)判斷是否可執(zhí)行時(shí)間報(bào)警。
  799.       WriteCommand(0x0c);//關(guān)光標(biāo)(或字符)閃爍
  800.       settemperaturedisplayflag=0;//設(shè)溫顯示標(biāo)志位變量置0,釋放設(shè)溫顯示標(biāo)志位。
  801.       tiaotimedisplayflag=0;//調(diào)時(shí)顯示標(biāo)志位變量置0,釋放調(diào)時(shí)顯示標(biāo)志位。
  802.       lcd1602displaytimeflag=0;//液晶顯示器顯示時(shí)間標(biāo)志位變量等于0,釋放液晶顯示器顯示時(shí)間標(biāo)志位。
  803.       temperaturedisplayflag=0;//溫度顯示標(biāo)志位變量置0,釋放溫度顯示標(biāo)志位。
  804.      }
  805.      if(S4num>=2&&settimedisplayflag==1&&tiaotimedisplayflag==1)//判斷啟停按鍵S1是否第二或二以上次按下過(guò)及設(shè)時(shí)顯示標(biāo)志位變量為1及調(diào)時(shí)顯示標(biāo)志位變量為1,相當(dāng)于設(shè)溫啟動(dòng)。
  806.     {
  807.       S4num=1;//啟停按鍵S4按下次數(shù)置1,為下一次按下啟停鍵實(shí)現(xiàn)停止做準(zhǔn)備。
  808.       S0num=0;//設(shè)溫按鍵S0按下次數(shù)清零,可以反復(fù)操作設(shè)溫按鍵。
  809.       TR0=1;//啟動(dòng)定時(shí)器0
  810.       WriteCommand(0x0c);//關(guān)光標(biāo)(或字符)閃爍
  811.       settemperatureflag=1;//設(shè)溫標(biāo)志位變量置1,進(jìn)入溫度報(bào)警函數(shù)判斷是否可執(zhí)行溫度報(bào)警。
  812.       settimedisplayflag=0;//設(shè)時(shí)顯示標(biāo)志位變量置0,釋放設(shè)時(shí)顯示標(biāo)志位。
  813.       tiaotimedisplayflag=0;//調(diào)時(shí)顯示標(biāo)志位變量置0,釋放調(diào)時(shí)顯示標(biāo)志位。
  814.       lcd1602displaytimeflag=0;//液晶顯示器顯示時(shí)間標(biāo)志位變量等于0,釋放液晶顯示器顯示時(shí)間標(biāo)志位。
  815.       temperaturedisplayflag=0;//溫度顯示標(biāo)志位變量置0,釋放溫度顯示標(biāo)志位。
  816.      }
  817.      if(S4num>=2&&settimedisplayflag==1&&settemperaturedisplayflag==1)//判斷啟停按鍵S0是否第二或二以上次按下過(guò)及設(shè)時(shí)顯示標(biāo)志位變量為1和設(shè)溫顯示標(biāo)志位變量為1,相當(dāng)于調(diào)時(shí)啟動(dòng)。
  818.     {
  819.       S4num=1;//啟停按鍵S4按下次數(shù)置1,為下一次按下啟停鍵實(shí)現(xiàn)停止做準(zhǔn)備。
  820.       S1num=0;//調(diào)時(shí)按鍵S1按下次數(shù)清零,可以反復(fù)操作調(diào)時(shí)按鍵。
  821.       TR0=1;//啟動(dòng)定時(shí)器0
  822.       WriteCommand(0x0c);//關(guān)光標(biāo)(或字符)閃爍
  823.       settimedisplayflag=0;//設(shè)時(shí)顯示標(biāo)志位變量置0,釋放設(shè)時(shí)顯示標(biāo)志位。
  824.       settemperaturedisplayflag=0;//設(shè)溫顯示標(biāo)志位變量置0,釋放設(shè)溫顯示標(biāo)志位。
  825.       lcd1602displaytimeflag=0;//液晶顯示器顯示時(shí)間標(biāo)志位變量置0,釋放液晶顯示器顯示時(shí)間標(biāo)志位。
  826.       temperaturedisplayflag=0;//溫度顯示標(biāo)志位變量置0,釋放溫度顯示標(biāo)志位。
  827.       miaoflag=0;//秒鐘標(biāo)志位變量置0,釋放秒鐘標(biāo)志位。
  828.       fenflag=0;//分鐘標(biāo)志位變量置0,釋放分鐘標(biāo)志位。
  829.       shiflag=0;//時(shí)鐘標(biāo)志位變量置0,釋放時(shí)鐘顯示標(biāo)志位。
  830.      }
  831.     }
  832.    }     
  833.   }
  834.   void Timer0() interrupt 1//定時(shí)器0中斷函數(shù)
  835. {
  836.    TH0=(65536-50000)/256;//TH0重新裝值
  837.    TL0=(65536-50000)%256;//TL0重新裝值
  838.    count++;//定時(shí)器0中斷次數(shù)先賦值再加
  839.    if(count==18)//判斷定時(shí)器0中斷次數(shù)是否為18次
  840.   {
  841.     count=0;//定時(shí)器0中斷次數(shù)歸零
  842.     miao++;//秒鐘先賦值再加
  843.     if(miao==60)//判斷秒鐘是否達(dá)到60秒
  844.    {
  845.      miao=0;//秒鐘歸零
  846.      fen++;//分鐘先賦值再加
  847.      if(fen==60)//判斷分鐘是否達(dá)到60分
  848.     {
  849.       fen=0;//分鐘歸零
  850.       shi++;//時(shí)鐘先賦值再加
  851.       if(shi==24)//判斷時(shí)鐘是否達(dá)到24時(shí)
  852.      {
  853.        shi=0;//時(shí)鐘歸零
  854.       }
  855. //    LCD1602DisplayTime(0x00,shi);//時(shí)鐘顯示兩位數(shù)分解函數(shù)
  856.      }
  857. //    LCD1602DisplayTime(0x03,fen);//分鐘顯示兩位數(shù)分解函數(shù)
  858.     }
  859. //    LCD1602DisplayTime(0x06,miao);//秒鐘顯示兩位數(shù)分解函數(shù)                 
  860.    }        
  861.   }
  862.   void DS18B20_Delay(uint i)//微妙級(jí)延時(shí)函數(shù)
  863. {
  864.    while(i--);
  865. }
  866.   void FengNingQi_Alarm(uint t)//蜂鳴器報(bào)警函數(shù)
  867. {
  868.    uint x,y;
  869.    for(x=0;x<t;x++)
  870.   {
  871.     for(y=0;y<50;y++);
  872.     FengNingQi=~FengNingQi ;//蜂鳴器按位取反FengNingQi
  873.    }
  874. }
  875.   bit DS18B20Init()//DS18B20初始化函數(shù)
  876. {
  877.    uchar x=0;
  878.    DQ = 1;//單片機(jī)將DS18B20通信端口DQ拉高復(fù)位  
  879.    DS18B20_Delay(8);//稍做延時(shí)
  880.    DQ = 0;//單片機(jī)將DS18B20通信端口DQ拉低
  881.    DS18B20_Delay(80);//延時(shí)在480us與960us之間
  882.    DQ = 1;//單片機(jī)將DS18B20通信端口DQ拉高
  883.    DS18B20_Delay(4);//延時(shí)在15us與60us之間
  884.    x=DQ;//稍做延時(shí)后,如果x=0,則初始化成功,若x=1則初始化失敗。
  885.    DS18B20_Delay(20);//延時(shí)在60us與240us之間
  886.    return x;
  887. }
  888.   void DS18B20_WriteOneByte(uchar j)//DS18b20寫(xiě)一個(gè)字節(jié)函數(shù)
  889. {
  890.    uchar i=0;
  891.    for (i=8; i>0; i--)//單片機(jī)向DS18B20寫(xiě)入數(shù)據(jù)
  892.   {
  893.     DQ = 0;//單片機(jī)將DS18B20通信端口DQ從高電平拉至低電平時(shí),單片機(jī)向DS18B20寫(xiě)數(shù)據(jù)開(kāi)始。
  894.     DQ = j&0x01;//單片機(jī)按將字節(jié)低位寫(xiě)入DS18B20
  895.     DS18B20_Delay(5);//延時(shí)在60us與120us之間
  896.     DQ = 1;//單片機(jī)將DS18B20通信端口DQ拉高
  897.     j>>=1;//變量j右移一位,最高位補(bǔ)零。例如當(dāng)j=1,換成二進(jìn)制是0000 0001,右移一位就是0000 000。擴(kuò)展:?jiǎn)纹瑱C(jī)無(wú)符號(hào)或有符號(hào)數(shù)左移幾位,高位就依次補(bǔ)幾位0,低位也依次去掉幾位,讓左移幾位依次代替低位去掉的幾位。單片機(jī)有符號(hào)數(shù),如果是正數(shù),右移幾位,先是確定最高位用0,低位也依次去掉幾位,讓右移幾位依次代替低位去掉的幾位,如果是負(fù)數(shù),右移幾位,先是確定最高位用1,低位也依次去掉幾位,讓右移幾位依次代替低位去掉的幾位。      
  898.    }
  899. }
  900.   uchar DS18B20_ReadOneByte()//DS18B20讀一個(gè)字節(jié)函數(shù)
  901. {
  902.    uchar i=0;
  903.    uchar j = 0;
  904.    for (i=8;i>0;i--)//單片機(jī)讀取DS18B20采集的溫度數(shù)據(jù)轉(zhuǎn)換成一個(gè)字節(jié)
  905.   {
  906.     DQ = 0;//單片機(jī)將DS18B20通信端口DQ從高電平拉成低電平時(shí),單片機(jī)讀取DS18B20所采集到溫度數(shù)據(jù)開(kāi)始。
  907.     j>>=1;//變量j右移一位,最高位補(bǔ)零。例如當(dāng)j=1,換成二進(jìn)制是0000 0001,右移一位就是0000 000。擴(kuò)展:?jiǎn)纹瑱C(jī)無(wú)符號(hào)或有符號(hào)數(shù)左移幾位,高位就依次補(bǔ)幾位0,低位也依次去掉幾位,讓左移幾位依次代替低位去掉的幾位。單片機(jī)有符號(hào)數(shù),如果是正數(shù),右移幾位,先是確定最高位用0,低位也依次去掉幾位,讓右移幾位依次代替低位去掉的幾位,如果是負(fù)數(shù),右移幾位,先是確定最高位用1,低位也依次去掉幾位,讓右移幾位依次代替低位去掉的幾位。
  908.     DQ = 1;//單片機(jī)將DS18B20通信端口DQ拉高
  909.     if(DQ)//判斷DQ是否等于1
  910.     j|=0x80;//若DQ=1,則讓當(dāng)前j最高位為1,在下次循環(huán)中移位至次高位,最后達(dá)到從低位到高位接收的目的;若DQ=0,則可跳過(guò)此語(yǔ)句,直接在下次循環(huán)對(duì)byte進(jìn)行移位補(bǔ)0。  
  911.     DS18B20_Delay(4);//稍做延時(shí)
  912.   }
  913.    return j;
  914. }
  915.   uint DS18B20_ReadTemperature()//單片機(jī)讀取DS18b20當(dāng)前溫度
  916. {
  917.    uchar L=0;//定義溫度值低8位變量
  918.    uchar H=0;//定義溫度值高8位變量        
  919.    DS18B20Init( );//DS18B20初始化函數(shù)
  920.    DS18B20_WriteOneByte(0xcc);//單片機(jī)只連一個(gè)DS18B20溫度傳感器時(shí),可寫(xiě)該段代碼,表示單片機(jī)向DS18B20寫(xiě)入跳過(guò)讀DS18B20序號(hào)列號(hào)指令。
  921.    DS18B20_WriteOneByte(0x44);//單片機(jī)向DS18B20九字節(jié)暫存器(包括兩個(gè)字節(jié)儲(chǔ)溫溫度寄存器、一字節(jié)高溫觸發(fā)器、一字節(jié)低溫觸發(fā)器、一字節(jié)溫度精度轉(zhuǎn)換配置寄存器、三個(gè)字節(jié)的保留位、一字節(jié)DS18B20的64位ROM前56位編碼校驗(yàn)CRC發(fā)生器)中前兩個(gè)字節(jié)溫度寄存器寫(xiě)入啟動(dòng)DS18B20溫度轉(zhuǎn)換指令
  922. //   DS18B20_Delay(100);//稍作延時(shí)
  923.    DS18B20Init( );//DS18B20初始化函數(shù)
  924.    DS18B20_WriteOneByte(0xcc);//單片機(jī)只連一個(gè)DS18B20溫度傳感器時(shí),可寫(xiě)該段代碼,表示單片機(jī)向DS18B20寫(xiě)入跳過(guò)讀DS18B20序號(hào)列號(hào)指令。
  925.    DS18B20_WriteOneByte(0xbe);//單片機(jī)向DS18B20九字節(jié)暫存器(包括兩個(gè)字節(jié)儲(chǔ)溫溫度寄存器、一字節(jié)高溫觸發(fā)器、一字節(jié)低溫觸發(fā)器、一字節(jié)溫度精度轉(zhuǎn)換配置寄存器、三個(gè)字節(jié)的保留位、一字節(jié)DS18B20的64位ROM前56位編碼校驗(yàn)CRC發(fā)生器)中前兩個(gè)字節(jié)溫度寄存器寫(xiě)入讀取溫度的指令
  926. //   DS18B20_Delay(100);//稍作延時(shí)
  927.    L=DS18B20_ReadOneByte( );//單片機(jī)向DS18B20發(fā)送讀取溫度值低8位指令,把讀到的溫度值低8位賦給溫度值低8位變量
  928.    H=DS18B20_ReadOneByte( );//單片機(jī)向DS18B20發(fā)送讀取溫度值高8位指令,把讀到的溫度值高8位賦給溫度值高8位變量
  929.    temperature = H;//DS18B20讀到的溫度值高8位賦給溫度值變量,變成高8位溫度值變量,還不是一個(gè)溫度值變量,由于一個(gè)溫度值變量是由高8位低8位共16位組成。
  930.    temperature = temperature << 8;//溫度值高8位變量左移8位,就可以變成一個(gè)只有高8位低8位全0的溫度值變量。
  931.    temperature = temperature | L;//只有高8位低8位全0的溫度值變量與溫度值低8位變量或運(yùn)算后就變成一個(gè)真正有高8位低8位共16位的溫度值變量
  932.    if(temperature>0x0fff)//判斷表示溫度寄存器16位二進(jìn)制數(shù)的溫度值變量是否大于表示溫度寄存器16位二進(jìn)制數(shù)的正溫度值,假若大于且當(dāng)表示溫度寄存器16位二進(jìn)制數(shù)的溫度值變量的前5位二進(jìn)制數(shù)全為1時(shí),該溫度值變量表示負(fù)溫度值。
  933.   {
  934.     temperature = ~temperature+2;//負(fù)溫度值
  935.     temperatureflag=1;//負(fù)溫度標(biāo)志變量等于1
  936.    }
  937.    else
  938.   {         
  939.     temperatureflag=0;//負(fù)溫度標(biāo)志變量等于0
  940.    }
  941.    temperature = temperature*0.0625*10;//擴(kuò)大10倍的溫度值
  942.    return temperature;//返回?cái)U(kuò)大10倍的溫度值   
  943. }
  944.   void TemperatureFenJie()//LCD1602的溫度顯示函數(shù)   
  945. {
  946.    wendu=DS18B20_ReadTemperature();//DS18B20讀到的溫度值賦給溫度值變量
  947.    if(temperatureflag==1)//判斷負(fù)溫度標(biāo)志變量是否等于1
  948.   {        
  949.     fuhaowei=0x2d;//負(fù)符號(hào)
  950.     wendubai=wendu/1000;//溫度值百位
  951.     wendushi=wendu%1000/100;//溫度值十位
  952.     wenduge=wendu%100/10;//溫度值個(gè)位
  953.     xiaoshudian=0x2e;//小數(shù)點(diǎn)
  954.     wenduxiaoshu=wendu%10;//小數(shù)位
  955.    }
  956.    else
  957.   {
  958.     fuhaowei=0x2b;//正符號(hào)
  959.     if(wendu==0)//判斷溫度是否等于0
  960.    {
  961.      fuhaowei=0x20;//無(wú)符號(hào)
  962.     }
  963.     wendubai=wendu/1000;//溫度值百位
  964.     wendushi=wendu%1000/100;//溫度值十位
  965.     wenduge=wendu%100/10;//溫度值個(gè)位
  966.     xiaoshudian=0x2e;//小數(shù)點(diǎn)
  967.     wenduxiaoshu=wendu%10;//小數(shù)位
  968.    }                 
  969. }
  970.   void TemperatureDisplay()//LCD1602的溫度顯示函數(shù)   
  971. {
  972.    WriteCommand(0x80+0x48);//LCD1602字符型液晶顯示器第二行第九個(gè)(從第零開(kāi)始數(shù))顯示位
  973.    WriteData(fuhaowei);//符號(hào)位顯示。
  974.    WriteData(0x30+wendubai);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示溫度值百位可顯示0到9的數(shù)字。
  975.    WriteData(0x30+wendushi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示溫度值十位可顯示0到9的數(shù)字。
  976.    WriteData(0x30+wenduge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示溫度值個(gè)位可顯示0到9的數(shù)字。
  977.    WriteData(xiaoshudian);//小數(shù)點(diǎn)
  978.    WriteData(0x30+wenduxiaoshu);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示小數(shù)位可顯示0到9的數(shù)字。
  979.    WriteData(0xdf);//0xdf表示字符庫(kù)中攝氏度左上角的符號(hào)
  980.    WriteData(0x43);//0x43表示字符庫(kù)中大寫(xiě)字母C        
  981. }
  982. //  void SetAlarmTemperatrueFenJie(uint alarmwendu)
  983. //{
  984. //   fuhaowei=0x20;//無(wú)符號(hào)
  985. //   alarmwendubai=alarmwendu/1000;//溫度值百位
  986. //   alarmwendushi=alarmwendu%1000/100;//溫度值十位
  987. //   alarmwenduge=alarmwendu%100/10;//溫度值個(gè)位
  988. //   alarmxiaoshu=alarmwendu%10;//小數(shù)位
  989. //  }                 
  990.   void SetTemperatrueInit()//設(shè)溫初始化函數(shù)
  991. {
  992.    WriteCommand(0x80+0x08);//LCD1602字符型液晶顯示器第一行第九個(gè)(從第零開(kāi)始數(shù))顯示位
  993.    WriteData(fuhaowei);//符號(hào)位顯示。
  994.    WriteData(0x30+setwendubai);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫百位變量可顯示0到9的數(shù)字。
  995.    WriteData(0x30+setwendushi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫十位變量可顯示0到9的數(shù)字。
  996.    WriteData(0x30+setwenduge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫個(gè)位變量可顯示0到9的數(shù)字。
  997.    WriteData(0x2e);//小數(shù)點(diǎn)
  998.    WriteData(0x30+setwenduxiaoshu);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)溫小數(shù)位變量可顯示0到9的數(shù)字。
  999.    WriteData(0xdf);//0xdf表示字符庫(kù)中攝氏度左上角的符號(hào)
  1000.    WriteData(0x43);//0x43表示字符庫(kù)中大寫(xiě)字母C

  1001.   }
  1002.   void SetTimeInit()//設(shè)時(shí)初始化函數(shù)
  1003. {
  1004.    WriteCommand(0x80+0x00);//LCD1602字符型液晶顯示器第一行第0個(gè)(從第零開(kāi)始數(shù))顯示位
  1005.    WriteData(0x30+sethourshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)十位變量可顯示0到9的數(shù)字。
  1006.    WriteData(0x30+sethourge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)時(shí)個(gè)位變量可顯示0到9的數(shù)字。
  1007.    WriteData(0x3a);//0x3a表示字符庫(kù)中冒號(hào)
  1008.    WriteData(0x30+setminutanshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)分十位變量可顯示0到9的數(shù)字。
  1009.    WriteData(0x30+setminutange);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)分個(gè)位變量可顯示0到9的數(shù)字。
  1010.    WriteData(0x3a);//0x3a表示字符庫(kù)中冒號(hào)
  1011.    WriteData(0x30+setsecondshi);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)秒十位位變量可顯示0到9的數(shù)字。
  1012.    WriteData(0x30+setsecondge);//0x30表示字符庫(kù)的數(shù)字0,整個(gè)代碼表示設(shè)秒個(gè)位位變量可顯示0到9的數(shù)字。
  1013.   }
  1014.   void TimeBaoJing()//時(shí)間報(bào)警函數(shù)
  1015. {
  1016.    if(S2numflag==1||S3numflag==1)//判斷增加鍵標(biāo)志位變量是否為1或減少鍵標(biāo)志位變量是否為1
  1017.   {  
  1018.     if(setsecondflag==1&&setminutanflag==0&&sethourflag==0&&setsecond>0&&TR0flag==1&&miaoflag==0)//判斷設(shè)時(shí)秒鐘標(biāo)志位變量是否為1和設(shè)時(shí)分鐘標(biāo)志位變量是否為0和設(shè)時(shí)時(shí)鐘標(biāo)志位變量是否為0和設(shè)時(shí)秒鐘是否大于0和定時(shí)器0標(biāo)志位變量是否等于1和秒鐘標(biāo)志位變量置是否為0
  1019.    {
  1020.      if(miao==setsecond)//判斷走時(shí)秒鐘是否等于設(shè)時(shí)秒鐘
  1021.     {
  1022.       timebaojingflag=1;//時(shí)間報(bào)警標(biāo)志位變量置1,進(jìn)行時(shí)間報(bào)警。
  1023.       TR0=0;//關(guān)定時(shí)器0
  1024.      }
  1025.     }
  1026.     if(setminutanflag==1&&setsecondflag==0&&sethourflag==0&&setminutan>0&&TR0flag==1&&fenflag==0)//判斷設(shè)時(shí)分鐘標(biāo)志位變量是否為1和設(shè)時(shí)秒鐘標(biāo)志位變量是否為0和設(shè)時(shí)時(shí)鐘標(biāo)志位變量是否為0和設(shè)時(shí)分鐘是否大于0和定時(shí)器0標(biāo)志位變量是否等于1和分鐘標(biāo)志位變量置是否為0
  1027.    {
  1028.      if(fen==setminutan)//判斷走時(shí)分鐘是否等于設(shè)時(shí)分鐘
  1029.     {
  1030.       timebaojingflag=1;//時(shí)間報(bào)警標(biāo)志位變量置1,進(jìn)行時(shí)間報(bào)警。
  1031.       TR0=0;//關(guān)定時(shí)器0
  1032.      }
  1033.     }
  1034.     if(sethourflag==1&&setsecondflag==0&&setminutanflag==0&&sethour>0&&TR0flag==1&&shiflag==0)//判斷設(shè)時(shí)時(shí)鐘標(biāo)志位變量是否為1和設(shè)時(shí)秒鐘標(biāo)志位變量是否為0和設(shè)時(shí)分鐘標(biāo)志位變量是否為0設(shè)時(shí)時(shí)鐘是否大于0和定時(shí)器0標(biāo)志位變量是否等于1和時(shí)鐘標(biāo)志位變量置是否為0
  1035.    {
  1036.      if(shi==sethour)//判斷走時(shí)時(shí)鐘是否等于設(shè)時(shí)時(shí)鐘
  1037.     {
  1038.       timebaojingflag=1;//時(shí)間報(bào)警標(biāo)志位變量置1,進(jìn)行時(shí)間報(bào)警。
  1039.       TR0=0;//關(guān)定時(shí)器0
  1040.      }
  1041.     }
  1042.     if(setsecondflag==1&&setminutanflag==1&&setsecond>0&&setminutan>0&&TR0flag==1&&miaoflag==0&&fenflag==0)//判斷設(shè)時(shí)秒鐘標(biāo)志位變量是否為1和設(shè)時(shí)分鐘標(biāo)志位變量是否為1和設(shè)時(shí)秒鐘是否大于0和設(shè)時(shí)分鐘是否大于0和定時(shí)器0標(biāo)志位變量是否等于1和秒鐘標(biāo)志位變量置是否為0和分鐘標(biāo)志位變量是否為0
  1043.    {
  1044.      if(miao==setsecond&&fen==setminutan)//判斷走時(shí)秒鐘和分鐘是否等于設(shè)時(shí)秒鐘和分鐘
  1045.     {
  1046.       timebaojingflag=1;//時(shí)間報(bào)警標(biāo)志位變量置1,進(jìn)行時(shí)間報(bào)警。
  1047.       TR0=0;//關(guān)定時(shí)器0
  1048.      }
  1049.     }
  1050.     if(setsecondflag==1&&sethourflag==1&&setsecond>0&&sethour>0&&TR0flag==1&&miaoflag==0&&shiflag==0)//判斷設(shè)時(shí)秒鐘標(biāo)志位變量是否為1和設(shè)時(shí)時(shí)鐘標(biāo)志位變量是否為1和設(shè)時(shí)秒鐘是否大于0和設(shè)時(shí)時(shí)鐘是否大于0和定時(shí)器0標(biāo)志位變量是否等于1和秒鐘標(biāo)志位變量是否為0和時(shí)鐘標(biāo)志位變量是否為0
  1051.    {
  1052.      if(miao==setsecond&&shi==sethour)//判斷走時(shí)秒鐘和時(shí)鐘是否等于設(shè)時(shí)秒鐘和時(shí)鐘
  1053.     {
  1054.       timebaojingflag=1;//時(shí)間報(bào)警標(biāo)志位變量置1,進(jìn)行時(shí)間報(bào)警。
  1055.       TR0=0;//關(guān)定時(shí)器0
  1056.      }
  1057.     }
  1058.     if(setminutanflag==1&&sethourflag==1&&setminutan>0&&sethour>0&&TR0flag==1&&fenflag==0&&shiflag==0)//判斷設(shè)時(shí)分鐘標(biāo)志位變量是否為1和設(shè)時(shí)時(shí)鐘標(biāo)志位變量是否為1和設(shè)時(shí)分鐘是否大于0和設(shè)時(shí)時(shí)鐘是否大于0和定時(shí)器0標(biāo)志位變量是否等于1和分鐘標(biāo)志位變量是否為0和時(shí)鐘標(biāo)志位變量是否為0
  1059.    {
  1060.      if(fen==setminutan&&shi==sethour)//判斷走時(shí)分鐘和時(shí)鐘是否等于設(shè)時(shí)分鐘和時(shí)鐘
  1061.     {
  1062.       timebaojingflag=1;//時(shí)間報(bào)警標(biāo)志位變量置1,進(jìn)行時(shí)間報(bào)警。
  1063.       TR0=0;//關(guān)定時(shí)器0
  1064.      }
  1065.     }
  1066.     if(setsecondflag==1&&setminutanflag==1&&sethourflag==1&&setsecond>0&&setminutan>0&&sethour>0&&TR0flag==1&&miaoflag==0&&fenflag==0&&shiflag==0)//判斷設(shè)時(shí)秒鐘標(biāo)志位變量是否為1和設(shè)時(shí)分鐘標(biāo)志位變量是否為1和設(shè)時(shí)時(shí)鐘標(biāo)志位變量是否為1和設(shè)時(shí)秒鐘是否大于0和設(shè)時(shí)分鐘是否大于0和設(shè)時(shí)時(shí)鐘是否大于0和定時(shí)器0標(biāo)志位變量是否等于1和秒鐘標(biāo)志位變量是否為0和分鐘標(biāo)志位變量是否為0和時(shí)鐘標(biāo)志位變量是否為0
  1067.    {
  1068.      if(miao==setsecond&&fen==setminutan&&shi==sethour)//判斷走時(shí)秒鐘和分鐘和時(shí)鐘是否都等于設(shè)時(shí)秒鐘和分鐘和時(shí)鐘
  1069.     {
  1070.       timebaojingflag=1;//時(shí)間報(bào)警標(biāo)志位變量置1,進(jìn)行時(shí)間報(bào)警。
  1071.       TR0=0;//關(guān)定時(shí)器0
  1072.      }
  1073.     }
  1074.    }
  1075.   }
  1076.   void TemperatrueBaoJing()//溫度報(bào)警函數(shù)
  1077. {
  1078.    if(S2numflag==1||S3numflag==1)//判斷增加鍵標(biāo)志位變量是否為1或減少鍵標(biāo)志位變量是否為1
  1079.   {  
  1080.     if(settemperatureflag==1)//判斷設(shè)溫標(biāo)志位變量是否為1
  1081.    {
  1082.      if(wendu-10>settemperature)//判斷溫度變量減10后是否大于設(shè)溫變量,其中的10分別表示設(shè)溫個(gè)位數(shù)1與設(shè)溫小數(shù)位0,實(shí)際上表示1攝氏度,相當(dāng)于溫差報(bào)警溫度,這么做的原因是因?yàn)樵O(shè)溫?cái)?shù)值和溫度數(shù)值都帶有小數(shù),通過(guò)數(shù)值取整運(yùn)算,把設(shè)溫?cái)?shù)值和溫度數(shù)值換算成整數(shù)來(lái)計(jì)算溫差,這樣便于處理設(shè)溫?cái)?shù)值與溫度數(shù)值的溫差值。
  1083.     {
  1084.       temperatruebaojingflag=1;//溫度報(bào)警標(biāo)志位變量置1,進(jìn)行溫度報(bào)警。
  1085.       TR0=0;//關(guān)定時(shí)器0
  1086.      }
  1087.     }
  1088.      if(wendu<10&&settemperatureflag==1)//判斷溫度變量是否小于10和設(shè)溫標(biāo)志位變量是否為1,其中的10分別表示設(shè)溫個(gè)位數(shù)1與設(shè)溫小數(shù)位0,實(shí)際上表示1攝氏度,相當(dāng)于溫差報(bào)警溫度,這么做的原因是因?yàn)樵O(shè)溫?cái)?shù)值和溫度數(shù)值都帶有小數(shù),通過(guò)數(shù)值取整運(yùn)算,把設(shè)溫?cái)?shù)值和溫度數(shù)值換算成整數(shù)來(lái)計(jì)算溫差,這樣便于處理設(shè)溫?cái)?shù)值與溫度數(shù)值的溫差值。
  1089.     {
  1090.       temperatruebaojingflag=0;//溫度報(bào)警標(biāo)志位變量置0,不進(jìn)行溫度報(bào)警。
  1091.       TR0=1;//開(kāi)定時(shí)器0
  1092.      }        
  1093.     }
  1094.   }
  1095.   void main()//主函數(shù)
  1096. {
  1097.    LCD1602Init();//LCD1602字符型液晶顯示器初始化函數(shù)
  1098.    Timer0Init();//定時(shí)器0初始化函數(shù)
  1099.    LCD1602Display();//LCD1602字符型液晶顯示器顯示函數(shù)
  1100.    DS18B20Init();//DS18B20初始化函數(shù)
  1101.    SetTimeInit();//設(shè)時(shí)初始化函數(shù)
  1102.    SetTemperatrueInit();//設(shè)溫初始化函數(shù)        
  1103.    while(1)//死循環(huán)
  1104.   {
  1105.     SumKeyScan();//總按鍵掃描函數(shù)
  1106.     if(qitingflag==1)//判斷啟停標(biāo)志位變量是否為1
  1107.    {
  1108.      TimeBaoJing();//時(shí)間報(bào)警函數(shù)
  1109.      if(timebaojingflag==1)//判斷時(shí)間報(bào)警標(biāo)志位變量置是否為1
  1110.     {
  1111.       FengNingQi_Alarm(80);//報(bào)警
  1112.       settimedisplayflag=1;//設(shè)時(shí)顯示標(biāo)志位變量置1,限制操作設(shè)時(shí)按鍵掃描函數(shù)。
  1113.       settemperaturedisplayflag=1;//設(shè)溫顯示標(biāo)志位變量置1,限制操作設(shè)溫按鍵掃描函數(shù)。
  1114.       tiaotimedisplayflag=1;//調(diào)時(shí)顯示標(biāo)志位變量置1,限制操作調(diào)時(shí)按鍵掃描函數(shù)。
  1115.      }
  1116.      TemperatrueBaoJing();//溫度報(bào)警函數(shù)
  1117.      if(temperatruebaojingflag==1)//判斷溫度報(bào)警標(biāo)志位變量是否為1
  1118.     {
  1119.       FengNingQi_Alarm(80);//報(bào)警
  1120.       settimedisplayflag=1;//設(shè)時(shí)顯示標(biāo)志位變量置1,限制操作設(shè)時(shí)按鍵掃描函數(shù)。
  1121.       settemperaturedisplayflag=1;//設(shè)溫顯示標(biāo)志位變量置1,限制操作設(shè)溫按鍵掃描函數(shù)。
  1122.       tiaotimedisplayflag=1;//調(diào)時(shí)顯示標(biāo)志位變量置1,限制操作調(diào)時(shí)按鍵掃描函數(shù)。
  1123.       temperaturedisplayflag=1;//溫度顯示標(biāo)志位變量置1,限制操作溫度分解函數(shù)和溫度顯示函數(shù)。
  1124.      }
  1125.      if(settimedisplayflag==0)//判斷設(shè)時(shí)顯示標(biāo)志位變量是否等于0
  1126.     {
  1127.       SetTimeKeyScan();//設(shè)時(shí)按鍵掃描函數(shù)
  1128.      }
  1129.      if(settemperaturedisplayflag==0)//判斷設(shè)溫標(biāo)志位變量是否等于0
  1130.     {        
  1131.       SetTemperatureKeyScan();//設(shè)溫按鍵掃描函數(shù)
  1132.      }
  1133.      if(tiaotimedisplayflag==0)//判斷調(diào)時(shí)標(biāo)志位變量是否等于0
  1134.     {
  1135.       TiaoTimeKeyScan();//調(diào)時(shí)按鍵掃描函數(shù)
  1136.      }
  1137. //   SetAlarmTemperatrueFenJie(alarmwendu);
  1138.      if(lcd1602displaytimeflag==0)//判斷液晶顯示器顯示時(shí)間標(biāo)志位變量是否等于0
  1139.     {        
  1140.       if(miao<=60)//判斷秒鐘變量是否小于等于60
  1141.       LCD1602DisplayTime(0x06,miao);//秒鐘顯示兩位數(shù)分解函數(shù)
  1142.       if(fen<=60)//判斷分鐘變量是否小于等于60
  1143.       LCD1602DisplayTime(0x03,fen);//分鐘顯示兩位數(shù)分解函數(shù)
  1144.       if(shi<=24)//判斷時(shí)鐘變量是否小于等于24
  1145.       LCD1602DisplayTime(0x00,shi);//時(shí)鐘顯示兩位數(shù)分解函數(shù)
  1146.      }
  1147.      if(temperaturedisplayflag==0)//判斷溫度顯示標(biāo)志位變量是否等于0
  1148.     {         
  1149.       TemperatureFenJie();//溫度分解函數(shù)
  1150.       TemperatureDisplay();//溫度顯示函數(shù)
  1151.      }
  1152.     }
  1153.    }
  1154.   }
復(fù)制代碼




評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:705430 發(fā)表于 2020-4-25 10:09 | 只看該作者
資料很齊全,不錯(cuò)不錯(cuò)
回復(fù)

使用道具 舉報(bào)

板凳
ID:286225 發(fā)表于 2020-4-25 10:33 | 只看該作者
好資料值得學(xué)習(xí)和收藏
回復(fù)

使用道具 舉報(bào)

地板
ID:703227 發(fā)表于 2020-4-30 01:25 | 只看該作者
資料不錯(cuò)
回復(fù)

使用道具 舉報(bào)

5#
ID:280851 發(fā)表于 2020-4-30 17:23 | 只看該作者
這注釋也太多了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 逼逼视频| 欧美视频二区 | 久久久久网站 | 日韩av一区二区在线观看 | 男人亚洲天堂 | 午夜免费视频 | 精品精品视频 | 国产欧美一区二区三区日本久久久 | 色综合99 | 日本小视频网站 | 国产精品一区在线 | 国产精品区二区三区日本 | 欧美一区二区三区视频 | 亚州中文字幕 | 日韩三级| 精品三区 | 日韩在线免费视频 | 中文字幕一区二区三区不卡 | 午夜免费福利片 | 欧美在线 | 91视频国产区 | 久久中文字幕一区 | 午夜天堂精品久久久久 | 精品一区二区久久久久久久网站 | 亚洲综合色视频在线观看 | 国产精品一区二区在线免费观看 | 国产午夜精品一区二区三区四区 | 亚洲精品黑人 | 在线国产视频 | 日本一级淫片免费啪啪3 | 天天操夜夜操 | 久久久久久久久久性 | 久久亚洲国产 | 日韩一区二区在线免费观看 | 亚洲一区二区精品视频 | 精品免费视频 | 欧美不卡视频 | 欧美精品啪啪 | 日韩精品一区二区三区四区视频 | 国产a级黄色录像 | 综合色在线 |