自制的一個簡單菜單系統 加了溫度 萬年歷 12864的 打有注釋 適合初學者使用 串口通信
完整的12864菜單單片機源碼下載:
12864菜單.zip
(65.1 KB, 下載次數: 42)
2016-12-15 13:10 上傳
點擊文件名下載附件
程序的主要部分預覽:
- /*------------------------------------
- 名稱:菜單處理模塊
- 編寫:YuMin_Dong
- 時間:2013.01.24
- ------------------------------------*/
- #ifndef _PROCESS_H_
- #define _PROCESS_H_
- //按鍵
- sbit KEY_PgDn=P3^0;
- sbit KEY_PgUp=P3^1;
- sbit KEY_Enter=P3^2;
- sbit KEY_Esc=P3^3;
- bit Menu1,Menu2,Menu3,Menu4,Menu5,Menu6,Enter_Menu,Menu0;
- void MainMenu_Pro()
- {
- if(curr!=currold) //光標位置變化,則更新顯示 按鍵按下去 字符串就變更位置了 CURR也就變了
- {
- DisplayUpdata();
- currold=curr; //把CURR的值賦給CURROLD 判斷下加一個一
- }
-
- if(!KEY_PgUp)
- {
- DelayMs(10);
- if(!KEY_PgUp)
- {
- while(!KEY_PgUp);
- {
- if(curr<sizeof(MainMenu)/sizeof(MainMenu[0])-1) //sizeof 求字節數
- //判斷數組中數值個數
- { curr++; }
- }
- }
- }
- else
- if(!KEY_PgDn)
- {
- DelayMs(10);
- if(!KEY_PgDn)
- {
- while(!KEY_PgDn);
- {
- if(curr>0)
- { curr--; }
- }
- }
- }
- else if(!KEY_Enter)
- {
- DelayMs(10);
- if(!KEY_Enter)
- {
- while(!KEY_Enter);
- switch(curr)
- {
- // case 0: Menu0=1;Enter_Menu=1;break;
- case 1: Menu1=1;Enter_Menu=1;ClrScreen();break;
- case 2: Menu2=1;Enter_Menu=1;ClrScreen();break;
- case 3: Menu3=1;Enter_Menu=1;ClrScreen();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;
- // Write_Cmd(0x01);break; //輪詢到有enter鍵,當guide指向返回時候直接去掉FanHui1控制的父菜單循環
- default:return;
- }
- }
- }
-
- }
- /*************************************************************
- 按鍵返回函數
- *************************************************************/
- void ESC()
- {
- if(!KEY_Esc)
- {
- DelayMs(10);
- while(!KEY_Esc);
- Menu1=0;
- Menu2=0;
- Menu3=0;
- Enter_Menu=0;
- DisplayUpdata();
- }
- }
- /*------------------------------------
- Menu1設置時間子菜單處理
- ------------------------------------*/
- void Menu1_Pro()
- {
- datapros(Ds18b20ReadTemp());
- if(!KEY_Esc)
- {
- ESC();
- }
- }
- /*------------------------------------
- Menu2設置時間子菜單處理
- ------------------------------------*/
- void Menu2_Pro()
- {
- uchar week;
- week=(TIME[5]&0x0f);
- Ds1302ReadTime();
- LCD_PutString(0,1,"北京時間:");
- Write_Cmd(0x90+0);
- Write_Data((TIME[2]/16)+0x30);
- Write_Data((TIME[2]&0x0f)+0x30);
- LCD_PutString(1,2,"時");
- Write_Cmd(0x90+2);
- Write_Data('0'+(TIME[1]/16));
- Write_Data('0'+(TIME[1]&0x0f));
- LCD_PutString(3,2,"分");
- Write_Cmd(0x90+4);
- Write_Data('0'+(TIME[0]/16));
- Write_Data('0'+(TIME[0]&0x0f));
- LCD_PutString(5,2,"秒");
- Write_Cmd(0x88+0);
- Write_Data('2');
- Write_Data('0');
- Write_Data((TIME[6]/16)+0x30);
- Write_Data((TIME[6]&0x0f)+0x30);
- LCD_PutString(2,3,"年");
- Write_Data((TIME[4]/16)+0x30);
- Write_Data((TIME[4]&0x0f)+0x30);
- LCD_PutString(4,3,"月");
- Write_Data((TIME[3]/16)+0x30);
- Write_Data((TIME[3]&0x0f)+0x30);
- LCD_PutString(6,3,"日");
- // Write_Cmd(0x98+2);
- // Write_Data((TIME[5]/16)+0x30);
- // Write_Data((TIME[5]&0x0f)+0x30);
- LCD_PutString(0,4,"星期");
- switch(week)
- {
- case 1:LCD_PutString(2,4,"一");break;
- case 2:LCD_PutString(2,4,"二");break;
- case 3:LCD_PutString(2,4,"叁");break;
- case 4:LCD_PutString(2,4,"四");break;
- case 5:LCD_PutString(2,4,"五");break;
- case 6:LCD_PutString(2,4,"六");break;
- case 7:LCD_PutString(2,4,"天");break;
- }
- if(!KEY_Esc)
- {
- ESC();
- }
- }
- /*------------------------------------
- Menu3設置時間子菜單處理
- ------------------------------------*/
- void Menu3_Pro()
- {
- Read_AD_Data(0x94);
- if(!KEY_Esc)
- {
- ESC();
- }
- }
- #endif
復制代碼
|