找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的无线餐饮管理设计 NRF2401加LCD12864显示

[复制链接]
跳转到指定楼层
楼主
基于51单片机的餐饮管理设计 NRF2401加LCD12864

发送端原理图:



接收端原理图:


发送端单片机源程序如下:
  1. /*****************************************

  2. *****************************************/
  3. #include"reg52.h"
  4. #include"Allhead.h"
  5.   sbit LCD_RS=P3^5;
  6.   sbit LCD_RW=P3^6;
  7.   sbit LCD_EN=P3^4;
  8.   sbit LCD_PSB=P3^7;
  9.   sbit wela=P2^6;
  10.   sbit dula=P2^7;
  11.   sbit k1=P1^0;
  12.   sbit k2=P1^1;
  13.   sbit k3=P1^2;
  14.   sbit k4=P3^3;
  15.   sbit led2=P0^0;
  16.   unchar code dis1[]={"----请您点菜----"};
  17.   unchar code dis2[]={"鱼香肉丝  7 元"};
  18.   unchar code dis3[]={"宫保鸡丁  8 元"};
  19.   unchar code dis4[]={"回锅肉    10元"};
  20.   unchar code dis5[]={"京酱肉丝  8 元"};
  21.   unchar code dis6[]={"红烧肉    9 元"};
  22.   unchar code dis7[]={"------已点------"};
  23.   unchar code dis8[]={"------结账------"};
  24.   unchar code dis9[]={"共计"};
  25.   unchar code dis10[]={"元"};

  26.   unchar k=1,j=1,u=1,n=0,m=0;
  27.   char TxDate[4],sum=0;
  28.   void lcd_display3();
  29. /*********************主函数***************************/

  30.   void delay_1ms(unint x)
  31.   {
  32.     unint i,j;
  33.         for(j=0;j<x;j++)
  34.            for(i=0;i<110;i++);
  35.   }
  36.   void write_cmd(unchar cmd)
  37.   {
  38.      LCD_RS=0;
  39.          LCD_RW=0;
  40.          LCD_EN=0;
  41.          P0=cmd;
  42.          delay_1ms(5);
  43.          LCD_EN=1;
  44.          delay_1ms(5);
  45.          LCD_EN=0;

  46.   }
  47.   void write_dat(unchar dat)
  48.   {
  49.     LCD_RS=1;
  50.         LCD_RW=0;
  51.         LCD_EN=0;
  52.         P0=dat;
  53.         delay_1ms(5);
  54.         LCD_EN=1;
  55.         delay_1ms(5);
  56.         LCD_EN=0;

  57.   }
  58.   void lcd_pos(unchar X,unchar Y)
  59.   {
  60.      unchar pos;
  61.          if(X==0)
  62.            {X=0X80;}
  63.          else if(X==1)
  64.             {X=0X90;}                 
  65.          else if(X==2)
  66.             {X=0X88;}
  67.          else if(X==3)
  68.             {X=0X98;}
  69.          pos=X+Y;
  70.          write_cmd(pos);
  71.           
  72.   }


  73. /************屏幕显示***************/
  74.   void lcd_display()  //点菜界面
  75.   {
  76.     unchar i;
  77.     lcd_pos(0,0);
  78.     i=0;
  79.         while(dis1[i]!='\0')
  80.         {
  81.       write_dat(dis1[i]);
  82.           i++;
  83.     }


  84.         if(u==1) //第一页
  85.         {
  86.         lcd_pos(1,1);
  87.         i=0;
  88.         while(dis2[i]!='\0')
  89.         {
  90.           write_dat(dis2[i]);
  91.           i++;
  92.         }

  93.         lcd_pos(2,1);
  94.         i=0;         
  95.         while(dis3[i]!='\0')
  96.         {
  97.           write_dat(dis3[i]);
  98.           i++;
  99.         }

  100.         lcd_pos(3,1);
  101.         i=0;           
  102.         while(dis4[i]!='\0')
  103.         {
  104.           write_dat(dis4[i]);
  105.           i++;
  106.         }
  107.           }



  108.         else if(u==2) //第二页
  109.    {

  110.         lcd_pos(1,1);
  111.         i=0;
  112.         while(dis3[i]!='\0')
  113.         {
  114.           write_dat(dis3[i]);
  115.           i++;
  116.         }

  117.         lcd_pos(2,1);
  118.         i=0;           
  119.         while(dis4[i]!='\0')
  120.         {
  121.           write_dat(dis4[i]);
  122.           i++;
  123.         }

  124.         lcd_pos(3,1);
  125.         i=0;           
  126.         while(dis5[i]!='\0')
  127.         {
  128.           write_dat(dis5[i]);
  129.           i++;
  130.         }
  131.                
  132.    }

  133.    else if(u==3)  //第三页
  134.    {

  135.         lcd_pos(1,1);
  136.         i=0;
  137.         while(dis4[i]!='\0')
  138.         {
  139.           write_dat(dis4[i]);
  140.           i++;
  141.         }

  142.         lcd_pos(2,1);
  143.         i=0;           
  144.         while(dis5[i]!='\0')
  145.         {
  146.           write_dat(dis5[i]);
  147.           i++;
  148.         }

  149.         lcd_pos(3,1);
  150.         i=0;           
  151.         while(dis6[i]!='\0')
  152.         {
  153.           write_dat(dis6[i]);
  154.           i++;
  155.         }
  156.                
  157.    }



  158.   }



  159.   void lcd_display2()  //看菜界面
  160.   {
  161.           unchar i;
  162.     lcd_pos(0,0);
  163.     i=0;
  164.         while(dis7[i]!='\0')
  165.         {
  166.       write_dat(dis7[i]);
  167.           i++;
  168.     }

  169.         lcd_pos(1,0);
  170.     i=0;
  171.         switch(TxDate[0])
  172.         {
  173.         case 1 :       
  174.         while(dis2[i]!='\0')
  175.         {
  176.       write_dat(dis2[i]);
  177.           i++;
  178.     }break;

  179.         case 2 :       
  180.         while(dis3[i]!='\0')
  181.         {
  182.       write_dat(dis3[i]);
  183.           i++;
  184.     }break;

  185.         case 3 :       
  186.         while(dis4[i]!='\0')
  187.         {
  188.       write_dat(dis4[i]);
  189.           i++;
  190.     }break;

  191.         case 4 :       
  192.         while(dis5[i]!='\0')
  193.         {
  194.       write_dat(dis5[i]);
  195.           i++;
  196.     }break;
  197.   
  198.         case 5 :       
  199.         while(dis6[i]!='\0')
  200.         {
  201.       write_dat(dis6[i]);
  202.           i++;
  203.     }break;

  204.         default : break;

  205.         }

  206.         lcd_pos(2,0);
  207.     i=0;
  208.         switch(TxDate[1])
  209.         {
  210.         case 1 :       
  211.         while(dis2[i]!='\0')
  212.         {
  213.       write_dat(dis2[i]);
  214.           i++;
  215.     }break;

  216.         case 2 :       
  217.         while(dis3[i]!='\0')
  218.         {
  219.       write_dat(dis3[i]);
  220.           i++;
  221.     }break;

  222.         case 3 :       
  223.         while(dis4[i]!='\0')
  224.         {
  225.       write_dat(dis4[i]);
  226.           i++;
  227.     }break;

  228.         case 4 :       
  229.         while(dis5[i]!='\0')
  230.         {
  231.       write_dat(dis5[i]);
  232.           i++;
  233.     }break;
  234.   
  235.         case 5 :       
  236.         while(dis6[i]!='\0')
  237.         {
  238.       write_dat(dis6[i]);
  239.           i++;
  240.     }break;

  241.         default : break;

  242.         }


  243.         lcd_pos(3,0);
  244.     i=0;
  245.         switch(TxDate[2])
  246.         {
  247.         case 1 :       
  248.         while(dis2[i]!='\0')
  249.         {
  250.       write_dat(dis2[i]);
  251.           i++;
  252.     }break;

  253.         case 2 :       
  254.         while(dis3[i]!='\0')
  255.         {
  256.       write_dat(dis3[i]);
  257.           i++;
  258.     }break;

  259.         case 3 :       
  260.         while(dis4[i]!='\0')
  261.         {
  262.       write_dat(dis4[i]);
  263.           i++;
  264.     }break;

  265.         case 4 :       
  266.         while(dis5[i]!='\0')
  267.         {
  268.       write_dat(dis5[i]);
  269.           i++;
  270.     }break;
  271.   
  272.         case 5 :       
  273.         while(dis6[i]!='\0')
  274.         {
  275.       write_dat(dis6[i]);
  276.           i++;
  277.     }break;

  278.         default : break;

  279.         }
  280.   
  281.   }


  282.   void         lcd_display3()         //算账
  283.   {       
  284.     char a,b;
  285.     unchar i;
  286.         sum = 0;

  287.        
  288.     lcd_pos(0,0);
  289.     i=0;
  290.         while(dis8[i]!='\0')
  291.         {
  292.       write_dat(dis8[i]);
  293.           i++;
  294.     }

  295.           switch(TxDate[0])
  296.         {
  297.         case 1 :       
  298.     sum=sum+7;break;

  299.         case 2 :       
  300.         sum=sum+8;break;

  301.         case 3 :       
  302.         sum=sum+10;break;

  303.         case 4 :       
  304.         sum=sum+8;break;
  305.   
  306.         case 5 :       
  307.         sum=sum+9;break;

  308.         default : break;

  309.     }

  310.         switch(TxDate[1])
  311.         {
  312.         case 1 :       
  313.     sum=sum+7;break;

  314.         case 2 :       
  315.         sum=sum+8;break;

  316.         case 3 :       
  317.         sum=sum+10;break;

  318.         case 4 :       
  319.         sum=sum+8;break;
  320.   
  321.         case 5 :       
  322.         sum=sum+9;break;

  323.         default : break;

  324.     }

  325.           switch(TxDate[2])
  326.         {
  327.         case 1 :       
  328.     sum=sum+7;break;

  329.         case 2 :       
  330.         sum=sum+8;break;

  331.         case 3 :       
  332.         sum=sum+10;break;

  333.         case 4 :       
  334.         sum=sum+8;break;
  335.   
  336.         case 5 :       
  337.         sum=sum+9;break;

  338.         default : break;

  339.     }



  340.           a=sum/10;
  341.         b=sum%10;


  342.         lcd_pos(1,0);
  343.     i=0;
  344.         while(dis9[i]!='\0')
  345.         {
  346.       write_dat(dis9[i]);
  347.           i++;
  348.     }

  349.         write_dat(a+0x30);
  350.         write_dat(b+0x30);

  351.         i=0;
  352.         while(dis10[i]!='\0')
  353.         {
  354.       write_dat(dis10[i]);
  355.           i++;
  356.     }


  357.   }

  358.   void lcd_init()
  359.   {
  360.         LCD_PSB=1;
  361.         write_cmd(0x30);
  362.         delay_1ms(5);
  363.         write_cmd(0x0C);
  364.         delay_1ms(5);
  365.         write_cmd(0x01);
  366.         delay_1ms(5);

  367.   }

  368. /***************键盘扫描************/
  369.   void keyscan()
  370.   {
  371.           if(k1==0)//向下移动光标键
  372.         {
  373.                    delay_1ms(1);
  374.                 if(k1==0)
  375.                 {
  376.                    k++;
  377.                    j++;
  378.                    if(k>3)
  379.                    {
  380.                              k=3;
  381.                           u++;
  382.                           if(u==4)
  383.                           {
  384.                                    u=1;
  385.                           }
  386.                    }
  387.                    if(j==6)
  388.                    {
  389.                       k=1;
  390.                           j=1;
  391.                    }

  392.                    while(!k1);
  393.                    write_cmd(0x01);
  394.                    delay_1ms(1);
  395.                 }
  396.         }


  397.         if(k2==0)//向上移动光标键
  398.         {
  399.                    delay_1ms(1);
  400.                 if(k2==0)
  401.                 {
  402.                    k--;
  403.                    j--;
  404.                   if(k<1)
  405.                    {
  406.                              k=1;
  407.                           u--;
  408.                           if(u==0)
  409.                           {
  410.                                    u=3;
  411.                           }
  412.                    }
  413.                    if(j==0)
  414.                    {
  415.                       k=3;
  416.                           j=5;
  417.                    }

  418.                    while(!k2);
  419.                    write_cmd(0x01);
  420.                    delay_1ms(1);
  421.                 }
  422.         }


  423.         if(k3==0)//选菜
  424.         {
  425.                    delay_1ms(10);
  426.                 if(k3==0)
  427.                 {
  428.                    if(m==0)
  429.                    {
  430.                    TxDate[n]=j;
  431.                    n++;
  432.                   
  433.                    }
  434.                    else
  435.                    {
  436.                     NRFSetTxMode(TxDate);//发送菜单
  437.             while(CheckACK());        //检测是否发送完毕         
  438.                     while(!k3);
  439.                     delay_1ms(5);
  440.                }
  441. ……………………

  442. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


所有资料51hei提供下载:
基于单片机的餐饮管理系统设计.rar (181.91 KB, 下载次数: 91)




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:101808 发表于 2017-11-26 17:27 | 只看该作者
很棒的程序,支持作者!
回复

使用道具 举报

板凳
ID:105206 发表于 2018-6-7 19:48 | 只看该作者
学习了,谢谢分享。
回复

使用道具 举报

地板
ID:92810 发表于 2018-9-25 11:13 | 只看该作者
这个真要支持了,感觉挺有创意的
回复

使用道具 举报

5#
ID:92810 发表于 2018-9-25 11:14 | 只看该作者
很棒的程序,支持作者!
回复

使用道具 举报

6#
ID:92810 发表于 2018-9-25 11:14 | 只看该作者
这个真的是要好好学习了,真心的觉得不错
回复

使用道具 举报

7#
ID:65956 发表于 2018-10-9 17:20 | 只看该作者
这种项目显示如果用串口触摸屏档次就上去了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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