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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3572|回復: 1
打印 上一主題 下一主題
收起左側

STC15單片機LCD12864多級菜單可以自己添加的,親測

[復制鏈接]
跳轉到指定樓層
樓主
STC15  12864多級菜單可以自己添加的,親測。

單片機源程序如下:
  1. #include "lcd12864.h"
  2. #include "key.h"
  3. #include "menu.h"
  4. #include "delay.h"       

  5. static const unsigned char FunctionMiMa[] = "123456";
  6. static const unsigned char SuperMiMa[] = "111111";

  7. static PT_Menu g_pt_MenuHead = NULL;
  8. static PT_Menu g_pt_CurrentMenu = NULL;

  9. static int StrCmp(char *Source, char *Dist)
  10. {
  11.         int i =0;
  12.         if(Source == NULL || Dist == NULL)
  13.                 return -1;
  14.         while(1){
  15.                 if (Source[i] != Dist[i]){
  16.                         break;
  17.                 }
  18.                 if(Source[i] == '\0')
  19.                         return 0;
  20.                 i++;
  21.         }

  22.         return 1;
  23. }
  24. static void RegisterPage(PT_Menu pt_Menu)
  25. {
  26.         PT_Menu pt_Temp;
  27.        
  28.         pt_Menu->pt_Next = NULL;
  29.         if(g_pt_MenuHead == NULL){
  30.                 g_pt_MenuHead = pt_Menu;
  31.         }
  32.         else{
  33.                 pt_Temp = g_pt_MenuHead;
  34.                
  35.                 while(pt_Temp->pt_Next != NULL){
  36.                         pt_Temp = pt_Temp->pt_Next;
  37.                 }
  38.                
  39.                 pt_Temp->pt_Next = pt_Menu;
  40.         }
  41. }

  42. static PT_Menu GetMenu(char *pc_name)
  43. {
  44.         PT_Menu pt_Temp;
  45.         pt_Temp = g_pt_MenuHead;
  46.         while(pt_Temp){
  47.                 if(StrCmp(pt_Temp->name,pc_name) == 0){
  48.                         return pt_Temp;
  49.                 }
  50.                 else{
  51.                         pt_Temp = pt_Temp->pt_Next;
  52.                 }
  53.         }
  54.         return NULL;
  55. }

  56. PT_Menu GetCurrentMenu(void)
  57. {
  58.         return g_pt_CurrentMenu;
  59. }

  60. void SetCurrentMenu(PT_Menu pt_Menu)
  61. {
  62.         g_pt_CurrentMenu = pt_Menu;
  63. }

  64. static unsigned char Verify(unsigned char *CheckMiMa){
  65.         char MiMa[7];
  66.         unsigned char Key = 20;
  67.         char i=0;LCD_Clear();
  68.         LCD_ShowString(1,1,12,"請輸入密碼: ");     //????????LCD12864?????

  69.         for(i=0; i<6; i++){
  70.                 delay_ms(1000);
  71.                 do{
  72.                         Key = Key_Service();
  73.                 }while(10 <= Key);
  74.                 LCD_ShowString(2,i,1,"X");
  75.                 MiMa[i] = Key + '0';
  76.         }
  77.         MiMa[i] = '\0';
  78.         if(StrCmp(MiMa, CheckMiMa) == 0)
  79.                 return 1;
  80.         return 0;
  81. }

  82. static void DrawMainMenu(void)
  83. {
  84.         LCD_Clear();
  85.         LCD_ShowString(1,0,16,"XXXXXXXXXXXXXXXX");     //????????LCD12864?????
  86.         LCD_ShowString(2,6,4,"正\xfd常\xfd");
  87.         LCD_ShowString(3,4,8," DC1:OUT");
  88.         LCD_ShowString(4,0,4,"0591");
  89.         LCD_ShowString(4,3,4,"自動");
  90.         LCD_ShowString(4,5,6,"DC2:IN");
  91. }

  92. static PT_Menu MainMenuRun(void)
  93. {
  94.         unsigned char Key = 20;
  95.         while(1){
  96.                 do{
  97.                         Key = Key_Service();
  98.                 }while(20 == Key);
  99.                 if(11 == Key){
  100.                         delay_ms(3000);
  101.                         Key = Key_Service();
  102.                         if(11 == Key){
  103.                                 if(Verify(FunctionMiMa))
  104.                                         return GetMenu("Function");
  105.                         }
  106.                 }
  107.         }
  108.         return NULL;
  109. }

  110. static T_Menu MainMenu = {"Main", MainMenuRun, DrawMainMenu};

  111. static void DrawFunctionMenu(void)
  112. {
  113.         LCD_Clear();
  114.         LCD_ShowString(1,0,2,"1 ");
  115.         LCD_ShowString(1,1,8,"?時間設置");
  116.         LCD_ShowString(2,0,2,"2 ");
  117.         LCD_ShowString(2,1,8,"背光設置");
  118.         LCD_ShowString(3,0,2,"3 ");
  119.         LCD_ShowString(3,1,8,"自動定時");
  120.         LCD_ShowString(4,0,2,"4 ");
  121.         LCD_ShowString(4,1,8,"查詢功能");
  122. }

  123. static PT_Menu FunctionMenuRun(void)
  124. {
  125.         unsigned char Flag = 0;
  126.         unsigned char Key = 20;
  127.         while(1){
  128.                 do{
  129.                         Key = Key_Service();
  130.                 }while(20 == Key);
  131.                 switch(Key){
  132.                         case 1:
  133.                                 //SetTime
  134.                                 break;
  135.                         case 2:
  136.                                 //SetBlack
  137.                                 break;
  138.                         case 3:
  139.                                 //AutoTime
  140.                                 break;
  141.                         case 4:
  142.                                 return GetMenu("Query");
  143.                         case 9:
  144.                                 if(Flag){
  145.                                         if(Verify(SuperMiMa))
  146.                                                 return GetMenu("SuperFunction");
  147.                                         Flag = 0;
  148.                                         DrawFunctionMenu();
  149.                                 }else
  150.                                   Flag = 1;
  151.                                 break;
  152.                         case 13:
  153.                                 return GetMenu("Main");
  154.                         default:
  155.                                 Flag = 0;
  156.                                 break;
  157.                 }
  158.                
  159.         }
  160.         return NULL;
  161. }

  162. static T_Menu FunctionMenu = {"Function", FunctionMenuRun, DrawFunctionMenu};

  163. static void DrawQueryMenu(void)
  164. {
  165.         LCD_Clear();
  166.         LCD_ShowString(1,0,2,"1 ");
  167.         LCD_ShowString(1,1,8,"查詢電池");
  168.         LCD_ShowString(1,5,2,"IN");
  169.         LCD_ShowString(1,6,4,"時長");
  170.         LCD_ShowString(2,0,2,"2 ");
  171.         LCD_ShowString(2,1,8,"查詢電池");
  172.         LCD_ShowString(2,5,4,"OUT ");
  173.         LCD_ShowString(3,0,4,"時長");
  174.        
  175. }

  176. static PT_Menu QueryMenuRun(void)
  177. {
  178.         unsigned char Key = 20;
  179.         while(1){
  180.                 do{
  181.                         Key = Key_Service();
  182.                 }while(20 == Key);
  183.                 switch(Key){
  184.                         case 1:
  185.                                 //IN
  186.                                 break;
  187.                         case 2:
  188.                                 //OUT
  189.                                 break;
  190.                         case 13:
  191.                                 return GetMenu("Function");
  192.                         default:
  193.                                 break;
  194.                 }
  195.                
  196.         }
  197.         return NULL;
  198. }

  199. static T_Menu QueryMenu = {"Query", QueryMenuRun, DrawQueryMenu};

  200. static void DrawSuperFunctionMenu(void)
  201. {
  202.         LCD_Clear();
  203.         LCD_ShowString(1,0,2,"1 ");
  204.         LCD_ShowString(1,1,10,"區域碼設置");
  205.        
  206.         LCD_ShowString(2,0,2,"2");
  207.         LCD_ShowString(2,2,8,"權限設置");
  208.        
  209.         LCD_ShowString(3,0,2,"3 ");
  210.         LCD_ShowString(3,1,4,"預置");
  211.         LCD_ShowString(3,3,4,"OUT ");
  212.         LCD_ShowString(3,5,6,"時長判斷");
  213.         LCD_ShowString(4,0,2,"4 ");
  214.         LCD_ShowString(4,1,12,"查詢高級功能");
  215. }

  216. static PT_Menu SuperFunctionMenuRun(void)
  217. {
  218.         unsigned char Key = 20;
  219.         while(1){
  220.                 do{
  221.                         Key = Key_Service();
  222.                 }while(20 == Key);
  223.                 switch(Key){
  224.                         case 1:
  225.                                 //區域碼設置
  226.                                 break;
  227.                         case 2:
  228.                                 //權限設置
  229.                                 break;
  230.                         case 3:
  231.                                 ///預置OUT時長判定
  232.                                 break;
  233.                         case 4:
  234.                                 return GetMenu("SuperQuery");
  235.                         case 13:
  236.                                 return GetMenu("Function");
  237.                         default:
  238.                                 break;
  239.                 }
  240.                
  241.         }
  242.         return NULL;
  243. }

  244. static T_Menu SuperFunctionMenu = { "SuperFunction", SuperFunctionMenuRun, DrawSuperFunctionMenu};

  245. static void DrawSuperQueryMenu(void)
  246. {
  247.         LCD_Clear();
  248.         LCD_ShowString(1,0,2,"1 ");
  249.         LCD_ShowString(1,1,10,"查詢電池");
  250.         LCD_ShowString(1,5,2,"IN");
  251.         LCD_ShowString(1,6,4,"時長");
  252.        
  253.         LCD_ShowString(2,0,2,"2 ");
  254.         LCD_ShowString(2,1,10,"查詢電池");
  255.         LCD_ShowString(2,5,4,"OUT ");
  256.         LCD_ShowString(2,7,4,"時長");
  257.        
  258.         LCD_ShowString(3,0,2,"3 ");
  259.         LCD_ShowString(3,1,8,"查詢電池");
  260.         LCD_ShowString(3,5,2,"IN");
  261.         LCD_ShowString(3,6,4,"次數\xfd");
  262. }

  263. static PT_Menu SuperQueryMenuRun(void)
  264. {
  265.         unsigned char Key = 20;
  266.         while(1){
  267.                 do{
  268.                         Key = Key_Service();
  269.                 }while(20 == Key);
  270.                 switch(Key){
  271.                         case 1:
  272.                                 //查詢電池IN時長
  273.                                 break;
  274.                         case 2:
  275.                                 //查詢電池OUT時長
  276.                                 break;
  277.                         case 3:
  278.                                 ///查詢電池IN次數
  279.                                 break;
  280.                         case 13:
  281.                                 return GetMenu("SuperFunction");
  282.                         default:
  283.                                 break;
  284.                 }
  285.                
  286.         }
  287.         return NULL;
  288. }

  289. static T_Menu SuperQueryMenu = { "SuperQuery", SuperQueryMenuRun, DrawSuperQueryMenu};

  290. void MenuInit(void)
  291. {
  292.         RegisterPage(&MainMenu);
  293.         RegisterPage(&FunctionMenu);
  294.         RegisterPage(&QueryMenu);
  295.         RegisterPage(&SuperFunctionMenu);
  296.         RegisterPage(&SuperQueryMenu);
  297.   SetCurrentMenu(GetMenu("Main"));
  298. }
