找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

用89C51单片机控制LCD1602显示多级菜单,使用汇编实现,求思路

查看数: 4247 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-5-24 21:42

正文摘要:

用89C51单片机控制LCD1602显示多级菜单,使用汇编实现,求思路 LCD1602实现多级菜单,滚动显示菜单选项,二级菜单就可以了, 按键控制确认或返回,有没有大佬给个思路,救救孩子。

回复

ID:879348 发表于 2025-3-20 17:28
先用C写完,然后点kel模拟调试,就会自动生成汇编,复制过来忽悠一下就行了
ID:1130795 发表于 2025-3-20 07:50
风抓不住过往 发表于 2025-3-19 16:48
想问问你们碰到error A51: TARGET OUT OF RANGE这种错误的时候都怎么解决啊

中转 先跳到中间 再跳转目标
ID:1145089 发表于 2025-3-19 16:48
hi等你 发表于 2023-5-26 10:58
我这个也是多级菜单吧,上下四个选项,也是汇编,也不难写啊,用个寄存器写入对应的数据而已

想问问你们碰到error A51: TARGET OUT OF RANGE这种错误的时候都怎么解决啊
ID:996773 发表于 2023-5-26 10:58
1588848 发表于 2021-8-24 23:22
用汇编实现多级菜单是痛苦的选择




我这个也是多级菜单吧,上下四个选项,也是汇编,也不难写啊,用个寄存器写入对应的数据而已
ID:951974 发表于 2021-8-24 23:22
用汇编实现多级菜单是痛苦的选择
ID:435676 发表于 2021-7-31 17:06
////////////菜单切换及选择/////////////////////////////////////////////////////////////////////////////////////////////////////////////// while(1){   button();                         //按键扫描          if(n1==0){                           // 返回/上                    n4=n4-1;                 if(n4<0)          { n4=11;  }                                                                           if(n4<=3)         { LcmClearTXT();  LcmClearBMP();  for(i=0;i < 4;i++){  LCD_ShowString(i,0,menu[i]);    }  } //菜单选择                 if(n4>3 & n4<=7)  { LcmClearTXT();  LcmClearBMP();  for(i=0;i < 4;i++){  LCD_ShowString(i,0,menu1[i]);   }  }                  if(n4>7)          { LcmClearTXT();  LcmClearBMP();  for(i=0;i < 4;i++){  LCD_ShowString(i,0,menu2[i]);   }  }  //                if(n4<=3)         { LcmClearTXT();  highlight(0,liney,8,0);   for(i=0;i < 4;i++){  LCD_ShowString(i,0,menu[i]);    }  }  //                if(n4>3 & n4<=7)  { LcmClearTXT();  highlight(0,liney,8,0);   for(i=0;i < 4;i++){  LCD_ShowString(i,0,menu1[i]);   }  }  //                if(n4>7)          { LcmClearTXT();  highlight(0,liney,8,0);   for(i=0;i < 4;i++){  LCD_ShowString(i,0,menu2[i]);   }  }                                                                                                                                  if(n4==0 | n4==4 | n4==8  ){ liney=0;  } //光标位置                                                                 if(n4==1 | n4==5 | n4==9  ){ liney=1;  }                                                                  if(n4==2 | n4==6 | n4==10 ){ liney=2;  }                                                                  if(n4==3 | n4==7 | n4==11 ){ liney=3;  }                                                                            highlight(0,liney,8,255);     //放置光标                                                                                                           }           if(n2==0){                           // 下                     n4=n4+1;                                                          if(n4>11)         { n4=0;  }                                                                                  if(n4<=3)         { LcmClearTXT();  LcmClearBMP();  for(i=0;i < 4;i++){  LCD_ShowString(i,0,menu[i]);    }  }                  if(n4>3 & n4<=7)  { LcmClearTXT();  LcmClearBMP();  for(i=0;i < 4;i++){  LCD_ShowString(i,0,menu1[i]);   }  }                  if(n4>7)          { LcmClearTXT();  LcmClearBMP();  for(i=0;i < 4;i++){  LCD_ShowString(i,0,menu2[i]);   }  }                                                                                                                          if(n4==0 | n4==4 | n4==8  ){ liney=0;  }                                                                  if(n4==1 | n4==5 | n4==9  ){ liney=1;  }                                                                  if(n4==2 | n4==6 | n4==10 ){ liney=2;  }                                                                  if(n4==3 | n4==7 | n4==11 ){ liney=3;  }                                                                           highlight(0,liney,8,255);     //放置光标                                                                            }                                          if(n3==0){                           // 确认                    if(n4==0) {         LcmClearBMP();   LcmClearTXT();   goto HB;}                     if(n4==1) {         LcmClearBMP();   LcmClearTXT();   goto HC;}                     if(n4==2) {         LcmClearBMP();   LcmClearTXT();   goto HD;}                   if(n4==3) {         LcmClearBMP();   LcmClearTXT();   goto HE;}                   if(n4==4) {         LcmClearBMP();   LcmClearTXT();   goto HF;}                   if(n4==5) {         LcmClearBMP();   LcmClearTXT();   goto HG;}                   if(n4==6) {         LcmClearBMP();   LcmClearTXT();   goto HH;}                           if(n4==7) {         LcmClearBMP();   LcmClearTXT();   goto HI;}                           if(n4==8) {         LcmClearBMP();   LcmClearTXT();   goto HJ;}                   if(n4==9) {         LcmClearBMP();   LcmClearTXT();   goto HK;}                   if(n4==10){         LcmClearBMP();   LcmClearTXT();   goto HL;}                           if(n4==11){         LcmClearBMP();   LcmClearTXT();   goto HM;}                                                                                          }
ID:435676 发表于 2021-7-31 17:04
弄两个菜单函数,使用楼上说的按上下键,搞个变量累加,根据变量值来选择显示菜单页面的光标
ID:922838 发表于 2021-7-28 09:47
这个问题我已经解决,用LCD1602显示,然后找一个标志地址,当按上下键的时候,标志地址里的标志位加一或减一,通过改变标志位来改变LCD显示的TAB,然后再输出就可以了

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表