<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

          作者: 時(shí)間:2016-11-30 來(lái)源:網(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í)行下面語(yǔ)句
          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í)行下面語(yǔ)句
          Refresh_SetTime=1;
          LCD_WriteCommand(0x30);
          LCD_WriteCommand(0x80);
          LCD_SendString("設(shè)置鬧鈴:");
          LCD_WriteCommand(0x98);
          LCD_SendString(" 開(kāi)啟 關(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("背景光開(kāi)關(guān)設(shè)置:");
          LCD_WriteCommand(0x90);
          LCD_SendString(" 開(kāi) 關(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("按鍵音開(kāi)關(guān)設(shè)置:");
          LCD_WriteCommand(0x90);
          LCD_SendString(" 開(kāi) 關(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


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();