復制代碼


所有資料51hei提供下載:
多級菜單.rar (2.25 KB, 下載次數: 97)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:299626 發表于 2021-5-26 00:06 | 只看該作者
可以共享完整工程嗎,屏驅動和按鍵驅動沒有
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天玩夜夜操 | 午夜精品久久久久久不卡欧美一级 | 久久精品亚洲欧美日韩久久 | 亚洲一区二区三区视频 | 在线免费av观看 | 精品中文在线 | 欧美综合网 | 日韩a视频| 久久成人国产 | 日韩福利一区 | 男人天堂999 | 色婷婷av99xx| 黄色精品视频网站 | 亚洲网一区 | 欧美日韩免费一区二区三区 | 国产精品一区二区在线 | 国产一区二区在线免费播放 | 亚洲视频在线一区 | 国产成人一区二区三区 | 日日夜夜免费精品视频 | 99久久婷婷国产综合精品电影 | 国产在视频一区二区三区吞精 | 在线视频一区二区 | 国产精品久久国产精品久久 | 一道本视频 | 91精品国产日韩91久久久久久 | 四虎成人精品永久免费av九九 | 日韩美女爱爱 | 涩涩视频大全 | 国产精品一区一区 | 国产精品久久久久久久久久三级 | 国产在线精品免费 | 毛片毛片毛片毛片毛片 | h视频在线观看免费 | 免费簧片视频 | 91一区二区在线观看 | 国产一区二区三区久久 | 天天搞天天搞 | 天天看天天摸天天操 | 欧美色影院 | 亚洲成人一区二区三区 |