我寫的LCD液晶屏菜單程序,實現(xiàn)時鐘的年月日時分秒的調(diào)節(jié),實現(xiàn)鬧鐘的設(shè)置,實現(xiàn)溫度的上下限設(shè)置并按照設(shè)置值驅(qū)動繼電器,溫度和鬧鐘的設(shè)置參數(shù)都寫入EEPROM中,掉電開機設(shè)置參數(shù)不丟失,大個數(shù)字顯示時分秒。菜單為三級,三級留空白,可自行添加內(nèi)容,自己寫的,水平有限,發(fā)給壇里師兄吐槽,共同進步,下一步寫一個結(jié)構(gòu)體加指針的菜單程序。望壇里師傅有的奉獻出來一下,謝謝。
制作出來的實物圖如下:
IMG_20200630_224002.jpg (1.27 MB, 下載次數(shù): 1059)
下載附件
2020-6-30 23:09 上傳
IMG_20200630_223744.jpg (1.31 MB, 下載次數(shù): 96)
下載附件
2020-6-30 23:09 上傳
單片機源程序如下:
- #include "LCD19264.h"
- #include "1302.H"
- #include "18B20.h"
- #include "tm1650.h"
- #include "24C16.h"
- #include "UART.h"
- #include "Fonts.h"
- #include "delay.h"
- #include "FengMingQiJiDianQi.h"
- bit MenuFlag1,MenuFlag2,MenuFlag3; // 各級菜單標志位,如果為1代表已進入該機菜單,為0代表退出該級菜單
- char NaoZhongShi=8,NaoZhongFen=0,NaoZhongMiao=0; //這里用char而不是unsigned char 的原因是操作此變量時減到0就停止,如果定義unsigned char,變量減到小于0就自動變?yōu)?5535
- uchar kjcs; //開機次數(shù)
- uchar key,num; //鍵值
- uint wenduszd,wenduszg;//溫度設(shè)置上下限值,wenduszd溫度設(shè)置低,wenduszg溫度設(shè)置高,wdszgzjz溫度設(shè)置高未保存的值,wdszdzjz溫度設(shè)置高未保存的值
- #define SHORT_JIAO 80
- #define LONG_JIAO 150
- /************************************待機頁面函數(shù)**********************************/
- void DeskWall() //待機桌面
- {
- Read_temp(); //讀取溫度值
- Read_time(); //讀取時間值
- // Disp_chinese_16x16(176,0,0,leijijd[8]);//在右上角顯示電池電量圖案
- // Disp_chinese_16x16(0,0,0,leijijd[9]);//在右上角顯示W(wǎng)IFI信號圖案
- if(shi==NaoZhongShi&&fen==NaoZhongFen&&miao==NaoZhongMiao)
- {
- ClearDisplay(); //清理一次屏幕
- }
- if(shi==NaoZhongShi&&fen==NaoZhongFen&&miao<NaoZhongMiao+30)
- {
- Beep(50,5,5); //鬧鐘響起
- Beep(50,8,4);
- Disp_chinese_N_16x16(48,2,2,1,NZSZ); //顯示“鬧鐘”設(shè)置2個字
- Disp_chinese_N_16x16(80,2,2,1,SJSZ); //顯示“時間”設(shè)置2個字
- Disp_chinese_16x16(112,2,1,leijijd[4]);//顯示“到”字
- }
- else
- {
- /******************顯示年 月 日 時 分 秒 星期 ************************/
- Disp_Char_16x32(32,4,0,DSZ[shi/10%10]);
- Disp_Char_16x32(48,4,0,DSZ[shi%10]);
- Disp_Char_16x32(64,4,0,DSZ[10]); //冒號
- Disp_Char_16x32(80,4,0,DSZ[fen/10%10]);
- Disp_Char_16x32(96,4,0,DSZ[fen%10]);
- Disp_Char_16x32(112,4,0,DSZ[10]); //冒號
- Disp_Char_16x32(128,4,0,DSZ[miao/10%10]);
- Disp_Char_16x32(144,4,0,DSZ[miao%10]);
- Disp_Char(0,6,0,SZ[nian/10%10]);
- Disp_Char(8,6,0,SZ[nian%10]);
- Disp_chinese_16x16(16,6,0,NYRSFMZ[0]); //年字
- Disp_Char(32,6,0,SZ[yue/10%10]);
- Disp_Char(40,6,0,SZ[yue%10]);
- Disp_chinese_16x16(48,6,0,NYRSFMZ[1]); //月字
- Disp_Char(64,6,0,SZ[ri/10%10]);
- Disp_Char(72,6,0,SZ[ri%10]);
- Disp_chinese_16x16(80,6,0,NYRSFMZ[2]); //日字
- switch(xingqi) //將星期1-7轉(zhuǎn)換成中文顯示
- {
- case 1: {
- Disp_chinese_16x16(96,6,0,NYRSFMZ[6]);
- Disp_chinese_16x16(112,6,0,DaXieShuZi[1]);
- };break;
- case 2: {
- Disp_chinese_16x16(96,6,0,NYRSFMZ[6]);
- Disp_chinese_16x16(112,6,0,DaXieShuZi[2]);
- };break;
- case 3: {
- Disp_chinese_16x16(96,6,0,NYRSFMZ[6]);
- Disp_chinese_16x16(112,6,0,DaXieShuZi[3]);
- };break;
- case 4: {
- Disp_chinese_16x16(96,6,0,NYRSFMZ[6]);
- Disp_chinese_16x16(112,6,0,DaXieShuZi[4]);
- };break;
- case 5: {
- Disp_chinese_16x16(96,6,0,NYRSFMZ[6]);
- Disp_chinese_16x16(112,6,0,DaXieShuZi[5]);
- };break;
- case 6: {
- Disp_chinese_16x16(96,6,0,NYRSFMZ[6]);
- Disp_chinese_16x16(112,6,0,DaXieShuZi[6]);
- };break;
- case 7: {
- Disp_chinese_16x16(96,6,0,NYRSFMZ[6]);
- Disp_chinese_16x16(112,6,0,NYRSFMZ[2]);
- };break;
- }
- /*************************************顯示溫度值*********************************************/
- //////////////////////////////////如果溫度為零下時////////////////////////////////////////
- if(tflag==1)
- {
-
- if(tvalue==0)
- {
- Disp_Char(136,6,0,F8X16[0]); //用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(144,6,0,F8X16[0]); //用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(152,6,0,F8X16[0]);//用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(160,6,0,F8X16[0]); //用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(168,6,0,SZ[0]);
- Disp_Char(176,6,0,F8X16[97]); //溫度符號攝氏度的點
- Disp_Char(184,6,0,F8X16[35]); //溫度符號攝氏度的"C"
- }
- else
- {
- if(tvalue<10)
- {
- Disp_Char(136,6,0,F8X16[0]); //用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(144,6,0,F8X16[13]); //用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(152,6,0,SZ[0]);
- Disp_Char(160,6,0,F8X16[14]); //小數(shù)點
- Disp_Char(168,6,0,SZ[tvalue%10]);
- Disp_Char(176,6,0,F8X16[97]); //溫度符號攝氏度的點
- Disp_Char(184,6,0,F8X16[35]); //溫度符號攝氏度的"C"
- }
- else
- {
- if(tvalue<100)
- {
- Disp_Char(136,6,0,F8X16[0]); //用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(144,6,0,F8X16[13]); //用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(152,6,0,SZ[tvalue/10%10]);
- Disp_Char(160,6,0,F8X16[14]); //小數(shù)點
- Disp_Char(168,6,0,SZ[tvalue%10]);
- Disp_Char(176,6,0,F8X16[97]); //溫度符號攝氏度的點
- Disp_Char(184,6,0,F8X16[35]); //溫度符號攝氏度的"C"
- }
- else
- {
- if(tvalue<1000)
- {
- Disp_Char(136,6,0,F8X16[13]); //用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(144,6,0,SZ[tvalue/100%10]); //顯示溫度十位
- Disp_Char(152,6,0,SZ[tvalue/10%10]);
- Disp_Char(160,6,0,F8X16[14]); //小數(shù)點
- Disp_Char(168,6,0,SZ[tvalue%10]);
- Disp_Char(176,6,0,F8X16[97]); //溫度符號攝氏度的點
- Disp_Char(184,6,0,F8X16[35]); //溫度符號攝氏度的"C"
- }
- /* else //一般不會達到零下100度的低溫,不做無意義的事情,在這里屏蔽掉此段,
- {
- Disp_Char(136,6,0,SZ[tvalue/1000%10]);//溫度的負數(shù)和超過100度溫度時的顯示待處理
- Disp_Char(144,6,0,SZ[tvalue/100%10]); //顯示溫度十位
- Disp_Char(152,6,0,SZ[tvalue/10%10]);
- Disp_Char(160,6,0,F8X16[14]); //小數(shù)點
- Disp_Char(168,6,0,SZ[tvalue%10]);
- Disp_Char(176,6,0,F8X16[97]); //溫度符號攝氏度的點
- Disp_Char(184,6,0,F8X16[35]); //溫度符號攝氏度的"C"
- } */
- }
- }
- }
- }
- else
- ////////////////////如果溫度為正時/////////////////////////////////////////////
- {
- if(tvalue==0)
- {
- Disp_Char(136,6,0,F8X16[0]); //用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(144,6,0,F8X16[0]); //用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(152,6,0,F8X16[0]);//用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(160,6,0,F8X16[0]); //用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(168,6,0,SZ[0]);
- Disp_Char(176,6,0,F8X16[97]); //溫度符號攝氏度的點
- Disp_Char(184,6,0,F8X16[35]); //溫度符號攝氏度的"C"
- }
- else
- {
- if(tvalue<10)
- {
- Disp_Char(136,6,0,F8X16[0]); //用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(144,6,0,F8X16[0]); //用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(152,6,0,SZ[0]);
- Disp_Char(160,6,0,F8X16[14]); //小數(shù)點
- Disp_Char(168,6,0,SZ[tvalue%10]);
- Disp_Char(176,6,0,F8X16[97]); //溫度符號攝氏度的點
- Disp_Char(184,6,0,F8X16[35]); //溫度符號攝氏度的"C"
- }
- else
- {
- if(tvalue<100)
- {
- Disp_Char(136,6,0,F8X16[0]); //用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(144,6,0,F8X16[0]); //用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(152,6,0,SZ[tvalue/10%10]);
- Disp_Char(160,6,0,F8X16[14]); //小數(shù)點
- Disp_Char(168,6,0,SZ[tvalue%10]);
- Disp_Char(176,6,0,F8X16[97]); //溫度符號攝氏度的點
- Disp_Char(184,6,0,F8X16[35]); //溫度符號攝氏度的"C"
- }
- else
- {
- if(tvalue<1000)
- {
- Disp_Char(136,6,0,F8X16[0]); //用空白字模擦除不需要顯示的內(nèi)容
- Disp_Char(144,6,0,SZ[tvalue/100%10]); //顯示溫度十位
- Disp_Char(152,6,0,SZ[tvalue/10%10]);
- Disp_Char(160,6,0,F8X16[14]); //小數(shù)點
- Disp_Char(168,6,0,SZ[tvalue%10]);
- Disp_Char(176,6,0,F8X16[97]); //溫度符號攝氏度的點
- Disp_Char(184,6,0,F8X16[35]); //溫度符號攝氏度的"C"
- }
- else
- {
- Disp_Char(136,6,0,SZ[tvalue/1000%10]);//溫度的負數(shù)和超過100度溫度時的顯示待處理
- Disp_Char(144,6,0,SZ[tvalue/100%10]); //顯示溫度十位
- Disp_Char(152,6,0,SZ[tvalue/10%10]);
- Disp_Char(160,6,0,F8X16[14]); //小數(shù)點
- Disp_Char(168,6,0,SZ[tvalue%10]);
- Disp_Char(176,6,0,F8X16[97]); //溫度符號攝氏度的點
- Disp_Char(184,6,0,F8X16[35]); //溫度符號攝氏度的"C"
- }
- }
- }
- }
- }
- }
- }
- /**********************************************************************************/
- /*******************************主函數(shù)************************************/
- void main()
- {
- char i=0; //將i的數(shù)據(jù)類型定義為char型,而不是unsigned char 型,在通過按鍵調(diào)節(jié)減這個變量時不會出現(xiàn)小于0時自動到255,而是停留在0不變
- uchar col,lie,cachu,kong;
- char flash=0; //反白顯示溫度調(diào)節(jié)的上下限值,在902行溫度設(shè)置部分使用此變量
- uchar j=0,k=0;//將j默認定位在6是讓調(diào)節(jié)選定用箭頭放在分鐘值上。k是鬧鐘時間值調(diào)節(jié)的位置
- bit Set_OK_Flag = 0; //設(shè)定OK標志位
- P4M1=0x0C; //將P4端口設(shè)為普通IO口
- P4M0=0x7E;
- P4SW=0x70;
- LcdInit(); //LCD初始化
- InitUART(); //串口初始化
- Init_time(30,59,10,02,14,01,20); //系統(tǒng)時間初始化
- x24C02_init(); //24c02初始化函數(shù)
- kjcs = x24C02_read(2);//把24c02的地址2讀出來的數(shù)據(jù)賦給kjcs
- delay_xms(50);
- wenduszg = x24C02_read(3); //把24c16的地址3讀出來的數(shù)據(jù)賦給wenduszg
- delay_xms(50);
- wenduszd = x24C02_read(4); //把24c16的地址4讀出來的數(shù)據(jù)賦給wenduszd
- delay_xms(50);
- NaoZhongShi = x24C02_read(5); //把24c16的地址4讀出來的數(shù)據(jù)賦給NaoZhongShi
- delay_xms(10);
- NaoZhongFen = x24C02_read(6); //把24c16的地址4讀出來的數(shù)據(jù)賦給NaoZhongFen
- delay_xms(10);
- NaoZhongMiao = x24C02_read(7); //把24c16的地址4讀出來的數(shù)據(jù)賦給NaoZhongMiao
- delay_xms(10);
- if(kjcs>9999) //限制開機次數(shù)計到9999后就歸零
- kjcs = 0;
- kjcs++; //每次開機就加1
- delay_xms(20); //延時20毫秒
- x24C02_write(2,kjcs); //在24c02中的地址2寫入數(shù)據(jù)開機次數(shù)
- ClearDisplay(); //清理一次屏幕
- DeskWall();//待機頁面 */
- while(1)
- {
- key=Scan_Key(); //獲取鍵值
- // num = Key_Get_Num();
- // Disp_Char(0,0,0,SZ[num%10]);//在右上角顯示按鍵值,用于調(diào)試
- // Disp_Char(168,0,0,SZ[key/100%10]);//在右上角顯示按鍵值,用于調(diào)試
- // Disp_Char(176,0,0,SZ[key/10%10]); //K
- // Disp_Char(184,0,0,SZ[key%10]);//在右上角顯示按鍵值,用于調(diào)試
- /**************************制冷模式的溫控*************************************************/
- if(((tvalue/10)>wenduszg)) //如果溫度高于上限值,并且在溫度設(shè)置界面時,繼電器吸合制冷,顯示“開啟”
- {
- JDQ = 0;
- }
- else
- if(((tvalue/10)<wenduszd)) //如果溫度低于下限值,并且在溫度設(shè)置界面時,繼電器釋放制冷,顯示“關(guān)閉”
- {
- JDQ = 1;
- }
- /***************************************************************************************/
-
- /**************************制熱模式的溫控************************************************/
- // if((tvalue/10)<wenduszd) //如果溫度低于下限值,繼電器吸合制熱升溫
- // {
- // JDQ = 0;
- // }
- // else
- // if((tvalue/10)>wenduszg)
- // {
- // JDQ = 1;
- // }
- /***************************************************************************************/
- if(MenuFlag1==0) //如果1級菜單退出,
- DeskWall(); //則顯示桌面
- //////////////////////////////////////////////菜單框架
- if(key==ENT)//如果待機時不斷地按ENT鍵,一級一級深入各級菜單
- {
-
- if(key==ENT&&MenuFlag1==0&&MenuFlag2==0&&MenuFlag3==0)
- {
- ClearDisplay(); //清理一次屏幕
- Beep(SHORT_JIAO,8,4);
- MenuFlag1=1;
- Set_OK_Flag = 0;
- Disp_chinese_16x16(48,i,0,leijijd[5]);//顯示“箭頭”在幾行之間移動動
- Disp_chinese_N_16x16(64,0,4,0,SJSZ); //在第一行顯示"時間設(shè)置"4個字
- Disp_chinese_N_16x16(64,2,4,0,NZSZ); //在第二行顯示"鬧鐘設(shè)置"4個字
- Disp_chinese_N_16x16(64,4,4,0,WDSZ); //在第三行顯示"溫度設(shè)置"4個字
- Disp_Char(64,6,0,ZM[6]);
- Disp_Char(72,6,0,ZM[15]);
- Disp_Char(80,6,0,ZM[18]);
- Disp_chinese_N_16x16(88,6,2,0,XX); //在第四行顯示"GPS信息"5個字
- }
- else
- {
- if(key==ENT&&MenuFlag1==1&&MenuFlag2==0&&MenuFlag3==0)
- {
- ClearDisplay(); //清理一次屏幕
- Beep(SHORT_JIAO,8,4);
- MenuFlag2=1;
- Set_OK_Flag = 0;
- j = 1;
- k = 1;
- switch(k) //通過調(diào)整k的值,對應(yīng)賦lie的值,lie就是向上箭頭位置,就是調(diào)節(jié)值的位置
- {
- case 1: { lie = 64; };break;
- case 2: { lie = 88; };break;
- case 3: { lie = 112; };break;
-
- }
- switch(j) //通過調(diào)整j的值,對應(yīng)賦col的值,col就是向上箭頭位置,就是調(diào)節(jié)值的位置
- {
- case 1: { col = 0; };break;
- case 2: { col = 32; };break;
- case 3: { col = 64; };break;
- case 4: { col = 112; };break;
- case 5: { col = 128; };break;
- case 6: { col = 152; };break;
- case 7: { col = 176; };break;
- }
- switch(i) //2級菜單要顯示的內(nèi)容決定于i的值,i值剛好在1級菜單時通過DOWM和UP鍵設(shè)定好了
- {
- case 0: { //i等于0時顯示時間設(shè)置的具體界面
- Disp_chinese_N_16x16(64,0,4,0,SJSZ); //在第一行顯示"時間設(shè)置"4個字
- Disp_chinese_16x16(col,4,0,leijijd[6]);//顯示“向上箭頭”在調(diào)節(jié)值之間切換移動
- Disp_Char(0,2,0,SZ[nian/10%10]);
- Disp_Char(8,2,0,SZ[nian%10]);
- Disp_chinese_16x16(16,2,0,NYRSFMZ[0]); //年
- Disp_Char(32,2,0,SZ[yue/10%10]);
- Disp_Char(40,2,0,SZ[yue%10]);
- Disp_chinese_16x16(48,2,0,NYRSFMZ[1]); //月
- Disp_Char(64,2,0,SZ[ri/10%10]);
- Disp_Char(72,2,0,SZ[ri%10]);
- Disp_chinese_16x16(80,2,0,NYRSFMZ[2]); //日
- Disp_chinese_16x16(96,2,0,NYRSFMZ[6]); //周
- Disp_chinese_16x16(112,2,0,DaXieShuZi[xingqi]);
- Disp_Char(128,2,0,SZ[shi/10%10]);
- Disp_Char(136,2,0,SZ[shi%10]);
- Disp_Char(144,2,0,FH[0]); //冒號
- Disp_Char(152,2,0,SZ[fen/10%10]);
- Disp_Char(160,2,0,SZ[fen%10]);
- Disp_Char(168,2,0,FH[0]); //冒號
- Disp_Char(176,2,0,SZ[miao/10%10]);
- Disp_Char(184,2,0,SZ[miao%10]);
- }; break;
- case 2: { //i等于2時顯示鬧鐘設(shè)置的具體界面
- Disp_chinese_N_16x16(64,0,4,0,NZSZ); //在第1行顯示"鬧鐘設(shè)置"4個字
- Disp_chinese_16x16(lie,4,0,leijijd[6]);//顯示“向上箭頭”在調(diào)節(jié)值之間切換移動
- Disp_Char(64,2,0,SZ[NaoZhongShi/10%10]);
- Disp_Char(72,2,0,SZ[NaoZhongShi%10]);
- Disp_Char(80,2,0,FH[0]); //冒號
- Disp_Char(88,2,0,SZ[NaoZhongFen/10%10]);
- Disp_Char(96,2,0,SZ[NaoZhongFen%10]);
- Disp_Char(104,2,0,FH[0]); //冒號
- Disp_Char(112,2,0,SZ[NaoZhongMiao/10%10]);
- Disp_Char(120,2,0,SZ[NaoZhongMiao%10]);
- }; break;
- case 4: { //i等于4時顯示溫度設(shè)置的具體界面
- Disp_chinese_N_16x16(64,0,4,0,WDSZ);//正中1行顯示"溫度設(shè)置"四個字
-
- Disp_chinese_16x16(0,2,0,gao);//"高"
- Disp_chinese_16x16(16,2,0,yu);//"于"
- Disp_Char(32,2,0,FH[0]);//":"
- if(wenduszg<100) //低于100時百位顯示空白
- {
- Disp_Char(40,2,0,F8X16[0]);//"wenduszg"百位位置顯示空白
- Disp_Char(48,2,0,SZ[wenduszg/10%10]);//"wenduszg"溫度設(shè)置高
- Disp_Char(56,2,0,SZ[wenduszg%10]);
- }
- else
- {
- Disp_Char(40,2,0,SZ[wenduszg/100%10]);//"wenduszg"溫度設(shè)置高
- Disp_Char(48,2,0,SZ[wenduszg/10%10]);//"wenduszg"溫度設(shè)置高
- Disp_Char(56,2,0,SZ[wenduszg%10]);
- }
- // Disp_Char(40,2,0,SZ[wenduszg/100%10]);//"wenduszg"溫度設(shè)置高
- // Disp_Char(48,2,0,SZ[wenduszg/10%10]);
- // Disp_Char(56,2,0,SZ[wenduszg%10]);
- Disp_Char(64,2,0,F8X16[97]); //溫度符號攝氏度的點
- Disp_Char(72,2,0,F8X16[35]); //溫度符號攝氏度的"C"
- Disp_chinese_16x16(80,2,0,kai);//"開"
- Disp_chinese_16x16(96,2,0,qi);//"啟"
-
- Disp_chinese_16x16(0,6,0,di);//"低"
- Disp_chinese_16x16(16,6,0,yu);//"于"
- Disp_Char(32,6,0,FH[0]);//":"
- if(wenduszd<100)
- {
- Disp_Char(40,6,0,F8X16[0]);//"wenduszd"百位位置顯示空白
- Disp_Char(48,6,0,SZ[wenduszd/10%10]);//"wenduszd"溫度設(shè)置低
- Disp_Char(56,6,0,SZ[wenduszd%10]);
- }
- else
- {
- Disp_Char(40,6,0,SZ[wenduszd/100%10]);//"wenduszd"溫度設(shè)置低
- Disp_Char(48,6,0,SZ[wenduszd/10%10]);//"wenduszd"溫度設(shè)置低
- Disp_Char(56,6,0,SZ[wenduszd%10]);
- }
- // Disp_Char(40,6,0,SZ[wenduszd/100%10]);//"wenduszd"溫度設(shè)置低
- // Disp_Char(48,6,0,SZ[wenduszd/10%10]);//"wenduszd"溫度設(shè)置低
- // Disp_Char(56,6,0,SZ[wenduszd%10]);
- Disp_Char(64,6,0,F8X16[97]); //溫度符號攝氏度的點
- Disp_Char(72,6,0,F8X16[35]); //溫度符號攝氏度的"C"
- Disp_chinese_16x16(80,6,0,guan);//"關(guān)"
- Disp_chinese_16x16(96,6,0,bi);//"閉"
- if(JDQ==0)
- {
- Disp_chinese_16x16(160,4,1,kai);//"開"
- Disp_chinese_16x16(176,4,1,qi);//"啟"
- }
- else
- {
- Disp_chinese_16x16(160,4,1,guan);//"關(guān)"
- Disp_chinese_16x16(176,4,1,bi);//"閉"
- }
- }; break;
- case 6: { //i等于6時顯示GPS信息的具體界面
- Disp_Char(64,0,0,ZM[6]);
- Disp_Char(72,0,0,ZM[15]);
- Disp_Char(80,0,0,ZM[18]);
- Disp_chinese_N_16x16(88,0,2,0,XX);
- }; break;
- default:{;};break;
- }
- }
- else
- {
- if(key==ENT&&MenuFlag1==1&&MenuFlag2==1&&MenuFlag3==0) //如果進入了2級菜單還在按ENT鍵,就進入第三級菜單
- {
- ClearDisplay(); //清理一次屏幕
- Beep(SHORT_JIAO,8,4);
- MenuFlag3=1;
- Set_OK_Flag = 0;
- }
- else
- {
- if(key==ENT&&MenuFlag1==1&&MenuFlag2==1&&MenuFlag3==1)
- {
- Beep(LONG_JIAO,2,1);//如果打開到第三級到底了,還按ENT鍵的話就長叫提示到底不能再按
- }
- }
- }
- }
- }
-
- if(key==DOWN&&MenuFlag1==1&&MenuFlag2==0&&MenuFlag3==0) //如果進入1級菜單時按DOWN鍵
- {
- i+=2;
- if(i>6)
- i=0;
- if((i-2)<0)
- Disp_chinese_16x16(48,6,0,leijijd[7]);//當i-2小于0時,不能負數(shù),此處完美解決
- // ClearDisplay(); //清理一次屏幕
- Beep(SHORT_JIAO,5,5);
- Disp_chinese_16x16(48,i-2,0,leijijd[7]);//把上次的箭頭擦除
- Disp_chinese_16x16(48,i,0,leijijd[5]);//顯示“箭頭”在幾行之間移動動
- Disp_chinese_N_16x16(64,0,4,0,SJSZ); //在第一行顯示時間設(shè)置4個字
- Disp_chinese_N_16x16(64,2,4,0,NZSZ); //在第二行顯示"鬧鐘設(shè)置"4個字
- Disp_chinese_N_16x16(64,4,4,0,WDSZ); //在第三行顯示"溫度設(shè)置"4個字
- Disp_Char(64,6,0,ZM[6]);
- Disp_Char(72,6,0,ZM[15]);
- Disp_Char(80,6,0,ZM[18]);
- Disp_chinese_N_16x16(88,6,2,0,XX); //在第四行顯示"GPS信息"5個字
- }
-
- if(key==UP&&MenuFlag1==1&&MenuFlag2==0&&MenuFlag3==0)//如果進入1級菜單時按UP鍵
- {
- i-=2;
- if((i-2)<0)
- Disp_chinese_16x16(48,0,0,leijijd[7]);//當i-2小于0時,不能負數(shù),此處完美解決
- if(i<0)
- i=6;
- // ClearDisplay(); //清理一次屏幕
- Beep(SHORT_JIAO,5,5);
- Disp_chinese_16x16(48,i+2,0,leijijd[7]);//把上次的箭頭擦除
- Disp_chinese_16x16(48,i,0,leijijd[5]);//顯示“箭頭”在幾行之間移動動
- Disp_chinese_N_16x16(64,0,4,0,SJSZ); //在第一行顯示時間設(shè)置4個字
- Disp_chinese_N_16x16(64,2,4,0,NZSZ); //在第二行顯示"鬧鐘設(shè)置"4個字
- Disp_chinese_N_16x16(64,4,4,0,WDSZ); //在第三行顯示"溫度設(shè)置"4個字
- Disp_Char(64,6,0,ZM[6]);
- Disp_Char(72,6,0,ZM[15]);
- Disp_Char(80,6,0,ZM[18]);
- Disp_chinese_N_16x16(88,6,2,0,XX); //在第四行顯示"GPS信息"5個字
- }
- if(key==ESC) //如果待機時不斷地按ESC鍵,一級一級退出各級菜單,直到桌面
- {
-
- if(key==ESC&&MenuFlag1==1&&MenuFlag2==1&&MenuFlag3==1) //如果第3級菜單打開時按ESC鍵,則退出3級菜單
- {
- ClearDisplay(); //清理一次屏幕
- Beep(SHORT_JIAO,8,4);
- MenuFlag3=0;
- Set_OK_Flag = 0;
- switch(k) //通過調(diào)整k的值,對應(yīng)賦lie的值,lie就是向上箭頭位置,就是調(diào)節(jié)值的位置
- {
- case 1: { lie = 64; };break;
- case 2: { lie = 88; };break;
- case 3: { lie = 112; };break;
-
- }
- switch(j) //通過調(diào)整j的值,對應(yīng)賦col的值,col就是向上箭頭位置,就是調(diào)節(jié)值的位置
- {
- case 1: { col = 0; };break;
- case 2: { col = 32; };break;
- case 3: { col = 64; };break;
- case 4: { col = 112; };break;
- case 5: { col = 128; };break;
- case 6: { col = 152; };break;
- case 7: { col = 176; };break;
- }
- switch(i) //2級菜單要顯示的內(nèi)容決定于i的值,i值剛好在1級菜單時通過DOWM和UP鍵設(shè)定好了
- {
- case 0: { //i等于0時顯示時間設(shè)置的具體界面
- Disp_chinese_N_16x16(64,0,4,0,SJSZ); //在第一行顯示"時間設(shè)置"4個字
- Disp_chinese_16x16(col,4,0,leijijd[6]);//顯示“向上箭頭”在調(diào)節(jié)值之間切換移動
- Disp_Char(0,2,0,SZ[nian/10%10]);
- Disp_Char(8,2,0,SZ[nian%10]);
- Disp_chinese_16x16(16,2,0,NYRSFMZ[0]); //年
- Disp_Char(32,2,0,SZ[yue/10%10]);
- Disp_Char(40,2,0,SZ[yue%10]);
- Disp_chinese_16x16(48,2,0,NYRSFMZ[1]); //月
- Disp_Char(64,2,0,SZ[ri/10%10]);
- Disp_Char(72,2,0,SZ[ri%10]);
- Disp_chinese_16x16(80,2,0,NYRSFMZ[2]); //日
- Disp_chinese_16x16(96,2,0,NYRSFMZ[6]); //周
- Disp_chinese_16x16(112,2,0,DaXieShuZi[xingqi]);
- Disp_Char(128,2,0,SZ[shi/10%10]);
- Disp_Char(136,2,0,SZ[shi%10]);
- Disp_Char(144,2,0,FH[0]); //冒號
- Disp_Char(152,2,0,SZ[fen/10%10]);
- Disp_Char(160,2,0,SZ[fen%10]);
- Disp_Char(168,2,0,FH[0]); //冒號
- Disp_Char(176,2,0,SZ[miao/10%10]);
- Disp_Char(184,2,0,SZ[miao%10]);
- }; break;
- case 2: { //i等于2時顯示鬧鐘設(shè)置的具體界面
- Disp_chinese_N_16x16(64,0,4,0,NZSZ); //在第1行顯示"鬧鐘設(shè)置"4個字
- Disp_chinese_16x16(lie,4,0,leijijd[6]);//顯示“向上箭頭”在調(diào)節(jié)值之間切換移動
- Disp_Char(64,2,0,SZ[NaoZhongShi/10%10]);
- Disp_Char(72,2,0,SZ[NaoZhongShi%10]);
- Disp_Char(80,2,0,FH[0]); //冒號
- Disp_Char(88,2,0,SZ[NaoZhongFen/10%10]);
- Disp_Char(96,2,0,SZ[NaoZhongFen%10]);
- Disp_Char(104,2,0,FH[0]); //冒號
- Disp_Char(112,2,0,SZ[NaoZhongMiao/10%10]);
- Disp_Char(120,2,0,SZ[NaoZhongMiao%10]);
- }; break;
- case 4: { //i等于4時顯示溫度設(shè)置的具體界面
- Disp_chinese_N_16x16(64,0,4,0,WDSZ);//正中1行顯示"溫度設(shè)置"四個字
-
- Disp_chinese_16x16(0,2,0,gao);//"高"
- Disp_chinese_16x16(16,2,0,yu);//"于"
- Disp_Char(32,2,0,FH[0]);//":"
- if(wenduszg<100) //低于100時百位顯示空白
- {
- Disp_Char(40,2,0,F8X16[0]);//"wenduszg"百位位置顯示空白
- Disp_Char(48,2,0,SZ[wenduszg/10%10]);//"wenduszg"溫度設(shè)置高
- Disp_Char(56,2,0,SZ[wenduszg%10]);
- }
- else
- {
- Disp_Char(40,2,0,SZ[wenduszg/100%10]);//"wenduszg"溫度設(shè)置高
- Disp_Char(48,2,0,SZ[wenduszg/10%10]);//"wenduszg"溫度設(shè)置高
- Disp_Char(56,2,0,SZ[wenduszg%10]);
- }
- // Disp_Char(40,2,0,SZ[wenduszg/100%10]);//"wenduszg"溫度設(shè)置高
- // Disp_Char(48,2,0,SZ[wenduszg/10%10]);
- // Disp_Char(56,2,0,SZ[wenduszg%10]);
- Disp_Char(64,2,0,F8X16[97]); //溫度符號攝氏度的點
- Disp_Char(72,2,0,F8X16[35]); //溫度符號攝氏度的"C"
- Disp_chinese_16x16(80,2,0,kai);//"開"
- Disp_chinese_16x16(96,2,0,qi);//"啟"
-
- Disp_chinese_16x16(0,6,0,di);//"低"
- Disp_chinese_16x16(16,6,0,yu);//"于"
- Disp_Char(32,6,0,FH[0]);//":"
- if(wenduszd<100)
- {
- Disp_Char(40,6,0,F8X16[0]);//"wenduszd"百位位置顯示空白
- Disp_Char(48,6,0,SZ[wenduszd/10%10]);//"wenduszd"溫度設(shè)置低
- Disp_Char(56,6,0,SZ[wenduszd%10]);
- }
- else
- {
- Disp_Char(40,6,0,SZ[wenduszd/100%10]);//"wenduszd"溫度設(shè)置低
- Disp_Char(48,6,0,SZ[wenduszd/10%10]);//"wenduszd"溫度設(shè)置低
- Disp_Char(56,6,0,SZ[wenduszd%10]);
- }
- // Disp_Char(40,6,0,SZ[wenduszd/100%10]);//"wenduszd"溫度設(shè)置低
- // Disp_Char(48,6,0,SZ[wenduszd/10%10]);
- // Disp_Char(56,6,0,SZ[wenduszd%10]);
- Disp_Char(64,6,0,F8X16[97]); //溫度符號攝氏度的點
- Disp_Char(72,6,0,F8X16[35]); //溫度符號攝氏度的"C"
- Disp_chinese_16x16(80,6,0,guan);//"關(guān)"
- Disp_chinese_16x16(96,6,0,bi);//"閉"
- if(JDQ==0)
- {
- Disp_chinese_16x16(160,4,1,kai);//"開"
- Disp_chinese_16x16(176,4,1,qi);//"啟"
- }
- else
- {
- Disp_chinese_16x16(160,4,1,guan);//"關(guān)"
- Disp_chinese_16x16(176,4,1,bi);//"閉"
- }
- }; break;
- case 6: { //i等于6時顯示GPS信息的具體界面
- Disp_Char(64,0,0,ZM[6]);
- Disp_Char(72,0,0,ZM[15]);
- Disp_Char(80,0,0,ZM[18]);
- Disp_chinese_N_16x16(88,0,2,0,XX);
- }; break;
- default:{;};break;
- }
- }
- else
- {
- if(key==ESC&&MenuFlag1==1&&MenuFlag2==1&&MenuFlag3==0) //如果退出到2級菜單還按ESC鍵,則進入1級菜單
- {
- ClearDisplay(); //清理一次屏幕
- Beep(SHORT_JIAO,8,4);
- MenuFlag2=0;
- Set_OK_Flag = 0;
- Disp_chinese_16x16(48,i,0,leijijd[5]);//顯示“箭頭”在幾行之間移動動
- Disp_chinese_N_16x16(64,0,4,0,SJSZ); //在第一行顯示時間設(shè)置4個字
- Disp_chinese_N_16x16(64,2,4,0,NZSZ); //在第二行顯示"鬧鐘設(shè)置"4個字
- Disp_chinese_N_16x16(64,4,4,0,WDSZ); //在第三行顯示"溫度設(shè)置"4個字
- Disp_Char(64,6,0,ZM[6]);
- Disp_Char(72,6,0,ZM[15]);
- Disp_Char(80,6,0,ZM[18]);
- Disp_chinese_N_16x16(88,6,2,0,XX); //在第四行顯示"GPS信息"5個字
- }
- else
- {
- if(key==ESC&&MenuFlag1==1&&MenuFlag2==0&&MenuFlag3==0) //如果退出到1級菜單還按ESC鍵,則進入桌面待機頁面
- {
- ClearDisplay(); //清理一次屏幕
- Beep(SHORT_JIAO,8,4);
- MenuFlag1=0;
- Set_OK_Flag = 0;
- DeskWall();//最后回到待機頁面 */
- }
- else
- {
- if(key==ESC&&MenuFlag1==0&&MenuFlag2==0&&MenuFlag3==0) //如果退出到桌面還按ESC鍵,告警音提示
- {
- Beep(LONG_JIAO,2,1);//如果關(guān)閉桌面到底了,還按ESC鍵的話就長叫提示到底不能再按
- }
- }
- }
- }
- }
-
-
- if(key==RIGHT&&i==0&&MenuFlag1==1&&MenuFlag2==1&&MenuFlag3==0) //如果第3級菜單打開時并且是在時間設(shè)置界面時按RIGHT鍵,
- {
- // ClearDisplay(); //清理一次屏幕
- Set_OK_Flag = 0; //
- Beep(SHORT_JIAO,8,4);
- j+=1;
- if(j>7)
- {
- j=1;
- }
-
- switch(j) //通過調(diào)整j的值,對應(yīng)賦col的值,col就是向上箭頭位置,就是調(diào)節(jié)值的位置
- {
- case 1: { col = 0; };break;
- case 2: { col = 32; };break;
- case 3: { col = 64; };break;
- case 4: { col = 112; };break;
- case 5: { col = 128; };break;
- case 6: { col = 152; };break;
- case 7: { col = 176; };break;
- }
- switch(j-1) //不同的J-1讓不同的擦除空格換位置
- {
- case 1: { cachu = 0; };break;
- case 2: { cachu = 32; };break;
- case 3: { cachu = 64; };break;
- case 4: { cachu = 112; };break;
- case 5: { cachu = 128; };break;
- case 6: { cachu = 152; };break;
- case 7: { cachu = 176; };break;
- default:{ Disp_chinese_16x16(176,4,0,leijijd[7]);};break; //此處就是j-1=0時就讓空白格停在秒值下
- }
- //i等于0時顯示時間設(shè)置的具體界面
- Disp_chinese_16x16(cachu,4,0,leijijd[7]);//把上次顯示的向上箭頭通過空白替換,起到擦除的效果,目的是避免每按鍵一次要清全屏的閃爍缺點
- Disp_chinese_16x16(col,4,0,leijijd[6]);//顯示“向上箭頭”在調(diào)節(jié)值之間切換移動
- Disp_Char(0,2,0,SZ[nian/10%10]);
- Disp_Char(8,2,0,SZ[nian%10]);
- Disp_chinese_16x16(16,2,0,NYRSFMZ[0]); //年
- Disp_Char(32,2,0,SZ[yue/10%10]);
- Disp_Char(40,2,0,SZ[yue%10]);
- Disp_chinese_16x16(48,2,0,NYRSFMZ[1]); //月
- Disp_Char(64,2,0,SZ[ri/10%10]);
- Disp_Char(72,2,0,SZ[ri%10]);
- Disp_chinese_16x16(80,2,0,NYRSFMZ[2]); //日
- Disp_chinese_16x16(96,2,0,NYRSFMZ[6]); //周
- Disp_chinese_16x16(112,2,0,DaXieShuZi[xingqi]);
- Disp_Char(128,2,0,SZ[shi/10%10]);
- Disp_Char(136,2,0,SZ[shi%10]);
- Disp_Char(144,2,0,FH[0]); //冒號
- Disp_Char(152,2,0,SZ[fen/10%10]);
- Disp_Char(160,2,0,SZ[fen%10]);
- Disp_Char(168,2,0,FH[0]); //冒號
- Disp_Char(176,2,0,SZ[miao/10%10]);
- Disp_Char(184,2,0,SZ[miao%10]);
- }
-
- if(key==LEFT&&i==0&&MenuFlag1==1&&MenuFlag2==1&&MenuFlag3==0) //如果第3級菜單打開時并且是在時間設(shè)置界面時按LEFT鍵,
- {
- // ClearDisplay(); //清理一次屏幕
- Set_OK_Flag = 0;
- Beep(SHORT_JIAO,8,4);
- j-=1;
- if(j<1)
- j=7;
- switch(j) //通過調(diào)整j的值,對應(yīng)賦col的值,col就是向上箭頭位置,就是調(diào)節(jié)值的位置
- {
- case 1: { col = 0; };break;
- case 2: { col = 32; };break;
- case 3: { col = 64; };break;
- case 4: { col = 112; };break;
- case 5: { col = 128; };break;
- case 6: { col = 152; };break;
- case 7: { col = 176; };break;
- }
- switch(j+1) //不同的J+1讓不同的擦除空格換位置,模擬擦除效果
- {
- case 1: { cachu = 0; };break;
- case 2: { cachu = 32; };break;
- case 3: { cachu = 64; };break;
- case 4: { cachu = 112; };break;
- case 5: { cachu = 128; };break;
- case 6: { cachu = 152; };break;
- case 7: { cachu = 176; };break;
- default:{ Disp_chinese_16x16(0,4,0,leijijd[7]);};break; //此處就是j+1=8時就讓空白格停在年值下
- }
- //i等于0時顯示時間設(shè)置的具體界面
- Disp_chinese_16x16(cachu,4,0,leijijd[7]);//把上次顯示的向上箭頭通過空白替換起到擦除的效果
- Disp_chinese_16x16(col,4,0,leijijd[6]);//顯示“向上箭頭”在調(diào)節(jié)值之間切換移動
- Disp_Char(0,2,0,SZ[nian/10%10]);
- Disp_Char(8,2,0,SZ[nian%10]);
- Disp_chinese_16x16(16,2,0,NYRSFMZ[0]); //年
- Disp_Char(32,2,0,SZ[yue/10%10]);
- Disp_Char(40,2,0,SZ[yue%10]);
- Disp_chinese_16x16(48,2,0,NYRSFMZ[1]); //月
- Disp_Char(64,2,0,SZ[ri/10%10]);
- Disp_Char(72,2,0,SZ[ri%10]);
- Disp_chinese_16x16(80,2,0,NYRSFMZ[2]); //日
- Disp_chinese_16x16(96,2,0,NYRSFMZ[6]); //周
- Disp_chinese_16x16(112,2,0,DaXieShuZi[xingqi]);
- Disp_Char(128,2,0,SZ[shi/10%10]);
- Disp_Char(136,2,0,SZ[shi%10]);
- Disp_Char(144,2,0,FH[0]); //冒號
- Disp_Char(152,2,0,SZ[fen/10%10]);
- Disp_Char(160,2,0,SZ[fen%10]);
- Disp_Char(168,2,0,FH[0]); //冒號
- Disp_Char(176,2,0,SZ[miao/10%10]);
- Disp_Char(184,2,0,SZ[miao%10]);
- }
-
- /*******************************時間設(shè)置之調(diào)整年值*****************************************/
- if(key==UP&&i==0&&j==1&&MenuFlag1==1&&MenuFlag2==1&&MenuFlag3==0)//調(diào)整年+
- { //i=0,限定是在時間設(shè)置模式,j=1限定在時間設(shè)置模式的年值設(shè)置,MenuFlag1、2、3 分別=1、1、0鎖定在二級菜單
- nian+=1;
- if(nian>99)
- nian=20;
- Beep(SHORT_JIAO,8,4);
- Disp_Char(0,2,0,SZ[nian/10%10]);
- Disp_Char(8,2,0,SZ[nian%10]);
- Set_OK_Flag = 0;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
LCD菜單程序大數(shù)字電子鐘(三級菜單,參數(shù)設(shè)置保存、溫度控制器,).zip
(312.96 KB, 下載次數(shù): 348)
2020-6-30 23:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|