找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4592|回复: 3
打印 上一主题 下一主题
收起左侧

基于51单片机的红外遥控简易LCD12864菜单程序(四项 八项)

[复制链接]
跳转到指定楼层
楼主
ID:82083 发表于 2015-6-6 15:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 qinqin 于 2015-6-6 15:11 编辑



本程序已通过实际电路测试
四项菜单程序:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. sbit rs=P1^0;  // lcd12864 RS端
  4. sbit rw=P1^1;  // lcd12864 RW端
  5. sbit en=P1^2; // lcd12864 EN端
  6. sbit ultra_red=P3^3;  //红外接受端
  7. uchar cc=0;   //指针
  8. uchar dat[4];    //红外线信号数据存放单元:dat[0]存放用户码;dat[1]存放用户反码;dat[2]存放数据码;dat[3]存放数据反码。
  9. bit r;    //指针
  10. uchar code user1[]={"北京城市学院"};
  11. uchar code user2[]={"08级本科"};
  12. uchar code user3[]={"微电子"};
  13. uchar code user4[]={"王云"};
  14. uchar code table1[]={"菜单1 "};
  15. uchar code table2[]={"菜单2 "};
  16. uchar code table3[]={"菜单3 "};
  17. uchar code table4[]={"菜单4 "};
  18. uchar code tt1[]={0x08,0x20,0x08,0x20,0xFF,0xFE,0x08,0x20,0x00,0x10,0x00,0xF8,0x3F,0x00,0x11,0x10,
  19.                    0x08,0x20,0x01,0x00,0x7F,0xFC,0x05,0x40,0x09,0x20,0x31,0x18,0xC1,0x06,0x01,0x00,}; //“菜”
  20. uchar code tt2[]={0x10,0x10,0x08,0x20,0x04,0x40,0x3F,0xF8,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,
  21.                   0x21,0x08,0x3F,0xF8,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00};//“单”
  22. uchar code tt3[]={0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x70,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
  23.                    0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x7C,0x00,0x00,0x00,0x00,0x00};//“1”
  24. uchar code tt4[]={0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x04,0x00,
  25.                   0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x42,0x00,0x7E,0x00,0x00,0x00,0x00,0x00};//“2”
  26. uchar code tt5[]={0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x42,0x00,0x42,0x00,0x04,0x00,0x18,0x00,
  27.                    0x04,0x00,0x02,0x00,0x02,0x00,0x42,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00};//“3”
  28. uchar code tt6[]={0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x0C,0x00,0x14,0x00,0x24,0x00,0x24,0x00,
  29.                    0x44,0x00,0x44,0x00,0x7E,0x00,0x04,0x00,0x04,0x00,0x1E,0x00,0x00,0x00,0x00,0x00};//“4”

  30. ////////////////////////////////////////////////////////  延时程序

  31. void delay(uchar H,uchar L)
  32. {  TH0=H;TL0=L;
  33.    TF0=0;
  34.    while(!TF0);
  35. }

  36. //////////////////////////////////////////////////  lcd12864写指令程序

  37. void w_comd(uchar dat)
  38. {   en=1;rs=0;rw=0;
  39.     P0=dat;
  40.     delay(0xff,0xb8);
  41.     en=0;   // en从1变到0,指令写入
  42.     delay(0xff,0xb8);
  43. }

  44. //////////////////////////////////////  lcd12864写数据程序

  45. void w_data(uchar dat)
  46. {   en=1;rs=1;rw=0;
  47.     P0=dat;
  48.     delay(0xff,0xb8);
  49.     en=0;// en从1变到0,数据写入
  50.     delay(0xff,0xb8);
  51. }

  52. ///////////////////////////////////////////////////////// 初始化lcd12864

  53. void set_lcd12864()
  54. {   w_comd(0x01);  //清屏
  55.     delay(0xee,0x08);
  56.     w_comd(0x30);  //设定基本指令
  57.     w_comd(0x0c);
  58.     w_comd(0x06);
  59.     w_comd(0x02);
  60.     delay(0xee,0x08);
  61. }

  62. ///////////////////////////////////////////////////// 显示程序段

  63. void view(uchar addr,uchar *i)
  64. {   w_comd(addr);    //写入行列地址
  65.     while(*i!='\0')  // 指针所指内容不为空循环
  66.       {  w_data(*i);
  67.   i++;
  68.       }
  69. }

  70. ///////////////////////////////////////////////////////  cgram数据写入程序段

  71. void cgram_data(uchar addr,uchar *i)
  72. {   uchar a;
  73.     w_comd(addr); //地址写入
  74.     for(a=0;a<32;a++) //写入32个8位数据
  75.        w_data(0xff-(*i++)); //为反白输出,所以此处采用0XFF减原有数据,达到翻白效果
  76. }                           //(用程序翻白,只能使一三行,或二四行同时翻白)  

  77. ///////////////////////////////////////////  显示自定义字符

  78. void cgram_display(uchar addr,uchar z)
  79. { w_comd(addr);  //写入行列地址
  80. w_data(0x00); //不知道为什么,必需得写,不然就会出错
  81. w_data(z);   //对应编码写入,编码一定要与写入cgram地址一一对应,不然也会出错
  82. }

  83. /////////////////////////////////////////////////////// 写cgram数据程序

  84. void cgram()
  85. {   view(0x83,table1);
  86.     view(0x93,table2);
  87.     view(0x8b,table3);
  88.     view(0x9b,table4);
  89.     w_comd(0x30);
  90.     w_comd(0x02);//允许修改cgram地址
  91.     delay(0xee,0x08);
  92.     switch(cc)
  93.        {   case 0:  cgram_data(0x40,tt1);
  94.                  cgram_display(0x83,0x00);
  95.                  cgram_data(0x50,tt2);
  96.    cgram_display(0x84,0x02);
  97.    cgram_data(0x60,tt3);
  98.    cgram_display(0x85,0x04);
  99.    break;
  100.     case 1: cgram_data(0x40,tt1);
  101.           cgram_display(0x93,0x00);
  102.                  cgram_data(0x50,tt2);
  103.    cgram_display(0x94,0x02);
  104.    cgram_data(0x60,tt4);
  105.    cgram_display(0x95,0x04);
  106.    break;
  107.            case 2:  cgram_data(0x40,tt1);
  108.           cgram_display(0x8b,0x00);
  109.                  cgram_data(0x50,tt2);
  110.    cgram_display(0x8c,0x02);
  111.    cgram_data(0x60,tt5);
  112.    cgram_display(0x8d,0x04);
  113.    break;
  114.            case 3: cgram_data(0x40,tt1);
  115.           cgram_display(0x9b,0x00);
  116.                  cgram_data(0x50,tt2);
  117.           cgram_display(0x9c,0x02);
  118.    cgram_data(0x60,tt6);
  119.           cgram_display(0x9d,0x04);
  120.    break;
  121.            default:     break;
  122.     }

  123. }

  124. ////////////////////////////////////////////

  125. void display()
  126. {   cgram();
  127. }

  128. ////////////////////////////////////////////////

  129. void main()  
  130. {   uchar i;
  131.     TMOD=0x01;  //启用定时器0方式1
  132.     TR0=1;  //启动定时器0
  133.     EA=1;   //开总中断
  134.     set_lcd12864();//初始化LCD12864
  135.     view(0x81,user1);
  136. for(i=10;i>0;i--)
  137.    delay(0x15,0xa0);
  138.     view(0x92,user2);
  139. for(i=10;i>0;i--)
  140.    delay(0x15,0xa0);
  141. view(0x8b,user3);
  142. for(i=10;i>0;i--)
  143.    delay(0x15,0xa0);
  144. view(0x9b,user4);
  145. for(i=50;i>0;i--)
  146.    delay(0x15,0xa0);
  147. w_comd(0x01);
  148. delay(0xee,0x08);
  149.     while(1)
  150.        {
  151.     r=0;
  152. delay(0x3c,0xb0);
  153.     display();
  154. dat[4]=0;
  155.     EX1=1;
  156.     while(!r)  //  等待中断
  157.                delay(0xff,0x9c);
  158.        }
  159. }

  160. ////////////////////////////////////////  红外中断程序

  161. void int1()interrupt 2
  162. {   uchar i,j,n=0;
  163.     dat[4]=0;
  164.     EX1=0; //必须将中断关闭,否则将无法准确解读
  165. delay(0xf8,0x30);
  166. if(ultra_red)  //延时2ms后判断是否为高电平,若是,则跳出中断(红外发射端发射信号以9ms高电平开始,接收端接受信号与发射信号相反)
  167.     {  r=1;
  168.        delay(0x15,0xa0);
  169.        return;
  170.     }
  171. while(!ultra_red) delay(0xff,0x9c);//等待9ms低电平
  172. while(ultra_red) delay(0xff,0x9c); //等待4.5ms高电平
  173. for(i=0;i<4;i++)
  174.     for(j=0;j<8;j++)
  175.       {  while(!ultra_red) delay(0xff,0x9c); //等待0.56ms的低电平区
  176.        while(ultra_red)
  177.        {  delay(0xff,0x9c);  //每0.1ms,指针n自加1
  178.        n++;
  179.     }
  180.     dat[i]>>=1;    //最高位写入0
  181.     if(n>6) dat[i]=dat[i]|0x80;  //若n>6,说明高电平持续时间大于0.56ms,则将高位置1
  182.     n=0;  //指针清零
  183.    }
  184. if(dat[2]==~dat[3])   //若数据码与数据反码的非相同,说明解码成功
  185.     {   switch(dat[2])
  186.           {  case 0x01: cc=0;break;//根据自己的红外发射器编码
  187.       case 0x02: cc=1;break;
  188.       case 0x03: cc=2;break;
  189.       case 0x04: cc=3;break;
  190.       default:break;
  191.     }
复制代码








八项菜单程序:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. sbit rs=P1^0;  // lcd12864 RS端
  4. sbit rw=P1^1;  // lcd12864 RW端
  5. sbit en=P1^2; // lcd12864 EN端
  6. sbit ultra_red=P3^3;  //红外接受端
  7. uchar cc=0;   //指针
  8. uchar dat[4];    //红外线信号数据存放单元:dat[0]存放用户码;dat[1]存放用户反码;dat[2]存放数据码;dat[3]存放数据反码。
  9. bit r;    //指针
  10. uchar code user1[]={"北京城市学院"};
  11. uchar code user2[]={"08级本科"};
  12. uchar code user3[]={"微电子"};
  13. uchar code user4[]={"王云"};
  14. uchar code table1[]={"菜单1 "};
  15. uchar code table2[]={"菜单2 "};
  16. uchar code table3[]={"菜单3 "};
  17. uchar code table4[]={"菜单4 "};
  18. uchar code table5[]={"菜单5 "};
  19. uchar code table6[]={"菜单6 "};
  20. uchar code table7[]={"菜单7 "};
  21. uchar code table8[]={"菜单8 "};
  22. uchar code tt1[]={0x08,0x20,0x08,0x20,0xFF,0xFE,0x08,0x20,0x00,0x10,0x00,0xF8,0x3F,0x00,0x11,0x10,
  23.                    0x08,0x20,0x01,0x00,0x7F,0xFC,0x05,0x40,0x09,0x20,0x31,0x18,0xC1,0x06,0x01,0x00,}; //“菜”
  24. uchar code tt2[]={0x10,0x10,0x08,0x20,0x04,0x40,0x3F,0xF8,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,
  25.                   0x21,0x08,0x3F,0xF8,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00};//“单”
  26. uchar code tt3[]={0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x70,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
  27.                    0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x7C,0x00,0x00,0x00,0x00,0x00};//“1”
  28. uchar code tt4[]={0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x04,0x00,
  29.                   0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x42,0x00,0x7E,0x00,0x00,0x00,0x00,0x00};//“2”
  30. uchar code tt5[]={0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x42,0x00,0x42,0x00,0x04,0x00,0x18,0x00,
  31.                    0x04,0x00,0x02,0x00,0x02,0x00,0x42,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00};//“3”
  32. uchar code tt6[]={0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x0C,0x00,0x14,0x00,0x24,0x00,0x24,0x00,
  33.                    0x44,0x00,0x44,0x00,0x7E,0x00,0x04,0x00,0x04,0x00,0x1E,0x00,0x00,0x00,0x00,0x00};//“4”
  34. uchar code tt7[]={0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x58,0x00,
  35.                    0x64,0x00,0x02,0x00,0x02,0x00,0x42,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,};//"5"
  36. uchar code tt8[]={0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x24,0x00,0x40,0x00,0x40,0x00,0x58,0x00,
  37.                    0x64,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x24,0x00,0x18,0x00,0x00,0x00,0x00,0x00,};//"6"
  38. uchar code tt9[]={0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x44,0x00,0x44,0x00,0x08,0x00,0x08,0x00,
  39.                    0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,};//"7"
  40. uchar code tt10[]={0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x24,0x00,
  41.                     0x18,0x00,0x24,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,};//"8"

  42. ////////////////////////////////////////////////////////  延时程序

  43. void delay(uchar H,uchar L)
  44. {  TH0=H;TL0=L;
  45.    TF0=0;
  46.    while(!TF0);
  47. }

  48. //////////////////////////////////////////////////  lcd12864写指令程序

  49. void w_comd(uchar dat)
  50. {   en=1;rs=0;rw=0;
  51.     P0=dat;
  52.     delay(0xff,0xb8);
  53.     en=0;   // en从1变到0,指令写入
  54.     delay(0xff,0xb8);
  55. }

  56. //////////////////////////////////////  lcd12864写数据程序

  57. void w_data(uchar dat)
  58. {   en=1;rs=1;rw=0;
  59.     P0=dat;
  60.     delay(0xff,0xb8);
  61.     en=0;// en从1变到0,数据写入
  62.     delay(0xff,0xb8);
  63. }

  64. ///////////////////////////////////////////////////////// 初始化lcd12864

  65. void set_lcd12864()
  66. {   w_comd(0x01);  //清屏
  67.     delay(0xee,0x08);
  68.     w_comd(0x30);  //设定基本指令
  69.     w_comd(0x0c);
  70.     w_comd(0x06);
  71.     w_comd(0x02);
  72.     delay(0xee,0x08);
  73. }

  74. ///////////////////////////////////////////////////// 显示程序段

  75. void view(uchar addr,uchar *i)
  76. {   w_comd(addr);    //写入行列地址
  77.     while(*i!='\0')  // 指针所指内容不为空循环
  78.       {  w_data(*i);
  79.   i++;
  80.       }
  81. }

  82. ///////////////////////////////////////////////////////  cgram数据写入程序段

  83. void cgram_data(uchar addr,uchar *i)
  84. {   uchar a;
  85.     w_comd(addr); //地址写入
  86.     for(a=0;a<32;a++) //写入32个8位数据
  87.        w_data(0xff-(*i++)); //为反白输出,所以此处采用0XFF减原有数据,达到翻白效果
  88. }                           //(用程序翻白,只能使一三行,或二四行同时翻白)  

  89. ///////////////////////////////////////////  显示自定义字符

  90. void cgram_display(uchar addr,uchar z)
  91. { w_comd(addr);  //写入行列地址
  92. w_data(0x00); //不知道为什么,必需得写,不然就会出错
  93. w_data(z);   //对应编码写入,编码一定要与写入cgram地址一一对应,不然也会出错
  94. }

  95. /////////////////////////////////////////////////////// 写cgram数据程序

  96. void cgram()
  97. {   view(0x80,table1);
  98.     view(0x90,table2);
  99.     view(0x88,table3);
  100.     view(0x98,table4);
  101. view(0x84,table5);
  102. view(0x94,table6);
  103. view(0x8c,table7);
  104. view(0x9c,table8);
  105.     w_comd(0x30);
  106.     w_comd(0x02);//允许修改cgram地址
  107.     delay(0xee,0x08);
  108.     switch(cc)
  109.        {   case 0:  cgram_data(0x40,tt1);
  110.                  cgram_display(0x80,0x00);
  111.                  cgram_data(0x50,tt2);
  112.    cgram_display(0x81,0x02);
  113.    cgram_data(0x60,tt3);
  114.    cgram_display(0x82,0x04);
  115.    break;
  116.     case 1: cgram_data(0x40,tt1);
  117.           cgram_display(0x90,0x00);
  118.                  cgram_data(0x50,tt2);
  119.    cgram_display(0x91,0x02);
  120.    cgram_data(0x60,tt4);
  121.    cgram_display(0x92,0x04);
  122.    break;
  123.            case 2:  cgram_data(0x40,tt1);
  124.           cgram_display(0x88,0x00);
  125.                  cgram_data(0x50,tt2);
  126.    cgram_display(0x89,0x02);
  127.    cgram_data(0x60,tt5);
  128.    cgram_display(0x8a,0x04);
  129.    break;
  130.            case 3: cgram_data(0x40,tt1);
  131.           cgram_display(0x98,0x00);
  132.                  cgram_data(0x50,tt2);
  133.           cgram_display(0x99,0x02);
  134.    cgram_data(0x60,tt6);
  135.           cgram_display(0x9a,0x04);
  136.    break;
  137.           case 4: cgram_data(0x40,tt1);
  138.           cgram_display(0x84,0x00);
  139.                  cgram_data(0x50,tt2);
  140.           cgram_display(0x85,0x02);
  141.    cgram_data(0x60,tt7);
  142.           cgram_display(0x86,0x04);
  143.    break;
  144.           case 5: cgram_data(0x40,tt1);
  145.           cgram_display(0x94,0x00);
  146.                  cgram_data(0x50,tt2);
  147.           cgram_display(0x95,0x02);
  148.    cgram_data(0x60,tt8);
  149.           cgram_display(0x96,0x04);
  150.    break;
  151.           case 6: cgram_data(0x40,tt1);
  152.           cgram_display(0x8c,0x00);
  153.                  cgram_data(0x50,tt2);
  154.           cgram_display(0x8d,0x02);
  155.    cgram_data(0x60,tt9);
  156.           cgram_display(0x8e,0x04);
  157.    break;
  158.           case 7: cgram_data(0x40,tt1);
  159.           cgram_display(0x9c,0x00);
  160.                  cgram_data(0x50,tt2);
  161.           cgram_display(0x9d,0x02);
  162.    cgram_data(0x60,tt10);
  163.           cgram_display(0x9e,0x04);
  164.    break;
  165.            default:     break;
  166.     }

  167. }

  168. ////////////////////////////////////////////

  169. void display()
  170. {   cgram();
  171. }

  172. ////////////////////////////////////////////////

  173. void main()  
  174. {   uchar i;
  175.     TMOD=0x01;  //启用定时器0方式1
  176.     TR0=1;  //启动定时器0
  177.     EA=1;   //开总中断
  178.     set_lcd12864();//初始化LCD12864
  179.     view(0x81,user1);
  180. for(i=10;i>0;i--)
  181.    delay(0x15,0xa0);
  182.     view(0x92,user2);
  183. for(i=10;i>0;i--)
  184.    delay(0x15,0xa0);
  185. view(0x8b,user3);
  186. for(i=10;i>0;i--)
  187.    delay(0x15,0xa0);
  188. view(0x9b,user4);
  189. for(i=50;i>0;i--)
  190.    delay(0x15,0xa0);
  191. w_comd(0x01);
  192. delay(0xee,0x08);
  193.     while(1)
  194.        {
  195.     r=0;
  196. delay(0x3c,0xb0);
  197.     display();
  198. dat[4]=0;
  199.     EX1=1;
  200.     while(!r)  //  等待中断
  201.                delay(0xff,0x9c);
  202.        }
  203. }

  204. ////////////////////////////////////////  红外中断程序

  205. void int1()interrupt 2
  206. {   uchar i,j,n=0;
  207.     dat[4]=0;
  208.     EX1=0; //必须将中断关闭,否则将无法准确解读
  209. delay(0xf8,0x30);
  210. if(ultra_red)  //延时2ms后判断是否为高电平,若是,则跳出中断(红外发射端发射信号以9ms高电平开始,接收端接受信号与发射信号相反)
  211.     {  r=1;
  212.        delay(0x15,0xa0);
  213.        return;
  214.     }
  215. while(!ultra_red) delay(0xff,0x9c);//等待9ms低电平
  216. while(ultra_red) delay(0xff,0x9c); //等待4.5ms高电平
  217. for(i=0;i<4;i++)
  218.     for(j=0;j<8;j++)
  219.       {  while(!ultra_red) delay(0xff,0x9c); //等待0.56ms的低电平区
  220.        while(ultra_red)
  221.        {  delay(0xff,0x9c);  //每0.1ms,指针n自加1
  222.        n++;
  223.     }
  224.     dat[i]>>=1;    //最高位写入0
  225.     if(n>6) dat[i]=dat[i]|0x80;  //若n>6,说明高电平持续时间大于0.56ms,则将高位置1
  226.     n=0;  //指针清零
  227.    }
  228. if(dat[2]==~dat[3])   //若数据码与数据反码的非相同,说明解码成功
  229.     {   switch(dat[2])
  230.           {  case 0x01: cc=0;break;
  231.       case 0x02: cc=1;break;
  232.       case 0x03: cc=2;break;
  233.       case 0x04: cc=3;break;
  234.    case 0x05: cc=4;break;
  235.    case 0x06: cc=5;break;
  236.    case 0x07: cc=6;break;
  237.    case 0x08: cc=7;break;
  238.    case 0x09: cc=8;break;
  239.       default:break;
  240.     }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:82331 发表于 2015-6-7 17:48 | 只看该作者
帮顶~~~~~~~~~~~~~~~~~~~~~~~~
回复

使用道具 举报

板凳
ID:406128 发表于 2018-11-8 09:29 | 只看该作者
楼主可否打包资料上传给我们看看
回复

使用道具 举报

地板
ID:362076 发表于 2018-11-11 19:50 | 只看该作者
这个程序只是演示作用,楼主并没有预留出功能控制的位置和接口,而且也没有考虑到每一级菜单的长度问题,例如一个菜单是“射频卡管理”这五个字,那么你菜单的位置就放不下啦,同时,多级菜单的思路也没有体现。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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