在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

  • <dfn id="79stg"></dfn>
    <object id="79stg"><div id="79stg"><label id="79stg"></label></div></object>
    <ruby id="79stg"><dl id="79stg"><noscript id="79stg"></noscript></dl></ruby>

      新聞中心

      EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)+lcd12864液晶屏菜單程序

      51單片機(jī)+lcd12864液晶屏菜單程序

      作者: 時(shí)間:2016-11-30 來源:網(wǎng)絡(luò) 收藏


      /*------------------------------------
      主界面處理
      ------------------------------------*/
      void MainMenu_Pro()
      {
      if(guide!=guide_old)//箭頭位和之前的不同的話證明按鍵了,刷新顯示
      {
      LCD_RefreshMenu();//刷新菜單顯示
      guide_old=guide;//LCD靜態(tài)顯示,不然快速刷屏不好看
      LCD_WriteCommand(0x30);//修正回一般指令模式
      LCD_WriteCommand(0x82);
      LCD_SendString("功能菜單");//菜單標(biāo)題
      }
      if(!KEY_DOWN)//
      {
      DelayMs(10);
      if(!KEY_DOWN)
      {
      TR1=1;
      while(!KEY_DOWN)
      ;
      if(guideguide++;
      TR1=0;
      }
      }

      else if(!KEY_UP)
      {
      DelayMs(10);
      if(!KEY_UP)
      {
      TR1=1;
      while(!KEY_UP)
      ;
      if(guide>0)
      guide--;
      TR1=0;
      }
      }

      else if(!KEY_ENTER)
      {
      DelayMs(10);
      if(!KEY_ENTER)
      {
      TR1=1;
      while(!KEY_ENTER)
      ;
      switch(guide)
      {
      case 0: Menu0=1;Enter_Menu=1;break;
      case 1: Menu1=1;Enter_Menu=1;break;
      case 2: Menu2=1;Enter_Menu=1;break;
      case 3: Menu3=1;Enter_Menu=1;break;
      case 4: Menu4=1;Enter_Menu=1;break;
      case 5: Menu5=1;Enter_Menu=1;break;
      case 6: FanHui1=1;Menu_Flag=0;guide=0;
      LCD_WriteCommand(0x01);break;//輪詢到有enter鍵,當(dāng)guide指向返回時(shí)候直接去掉FanHui1控制的父菜單循環(huán)
      default:return;
      }
      TR1=0;
      }
      }
      }

      /*------------------------------------
      Menu0設(shè)置時(shí)間子菜單處理
      ------------------------------------*/
      void Menu0_Pro()
      {
      UINT8 temp;
      if(!Again)
      {
      LCD_ClearGDRAM();
      Set_Hour=1;//第一次進(jìn)入時(shí)候直接顯示調(diào)小時(shí)位
      Again=1;//執(zhí)行一次的標(biāo)置置高,表明運(yùn)行到該if條件下不執(zhí)行下面語句
      Refresh_SetTime=1;
      LCD_WriteCommand(0x30);
      LCD_WriteCommand(0x80);
      LCD_SendString("設(shè)置時(shí)間:");
      LCD_WriteCommand(0x98);
      LCD_SendString("ENTER 鍵保存修改");
      DS1302_ReadTime();
      Second=0;
      }

      if(Refresh_SetTime)//當(dāng)調(diào)節(jié)了刷新顯示
      {
      Refresh_SetTime=0;
      Display_Time();
      //Display_SetTime();
      }

      if(!KEY_UP)
      {
      DelayMs(10);
      if(!KEY_UP)
      {
      TR1=1;
      //Refresh_SetTime=1;
      while(!KEY_UP);
      TR1=0;
      if(Set_Hour)
      {
      temp=Hour/16;//這里需要進(jìn)行BCD數(shù)到十進(jìn)制數(shù)的轉(zhuǎn)換
      Hour=Hour%16+temp*10;
      if(Hour<23)
      Hour++;
      else Hour=0;
      temp=Hour/10;//轉(zhuǎn)換完以后再轉(zhuǎn)換會(huì)BCD數(shù)
      Hour=Hour%10+temp*16;
      //Display_Time();
      }
      else
      {
      temp=Minute/16;
      Minute=Minute%16+temp*10;
      if(Minute<59)
      Minute++;
      else Minute=0;
      temp=Minute/10;
      Minute=Minute%10+temp*16;
      }
      //Display_Time();
      Refresh_SetTime=1;
      }
      }

      else if(!KEY_DOWN)
      {
      DelayMs(10);
      if(!KEY_DOWN)
      {
      TR1=1;
      //Refresh_SetTime=1;
      while(!KEY_DOWN);
      TR1=0;
      if(Set_Hour)
      {
      temp=Hour/16;
      Hour=Hour%16+temp*10;
      if(Hour>0)
      Hour--;
      else Hour=23;
      temp=Hour/10;
      Hour=Hour%10+temp*16;
      //Display_Time();
      }
      else
      {
      temp=Minute/16;
      Minute=Minute%16+temp*10;
      if(Minute>0)
      Minute--;
      else Minute=59;
      temp=Minute/10;
      Minute=Minute%10+temp*16;

      }
      //Display_Time();
      Refresh_SetTime=1;
      }
      }

      else if(!KEY_ENTER)
      {
      DelayMs(10);
      if(!KEY_ENTER)
      {
      TR1=1;
      while(!KEY_ENTER);
      TR1=0;
      Enter_Menu=0;
      Menu0=0;
      guide_old++;
      Again=0;
      guide=0;
      Set_Hour=0;
      //Set_Minute=0;
      DS1302_WriteTime();
      LCD_ClearGDRAM();
      }
      }

      }

      /*------------------------------------
      Menu1設(shè)置日期子菜單處理
      ------------------------------------*/
      void Menu1_Pro()
      {
      UINT8 temp;
      if(!Again)
      {
      LCD_ClearGDRAM();
      Set_Date=0;
      Again=1;
      Refresh_SetTime=1;
      LCD_WriteCommand(0x30);
      LCD_WriteCommand(0x80);
      LCD_SendString("設(shè)置日期:");
      LCD_WriteCommand(0x98);
      LCD_SendString("ENTER 鍵保存修改");
      DS1302_ReadDate();
      }

      if(Menu1_Flag)//每次Menu1下最少輪詢5個(gè)if條件,最7多個(gè)if.實(shí)驗(yàn)證明,能帶得了,效果還行
      {
      Menu1_Flag=0;
      //Refresh_SetTime=1;
      Set_Date++;
      }

      if(Set_Date>2)
      Set_Date=0;

      if(Refresh_SetTime)//當(dāng)調(diào)節(jié)了刷新顯示
      {
      Refresh_SetTime=0;
      Display_SetDate();
      }

      if(!KEY_UP)
      {
      DelayMs(10);
      if(!KEY_UP)
      {
      TR1=1;
      while(!KEY_UP);
      TR1=0;
      if(Set_Date==0)
      {
      temp=Year/16;
      Year=Year%16+temp*10;
      if(Year<99)
      Year++;
      else Year=0;
      temp=Year/10;
      Year=Year%10+temp*16;
      }
      else if(Set_Date==1)
      {
      temp=Month/16;
      Month=Month%16+temp*10;
      if(Month<12)
      Month++;
      else Month=1;
      temp=Month/10;
      Month=Month%10+temp*16;
      }

      else if(Set_Date==2)
      {
      temp=Date/16;
      Date=Date%16+temp*10;
      if(Date<31)
      Date++;
      else Date=1;
      temp=Date/10;
      Date=Date%10+temp*16;
      }
      Refresh_SetTime=1;
      }
      }

      else if(!KEY_DOWN)
      {
      DelayMs(10);
      if(!KEY_DOWN)
      {
      TR1=1;
      while(!KEY_DOWN);
      TR1=0;
      if(!Set_Date)
      {
      temp=Year/16;
      Year=Year%16+temp*10;
      if(Year>0)
      Year--;
      else Year=99;
      temp=Year/10;
      Year=Year%10+temp*16;
      }
      else if(Set_Date==1)
      {
      temp=Month/16;
      Month=Month%16+temp*10;
      if(Month>1)
      Month--;
      else Month=12;
      temp=Month/10;
      Month=Month%10+temp*16;
      }

      else if(Set_Date==2)
      {
      temp=Date/16;
      Date=Date%16+temp*10;
      if(Date>1)
      Date--;
      else Date=31;
      temp=Date/10;
      Date=Date%10+temp*16;
      }
      Refresh_SetTime=1;
      }
      }

      else if(!KEY_ENTER)
      {
      DelayMs(10);
      if(!KEY_ENTER)
      {
      TR1=1;
      while(!KEY_ENTER);
      TR1=0;
      Enter_Menu=0;
      Menu1=0;
      guide_old++;
      Again=0;
      //guide=0;
      //Set_Hour=0;
      //Set_Minute=0;
      DS1302_WriteDate();
      LCD_ClearGDRAM();
      }
      }

      }

      /*------------------------------------
      Menu2鬧鈴功能
      ------------------------------------*/
      void Menu2_Pro()
      {
      UINT8 temp;
      if(!Again)
      {
      LCD_ClearGDRAM();
      Set_Bell=0;
      //Set_Hour=1;//第一次進(jìn)入時(shí)候直接顯示調(diào)小時(shí)位
      Again=1;//執(zhí)行一次的標(biāo)置置高,表明運(yùn)行到該if條件下不執(zhí)行下面語句
      Refresh_SetTime=1;
      LCD_WriteCommand(0x30);
      LCD_WriteCommand(0x80);
      LCD_SendString("設(shè)置鬧鈴:");
      LCD_WriteCommand(0x98);
      LCD_SendString(" 開啟 關(guān)閉");
      }

      if(Menu2_Flag)
      {
      Menu2_Flag=0;
      Set_Bell++;
      Refresh_SetTime=1;
      }

      if(Set_Bell>3)
      Set_Bell=0;


      if(Refresh_SetTime)//當(dāng)調(diào)節(jié)了刷新顯示
      {
      Refresh_SetTime=0;
      Display_Bell();
      LCD_WriteCommand(0x30);
      LCD_WriteCommand(0x98);
      LCD_SendString(" ");
      LCD_WriteCommand(0x9d);
      LCD_SendString(" ");
      if(Set_Bell>1)
      {
      if(Set_Bell==2)
      LCD_WriteCommand(0x98);
      else
      LCD_WriteCommand(0x9d);
      LCD_DisplayCGRAM(1);
      }
      }

      if(!KEY_UP)
      {
      DelayMs(10);
      if(!KEY_UP)
      {
      TR1=1;
      while(!KEY_UP);
      TR1=0;
      if(Set_Bell==0)
      {
      if(Bell_Hour<23)
      Bell_Hour++;
      else Bell_Hour=0;
      }
      else if(Set_Bell==1)
      {
      if(Bell_Minute<59)
      Bell_Minute++;
      else Bell_Minute=0;
      }
      Refresh_SetTime=1;
      }
      }

      else if(!KEY_DOWN)
      {
      DelayMs(10);
      if(!KEY_DOWN)
      {
      TR1=1;
      while(!KEY_DOWN);
      TR1=0;
      if(Set_Bell==0)
      {
      if(Bell_Hour>0)
      Bell_Hour--;
      else Bell_Hour=23;
      }
      else if(Set_Bell==1)
      {
      if(Bell_Minute>0)
      Bell_Minute--;
      else Bell_Minute=59;

      }
      Refresh_SetTime=1;
      }
      }

      else if(!KEY_ENTER)
      {
      DelayMs(10);
      if(!KEY_ENTER)
      {
      TR1=1;
      while(!KEY_ENTER);
      TR1=0;
      Enter_Menu=0;
      Menu2=0;
      guide_old++;
      Again=0;

      //將鬧鐘時(shí)轉(zhuǎn)換BCD以方便和ds1302讀出的數(shù)據(jù)比較
      temp=Bell_Hour/10; Bell_Hour=Bell_Hour%10+temp*16;
      temp=Bell_Minute/10; Bell_Minute=Bell_Minute%10+temp*16;

      if(Set_Bell==2)
      Bell_Flag=1;
      else Bell_Flag=0;
      LCD_ClearGDRAM();
      }
      }
      }

      /*------------------------------------
      Menu3背光功能
      ------------------------------------*/
      void Menu3_Pro()
      {
      if(!Again)
      {
      LCD_ClearGDRAM();//LCD清屏幕
      Again=1;//表明這個(gè)分支每次進(jìn)入者只執(zhí)行一次
      //Set_Bright=0;
      Refresh_SetTime=1;
      LCD_WriteCommand(0x30);
      LCD_WriteCommand(0x80);
      LCD_SendString("背景光開關(guān)設(shè)置:");
      LCD_WriteCommand(0x90);
      LCD_SendString(" 開 關(guān)");
      LCD_WriteCommand(0x98);
      LCD_SendString("ENTER 鍵保存修改");
      }

      if(Refresh_SetTime)//當(dāng)調(diào)節(jié)了刷新顯示
      {
      Refresh_SetTime=0;
      if(Set_Bright)
      {
      LCD_WriteCommand(0x94);
      LCD_DisplayCGRAM(1);
      LCD_WriteCommand(0x90);
      LCD_SendString(" ");
      }
      else
      {
      LCD_WriteCommand(0x90);
      LCD_DisplayCGRAM(1);
      LCD_WriteCommand(0x94);
      LCD_SendString(" ");
      }
      }

      if(!KEY_ENTER)
      {
      DelayMs(10);
      if(!KEY_ENTER)
      {
      TR1=1;
      while(!KEY_ENTER);
      TR1=0;
      if(Set_Bright) BRIGHT=0;
      else BRIGHT=1;

      Enter_Menu=0;
      Menu3=0;
      guide_old++;
      Again=0;
      LCD_ClearGDRAM();
      }
      }
      }

      /*------------------------------------
      Menu4按鍵音功能
      ------------------------------------*/
      void Menu4_Pro()
      {
      if(!Again)
      {
      LCD_ClearGDRAM();
      Again=1;
      //Set_Speaker=0;
      Refresh_SetTime=1;
      LCD_WriteCommand(0x30);
      LCD_WriteCommand(0x80);
      LCD_SendString("按鍵音開關(guān)設(shè)置:");
      LCD_WriteCommand(0x90);
      LCD_SendString(" 開 關(guān)");
      LCD_WriteCommand(0x98);
      LCD_SendString("ENTER 鍵保存修改");
      }

      if(Refresh_SetTime)//當(dāng)調(diào)節(jié)了刷新顯示
      {
      Refresh_SetTime=0;
      if(Set_Speaker)
      {
      LCD_WriteCommand(0x94);
      LCD_DisplayCGRAM(1);
      LCD_WriteCommand(0x90);
      LCD_SendString(" ");
      }
      else
      {
      LCD_WriteCommand(0x90);
      LCD_DisplayCGRAM(1);
      LCD_WriteCommand(0x94);
      LCD_SendString(" ");
      }
      }

      if(!KEY_ENTER)
      {
      DelayMs(10);
      if(!KEY_ENTER)
      {
      TR1=1;
      while(!KEY_ENTER);
      TR1=0;
      if(Set_Speaker) ET1=0;
      else ET1=1;

      Enter_Menu=0;
      Menu4=0;
      guide_old++;
      Again=0;
      //guide=0;
      LCD_ClearGDRAM();
      }
      }

      }

      /*------------------------------------
      Menu5生日提醒功能
      ------------------------------------*/
      void Menu5_Pro()
      {
      UINT16 temp;
      LCD_ClearGDRAM();
      LCD_WriteCommand(0x30);
      LCD_WriteCommand(0x80);
      LCD_SendString("距我生日還有:");
      LCD_WriteCommand(0x88);
      LCD_SendString("距洋洋生日還有:");
      temp=Month/16;
      Month=Month%16+temp*10;

      temp=Date/16;
      Date=Date%16+temp*10;

      switch(Month)
      {
      case 1: temp=249-Date;break;
      case 2: temp=218-Date;break;
      case 3: temp=190-Date;break;
      case 4: temp=159-Date;break;
      case 5: temp=129-Date;break;
      case 6: temp=98-Date;break;
      case 7: temp=67-Date;break;
      case 8: temp=37-Date;break;
      case 9: if(Date<=6) temp=6-Date;
      else temp=365-30+Date;break;
      case 10:temp=(31-Date)+334;break;
      case 12:temp=(30-Date)+304;break;
      default: return;
      }

      if(!(Year%0x4))
      temp+=1;

      LCD_WriteCommand(0x06);
      LCD_WriteCommand(0x90);
      LCD_WriteData(temp/100|0x30);
      LCD_WriteData(temp%100/10|0x30);
      LCD_WriteData(temp%10|0x30);
      temp+=12;
      LCD_WriteCommand(0x98);
      LCD_WriteData(temp/100|0x30);
      LCD_WriteData(temp%100/10|0x30);
      LCD_WriteData(temp%10|0x30);
      LCD_WriteCommand(0x93);
      LCD_SendString("天");
      LCD_WriteCommand(0x9b);
      LCD_SendString("天");
      while(Menu5)
      {
      if(!KEY_ENTER)
      {
      DelayMs(10);
      if(!KEY_ENTER)
      {
      TR1=1;
      while(!KEY_ENTER);
      TR1=0;
      Menu5=0;
      LCD_ClearGDRAM();
      Enter_Menu=0;
      guide_old++;
      }
      }
      }
      DS1302_ReadDate();
      }

      #endif


      上一頁 1 2 下一頁

      評(píng)論


      技術(shù)專區(qū)

      關(guān)閉