找回密码
 立即注册

QQ登录

只需一步,快速开始

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

自己在网上找资料,想思路,慢慢打出来的八层简易电梯。

[复制链接]
跳转到指定楼层
楼主
多谢51黑上的各位大神提供的资料以及思路,让我得以打出来这个程序,将这个程序拿出来在返还给大家。51黑很精彩!
附上直流电机的驱动电路(可以将该电梯用步进电机来带动,我用的是直流电机)。

单片机源程序如下:
  1. #include <REGX51.H>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int       
  5. sbit sda=P2^4;
  6. sbit lcd_rs=P2^5;
  7. sbit lcd_rw=P2^6;
  8. sbit lcd_en=P2^7;
  9. sbit sxdj1=P2^0;
  10. sbit sxdj2=P2^1;
  11. sbit zydj1=P2^2;
  12. sbit zydj2=P2^3;
  13. sbit key_ddd=P3^3;
  14. uchar jinji=0;       //紧急标识
  15. uchar l1;
  16. uchar l2;
  17. uchar l3;
  18. uchar l4;
  19. uchar l5;
  20. uchar l6;
  21. uchar l7;
  22. uchar l8;        
  23. uchar kye_1=0,kye_2=0,kye_3=0,kye_4=0,kye_5=0,kye_6=0,kye_7=0,kye_8=0;
  24. uchar dt_c1=0;                                                 /*电梯层数标识*/
  25. uchar dt_c2=0;
  26. uchar dt_c3=0;
  27. uchar dt_c4=0;
  28. uchar dt_c5=0;
  29. uchar dt_c6=0;
  30. uchar dt_c7=0;
  31. uchar dt_c8=0;
  32. uchar dt_sx=0;                                                  /*电梯是上还是下的标志*/
  33. uchar dt_cs=1;                                                  /*电梯到哪一层的标识*/
  34. bit dt_stop=1;                                                  /*电梯停止标识,是否再某一层停下*/
  35. uchar shang=0,xia=0;                                            /*显示上下的标识*/
  36. uchar value;                                                    /*电梯计数*/
  37. uchar djzy=0;                                                   /*电机左右的标识*/
  38. uchar time_ms;
  39. uchar time_ting;
  40. uchar dj_1=0;                                                   //正转(开门)
  41. uchar dj_2=0;                                                   //反转(关门)
  42. uchar dj_3=0;                                                   //停止
  43. uchar S;                                                        /*时间计时晔?/
  44. uchar value1;
  45. uchar deep;                                                     /*语音提醒标识*/
  46. uchar key_value;                                                /*按键标识*/
  47. uchar table1[]={0x00,0x04,0x0E,0x15,0x04,0x04,0x04,0x00};       /*上升标识*/
  48. uchar table2[]={0x00,0x04,0x04,0x04,0x15,0x0E,0x04,0x00};       /*下降标识*/

  49. void delayms(uint xus)            
  50. {
  51.         while(xus--);
  52. }       
  53. void SendData(uchar dat)                /*JQ8900一线串口通信模式*/
  54. {
  55.         uchar i;
  56.         EA=0;                    /*发送时关闭中断,防止干扰*/
  57.         sda=1;                   /*开始拉高*/
  58.         delayms(1000);
  59.         sda=0;                   /*开始引导*/   
  60.         delayms(2200);
  61.         for(i=0;i<8;i++)
  62.         {
  63.                 sda=1;
  64.                 if(dat&0x01)           /*3:1表示数据位1,每个位用两个脉*/
  65.                 {
  66.                         delayms(500);
  67.                         sda=0;
  68.                         delayms(210);
  69.                 }
  70.                 else
  71.                 {
  72.                         delayms(210);       /*1:3表示数据位0,每个位用两个脉冲*/
  73.                         sda=0;
  74.                         delayms(500);
  75.                 }                       
  76.                 dat>>=1;
  77.         }
  78.         sda=1;
  79.         EA=1;
  80. }
  81. /**********lcd1602程序************/
  82. void delay1ms(unsigned int  ms)         //延时1毫秒(不够精确的)
  83. {
  84.     unsigned int  i,j;
  85.     for(i=0;i<ms;i++)
  86.     for(j=0;j<100;j++);
  87. }
  88. void write_com(unsigned char com)       //写指令//
  89. {  
  90.         delay1ms(1);
  91.   lcd_rs=0;
  92.   lcd_rw=0;
  93.   lcd_en=0;
  94.   P0=com;                                                                                                                  
  95.   delay1ms(1);
  96.   lcd_en=1;
  97.   delay1ms(1);
  98.   lcd_en=0;
  99. }
  100. void write_dat(unsigned char dat)       //写数据//
  101. {  
  102.         delay1ms(1);;
  103.   lcd_rs=1;
  104.   lcd_rw=0;
  105.   lcd_en=0;
  106.   P0=dat;
  107.   delay1ms(1);
  108.   lcd_en=1;
  109.   delay1ms(1);
  110.   lcd_en=0;
  111. }
  112. void lcd_init()                         //初始化设置//
  113. {
  114.         lcd_rs=1;
  115.   lcd_rw=0;
  116.   write_com(0x38);
  117.   write_com(0x08);
  118.   write_com(0x01);
  119.   write_com(0x06);
  120.   write_com(0x0c);
  121. }
  122. void yaoquloucheng()                    //要去的楼层
  123. {
  124.         if(dt_c1==1)
  125.         {
  126.                 write_com(0x80+0x44);
  127.                 write_dat('1');
  128.         }
  129.           else
  130.           {
  131.                 write_com(0x80+0x44);
  132.     write_dat(' ');               
  133.           }
  134.                 if(dt_c2==1)
  135.         {
  136.                 write_com(0x80+0x45);
  137.                 write_dat('2');
  138.         }
  139.           else
  140.           {
  141.                   write_com(0x80+0x45);
  142.       write_dat(' ');               
  143.           }  
  144.         if(dt_c3==1)
  145.         {
  146.                 write_com(0x80+0x46);
  147.                 write_dat('3');
  148.         }
  149.           else
  150.           {
  151.                   write_com(0x80+0x46);
  152.       write_dat(' ');               
  153.           }
  154.                 if(dt_c4==1)
  155.         {
  156.                 write_com(0x80+0x47);
  157.                 write_dat('4');
  158.         }
  159.         else
  160.         {
  161.                 write_com(0x80+0x47);
  162.     write_dat(' ');               
  163.         }
  164.                 if(dt_c5==1)
  165.         {
  166.                 write_com(0x80+0x48);
  167.                 write_dat('5');
  168.         }
  169.         else
  170.         {
  171.                 write_com(0x80+0x48);
  172.     write_dat(' ');               
  173.         }
  174.                 if(dt_c6==1)
  175.         {
  176.                 write_com(0x80+0x49);
  177.                 write_dat('6');
  178.         }
  179.         else
  180.         {
  181.                 write_com(0x80+0x49);
  182.     write_dat(' ');               
  183.         }
  184.                 if(dt_c7==1)
  185.         {
  186.                 write_com(0x80+0x40+0x0a);
  187.                 write_dat('7');
  188.         }
  189.         else
  190.         {
  191.                 write_com(0x80+0x40+0x0a);
  192.     write_dat(' ');               
  193.         }
  194.                 if(dt_c8==1)
  195.         {
  196.                 write_com(0x80+0x40+0x0b);
  197.                 write_dat('8');
  198.         }
  199.         else
  200.         {
  201.                 write_com(0x80+0x40+0x0b);
  202.     write_dat(' ');               
  203.         }
  204. }
  205. void dangqianlouceng()                  //显示楼层函数
  206. {
  207.         write_com(0x80);
  208.         write_dat(dt_cs+0x30);
  209. }
  210. void shangxiabioashi()                  //显示去上去下
  211. {
  212.         uchar i;
  213.         if(shang==1)
  214.         {
  215.                 write_com(0x40);
  216.                 for(i=0;i<8;i++)
  217.                 {
  218.                         write_dat(table1[i]);
  219.                 }
  220.                 write_com(0x80+0x40);
  221.                 write_dat(0x00);
  222.         }
  223.         else if(shang==0)
  224.         {
  225.                 write_com(0x80+0x40);
  226.                 write_dat(' ');
  227.         }
  228.         if(xia==1)
  229.         {
  230.                 write_com(0x48);
  231.                 for(i=0;i<8;i++)
  232.                 {
  233.                 write_dat(table2[i]);
  234.                 }
  235.                 write_com(0x80+0x40);
  236.                 write_dat(0x01);
  237.         }
  238.         else if(xia == 0)
  239.         {
  240.                 write_com(0x80+0x40);
  241.                 write_dat(' ');
  242.         }
  243. }
  244. /*************矩阵按键************/
  245. void delay_1ms(uint q)
  246. {
  247.         uint i,j;
  248.         for(i=0;i<q;i++)
  249.                 for(j=0;j<120;j++);
  250. }               //矩阵按键检测
  251. void key()                                    //独立按键程序
  252. {
  253.         P1 |= 0xff;
  254.         if(P1 != 0xff)                //按键按下
  255.         {
  256.                 delay_1ms(1);                     //按键消抖动
  257.                 if(P1 != 0xff)
  258.                 {                                                //确认是按键按下
  259.                         key_value= 0;
  260.                         switch(P1)
  261.                         {
  262.                                 case 0xfe: key_value = 1; kye_1++; break;          //得到按键值
  263.                                 case 0xfd: key_value = 2; kye_2++; break;          //得到按键值
  264.                                 case 0xfb: key_value = 3; kye_3++; break;          //得到按键值
  265.                                 case 0xf7: key_value = 4; kye_4++; break;          //得到按键值
  266.                                 case 0xef: key_value = 5; kye_5++; break;          //得到按键值
  267.                                 case 0xdf: key_value = 6; kye_6++; break;          //得到按键值
  268.                                 case 0xbf: key_value = 7; kye_7++; break;          //得到按键值
  269.                                 case 0x7f: key_value = 8; kye_8++; break;          //得到按键值
  270.                         }
  271.                 }                       
  272.         }
  273. }
  274. void change()                           //矩阵数据转换(进行标识)
  275. {
  276.         uchar ooo;
  277.         ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
  278.         if(key_value==1)
  279.         {
  280.                 ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
  281.                 if(kye_1==1)
  282.     {                       
  283.                   dt_c1=1;
  284.     }
  285.                 if(ooo != 1)
  286.                 {
  287.                         if(kye_1==2)
  288.                   {
  289.                           kye_1=0;               
  290.                     dt_c1=0;                       
  291.                   }               
  292.                 }
  293.         }
  294.         if(key_value==2)
  295.   {       
  296.                 ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
  297.                 if(kye_2==1)
  298.     {
  299.                   dt_c2=1;
  300.     }
  301.           if(ooo != 1)
  302.                 {
  303.                   if(kye_2==2)
  304.                   {
  305.                           kye_2=0;                       
  306.                     dt_c2=0;                       
  307.                   }               
  308.                 }                       
  309.         }
  310.         if(key_value==3)
  311.   {       
  312.                 ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
  313.                 if(kye_3==1)
  314.     {
  315.                
  316.                   dt_c3=1;
  317.     }
  318.                 if(ooo != 1)
  319.                 {
  320.       if(kye_3==2)
  321.                   {
  322.                           kye_3=0;
  323.                        
  324.                     dt_c3=0;                       
  325.                   }                                       
  326.                 }
  327.         }
  328.         if(key_value==4)
  329.         {       
  330.                 ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
  331.                 if(kye_4==1)
  332.     {               
  333.                   dt_c4=1;
  334.     }
  335.                 if(ooo != 1)
  336.                 {
  337.             if(kye_4==2)
  338.                   {
  339.                           kye_4=0;               
  340.                     dt_c4=0;                       
  341.                   }                       
  342.                 }               
  343.         }
  344.         if(key_value==5)
  345.         {       
  346.                 ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
  347.                 if(kye_5==1)
  348.     {
  349.                   dt_c5=1;
  350.     }
  351.                 if(ooo != 1)
  352.                 {
  353.                   if(kye_5==2)
  354.                   {
  355.                           kye_5=0;
  356.                     dt_c5=0;                       
  357.                   }                       
  358.                 }  
  359.         }
  360.         if(key_value==6)
  361.         {       
  362.                 ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
  363.                 if(kye_6==1)
  364.     {
  365.                   dt_c6=1;
  366.     }
  367.                 if(ooo != 1)
  368.                 {
  369.             if(kye_6==2)
  370.                   {
  371.                           kye_6=0;
  372.                     dt_c6=0;                       
  373.                   }                                       
  374.                 }
  375.         }
  376.         if(key_value==7)
  377.         {       
  378.                 ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
  379.                 if(kye_7==1)
  380.     {
  381.                   dt_c7=1;
  382.     }
  383.                 if(ooo != 1 )
  384.                 {
  385.             if(kye_7==2)
  386.                   {
  387.                           kye_7=0;
  388.                     dt_c7=0;                       
  389.                   }                                       
  390.                 }
  391.         }
  392.         if(key_value==8)
  393.         {       
  394.                 ooo= dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
  395.                 if(kye_8==1)
  396.     {
  397.                   dt_c8=1;
  398.     }
  399.                 if(ooo != 1)
  400.                 {
  401.             if(kye_8==2)
  402.                   {
  403.                           kye_8=0;
  404.                     dt_c8=0;                       
  405.                   }               
  406.                 }       
  407.         }
  408. }
  409. /************电机驱动*************/
  410. void dianjiqudong1()                    //对电机的上行下行进行判断
  411. {
  412.         if(dt_stop==1)
  413.   {
  414.                   if(dt_sx==1)
  415.                   {
  416.                           sxdj1=1;
  417.                           sxdj2=0;
  418.                   }
  419.       else if(dt_sx==2)
  420.                   {
  421.                           sxdj1=0;
  422.                                 sxdj2=1;
  423.                   }
  424.                  if(dt_sx==0)
  425.                         {
  426.                     sxdj1=0;
  427.                     sxdj2=0;                               
  428.                         }
  429.         }
  430.         else
  431.         {
  432.                 sxdj1=0;
  433.                 sxdj2=0;
  434.         }
  435. }
  436. void dianjiqudong2()                    //电机控制开关门
  437. {   
  438.   if(dt_stop==0)
  439.         {
  440.                 if(dj_3==1)
  441.           {
  442.                   if(dj_1==1)
  443.                   {
  444.                     zydj1=1;
  445.                     zydj2=0;                       
  446.                   }
  447.                   if(dj_2==1)
  448.                   {
  449.                     zydj1=0;
  450.               zydj2=1;                       
  451.                   }       
  452.           }
  453.         }
  454.         else
  455.         {
  456.           zydj1=0;
  457.           zydj2=0;               
  458.         }       
  459. }
  460. /*************判断程序************/
  461. /**电梯不动时,判断是向上还是向下**/
  462. void diantipanudan1()                   //电梯不动时,进行上下的判断                                                      
  463. {
  464.         static uchar lll;
  465.         if(dt_sx==0)
  466.         {
  467.                 dt_stop=1;
  468.                 if(dt_cs==1)//停在一楼时
  469.                 {
  470.                         lll = dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
  471.                         if(lll != 0)
  472.                         {
  473.                                 dt_sx=1;//等于一向上 ,等于二向下,等于零时不动
  474.                                 shang=1;//等于一显示上,等于零不显示
  475.                                 xia=0;        //等于一显示下,等于零不显示
  476.                         }
  477.                 }
  478.                 if(dt_cs==2)//停在二楼时
  479.                 {
  480.                         lll=dt_c3 + dt_c4 + dt_c5 + dt_c6 + dt_c7 + dt_c8;
  481.                         if(lll != 0)
  482.                         {
  483.                                 dt_sx=1;//等于一向上 ,等于二向下,等于零时不动
  484.                                 shang=1;//等于一显示上,等于零不显示
  485.                                 xia=0;//等于一显示下,等于零不显示
  486.                         }
  487.                         lll=dt_c1;
  488.                         if(lll != 0)
  489.                         {
  490.                                 dt_sx= 2;//等于一向上 ,等于二向下
  491.                                 shang=0;//等于一显示上,等于零不显示
  492.                                 xia=1;//等于一显示下,等于零不显
  493.                         }
  494.                 }
  495.                 if(dt_cs==3)//停在三楼时
  496.                 {
  497.       lll=dt_c4 + dt_c5 + dt_c6 + dt_c7 + dt_c8;
  498.       if(lll != 0)
  499.                         {
  500.                                 dt_sx=1;//等于一向上 ,等于二向下,等于零时不动
  501.                                 shang=1;//等于一显示上,等于零不显示
  502.                                 xia=0;//等于一显示下,等于零不显示
  503.                         }       
  504.                         lll=dt_c1+dt_c2;
  505.                         if(lll != 0)
  506.                         {
  507.                                 dt_sx=2;//等于一向上 ,等于二向下
  508.                                 shang=0;//等于一显示上,等于零不显示
  509.                                 xia=1;//等于一显示下,等于零不显示
  510.                         }
  511.                 }
  512.                 if(dt_cs==4)//停在四楼时
  513.                 {
  514.                         lll = dt_c5+dt_c6+dt_c7+dt_c8;
  515.                         if(lll != 0)
  516.                         {
  517.                                 dt_sx=1;//等于一向上 ,等于二向下,等于零时不动
  518.                                 shang=1;//等于一显示上,等于零不显示
  519.                                 xia=0;//等于一显示下,等于零不显示
  520.                         }
  521.                         lll = dt_c1+dt_c2+dt_c3;
  522.                         if(lll != 0)
  523.                         {
  524.                                 dt_sx=2;//等于一向上 ,等于二向下
  525.                                 shang=0;//等于一显示上,等于零不显示
  526.                                 xia=1;//等于一显示下,等于零不显示
  527.                         }
  528.                 }
  529.                 if(dt_cs==5)//停在五楼时
  530.                 {
  531.                         lll = dt_c6+dt_c7+dt_c8;
  532.                         if(lll != 0)
  533.                         {
  534.                                 dt_sx=1;//等于一向上 ,等于二向下,等于零时不动
  535.                                 shang=1;//等于一显示上,等于零不显示
  536.                                 xia=0;//等于一显示下,等于零不显示
  537.                         }
  538.                         lll = dt_c1+dt_c2+dt_c3+dt_c4;
  539.                         if(lll != 0)
  540.                         {
  541.                                 dt_sx=2;//等于一向上 ,等于二向下
  542.                                 shang=0;//等于一显示上,等于零不显示
  543.                                 xia=1;//等于一显示下,等于零不显示
  544.                         }
  545.                 }
  546.                 if(dt_cs==6)//停在六楼时
  547.                 {
  548.                         lll = dt_c7+dt_c8;
  549.                         if(lll != 0)
  550.                         {
  551.                                 dt_sx=1;//等于一向上 ,等于二向下,等于零时不动
  552.                                 shang=1;//等于一显示上,等于零不显示
  553.                                 xia=0;//等于一显示下,等于零不显示
  554.                         }
  555.                         lll=dt_c1+dt_c2+dt_c3+dt_c4+dt_c5;
  556.                         if(lll != 0)
  557.                         {
  558.                                 dt_sx=2;//等于一向上 ,等于二向下
  559.                                 shang=0;//等于一显示上,等于零不显示
  560.                                 xia=1;//等于一显示下,等于零不显示
  561.                         }
  562.                 }
  563.                 if(dt_cs==7)//停在七楼时
  564.                 {
  565.                         lll=dt_c8;
  566.                         if(lll != 0)
  567.                         {
  568.                                 dt_sx=1;//等于一向上 ,等于二向下、等于零时不动
  569.                                 shang=1;//等于一显示上,等于零不显示
  570.                                 xia=0;//等于一显示下,等于零不显示
  571.                         }
  572.                         lll=dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6;
  573.                         if(lll != 0)
  574.                         {
  575.                                 dt_sx=2;//等于一向上 ,等于二向下
  576.                                 shang=0;//等于一显示上,等于零不显示
  577.                                 xia=1;//等于一显示下,等于零不显示
  578.                         }
  579.                 }
  580.                 if(dt_cs==8)//停在八楼时
  581.                 {
  582.                         lll=dt_c8;
  583.                         if(lll != 0)
  584.                         {
  585.                                 dt_sx=1;//等于一向上 ,等于二向下,等于零时不动
  586.                                 shang=1;//等于一显示上,等于零不显示
  587.                                 xia=0;//等于一显示下,等于零不显示
  588.                         }
  589.                         lll=dt_c1 + dt_c2 + dt_c3 + dt_c4 + dt_c5 + dt_c6+dt_c7;
  590.                         if(lll != 0)
  591.                         {
  592.                                 dt_sx=2;//等于一向上 ,等于二向下,等于零时不动
  593.                                 shang=0;//等于一显示上,等于零不显示
  594.                                 xia=1;//等于一显示下,等于零不显示
  595.                         }
  596.                 }
  597.         }
  598. }
  599. /**电梯在移动时进行向下或向上的运动判断*/
  600. void diantipanduan2()                   //向上走时进行判断,判断是否继续向上
  601. {
  602.         uchar jjj;
  603.         if(dt_sx==1)                        //电梯向上走
  604.         {
  605.                 if(dt_cs==1)                      //在一楼时是否继续向上
  606.                 {
  607.                         jjj= dt_c2 + dt_c3 + dt_c4 + dt_c5 + dt_c6 + dt_c7 + dt_c8;
  608.                         if(jjj==0)
  609.                         {
  610.                                 dt_sx=0;
  611.                                 shang=0;
  612.                         }
  613.                         else
  614.                                 dt_stop=1;
  615.                 }
  616.                 else if(dt_cs==2)                 //在二楼时
  617.                 {
  618.                         jjj= dt_c3 + dt_c4 + dt_c5 + dt_c6 + dt_c7 + dt_c8;
  619.                         if(jjj==0)
  620.                         {
  621.                                 dt_sx=0;
  622.                                 shang=0;
  623.                         }
  624.                         else
  625.                                 dt_stop=1;
  626.                 }
  627.                 else if(dt_cs==3)                 //在三楼时
  628.                 {
  629.                         jjj= dt_c4 + dt_c5 + dt_c6 + dt_c7 + dt_c8;
  630.                         if(jjj==0)
  631.                         {
  632.                                 dt_sx=0;
  633.                                 shang=0;
  634.                         }
  635.                         else
  636.                                 dt_stop=1;
  637.                 }                               
  638.                 else if(dt_cs==4)                 //在四楼时
  639.                 {
  640.                         jjj= dt_c5 + dt_c6 + dt_c7 + dt_c8;
  641.                         if(jjj==0)
  642.                         {
  643.                                 dt_sx=0;
  644.                                 shang=0;
  645.                         }
  646.                         else
  647.                                 dt_stop=1;
  648.                 }                       
  649.                 else if(dt_cs==5)                 //在五楼时
  650.                 {
  651.                         jjj= dt_c6 + dt_c7 + dt_c8;
  652.                         if(jjj==0)
  653.                         {
  654.               dt_sx=0;
  655.         shang=0;                               
  656.                         }
  657.                         else
  658.                                 dt_stop=1;
  659.                 }
  660.                 else if(dt_cs==6)                 //在六楼时
  661.                 {
  662.                         jjj= dt_c7 + dt_c8;
  663.                         if(jjj==0)
  664.                         {
  665.                                 dt_sx=0;
  666.                                 shang=0;
  667.                         }
  668.                         else
  669.                                 dt_stop=1;
  670.                 }
  671.                 else if(dt_cs==7)                 //在七楼时
  672.                 {
  673.                         jjj=dt_c8;
  674.                         if(jjj==0)
  675.                         {
  676.                                 dt_sx=0;
  677.                                 shang=0;
  678.                         }
  679.                         else
  680.                                 dt_stop=1;
  681.                 }
  682.                 else if(dt_cs==8)                 //在八楼时
  683.                 {
  684.                         dt_sx=0;
  685.                         shang=0;
  686.                         dt_stop=1;
  687.                 }
  688.         }
  689. }
  690. void diantipanduan3()                   //向下走时进行判断,判断是否继续向下
  691. {
  692.         uchar hhh;
  693.         if(dt_sx==2)
  694.         {
  695.                 if(dt_cs==1)        ///在一楼时判断是否继续向下
  696.                 {
  697.                         dt_sx=0;
  698.                         xia=0;
  699.                         shang=0;
  700.                         dt_stop=1;
  701. //                        shangxiabioashi();
  702.                 }
  703.                 else if(dt_cs==2)   ///在二楼时
  704.                 {
  705.                         hhh=dt_c1;
  706.                         if(hhh==0)
  707.                         {
  708.                                 dt_sx=0;
  709.                                 xia=0;
  710.                         }
  711.                         else
  712.                                 dt_stop=1;
  713.                 }
  714.                 else if(dt_cs==3)   ///在三楼时
  715.                 {
  716.                         hhh=dt_c1+dt_c2;
  717.                         if(hhh==0)
  718.                         {
  719.                                 dt_sx=0;
  720.                                 xia=0;
  721.                         }
  722.                         else
  723.                                 dt_stop=1;
  724.                 }
  725.                 else if(dt_cs==4)   ///在四楼时
  726.                 {
  727.                         hhh=dt_c1+dt_c2+dt_c3;
  728.                         if(hhh==0)
  729.                         {
  730.                                 dt_sx=0;
  731.                           xia=0;
  732.                         }
  733.                         else
  734.                                 dt_stop=1;
  735.                 }
  736.                 else if(dt_cs==5)   ///在五楼时
  737.                 {
  738.                         hhh=dt_c1+dt_c2+dt_c3+dt_c4;
  739.                         if(hhh==0)
  740.                         {
  741.                                 dt_sx=0;
  742.                                 xia=0;
  743.                         }
  744.                         else
  745.                                 dt_stop=1;
  746.                 }
  747.                 else if(dt_cs==6)   ///在六楼时
  748.                 {
  749.                         hhh=dt_c1+dt_c2+dt_c3+dt_c4+dt_c5;
  750.                         if(hhh==0)
  751.                         {
  752.                                 dt_sx=0;
  753.                                 xia=0;
  754.                         }
  755.                         else
  756.                                 dt_stop=1;
  757.                 }
  758.                 else if(dt_cs==7)   ///在七楼时
  759.                 {
  760.                         hhh=dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6;
  761.                         if(hhh==0)
  762.                         {
  763.                                 dt_sx=0;
  764.                                 xia=0;
  765.                         }
  766.                         else
  767.                                 dt_stop=1;
  768.                 }
  769.                 else if(dt_cs==8)   ///在八楼时
  770.                 {
  771.                         hhh=dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7;
  772.                         if(hhh==0)
  773.                         {
  774.                                 dt_sx=0;
  775.                                 xia=0;
  776.                         }
  777.                         else
  778.                                 dt_stop=1;
  779.                 }
  780.         }
  781. }
  782. /**********电梯总判断************/
  783. void diantiting()                       //控制电梯停靠
  784. {
  785.         uchar ggg,fff;
  786.         ggg=dt_c1+dt_c2+dt_c3+dt_c4+dt_c5+dt_c6+dt_c7+dt_c8;
  787.         if(ggg != 0)
  788.         {
  789.                 if(dt_stop == 1 )
  790.     {
  791.                  if(dt_sx != 0)
  792.                  {
  793.                          fff++;
  794.                          if(fff>=20)
  795.                          {
  796.                                  fff=0;
  797.                                  if(dt_sx == 1)                  //向上走
  798.                                   {
  799.                                           dt_cs++;
  800.                                           shang=1;
  801.                                                 shangxiabioashi();
  802.                                   }
  803.                                   if(dt_sx == 2)                  //向下走
  804.                                   {
  805.                                           dt_cs--;
  806.                                           xia=1;
  807.                                                 shangxiabioashi();
  808.                                   }
  809.                                   if(dt_cs==1)                   //是否在一楼停下
  810.                                   {
  811.                                           if(dt_c1==1)
  812.                                           {
  813.                                                         dt_c1=0;
  814.                                             dt_stop=0;       
  815.                                                         kye_1=0;
  816.               value=0;
  817.                                       l1=1;
  818.                                                         S=0;
  819.                                             if(l1==1)
  820.                                                   {       

  821.                                                           l1=0;
  822.                                                     SendData(0x0a);
  823.                       SendData(0x01);
  824.                       SendData(0x0b);               
  825.                                                   }
  826.                                           }
  827.                                   }
  828.                                   else if(dt_cs==2)              //是否在二楼停下
  829.                                   {
  830.                                           if(dt_c2==1)
  831.                                           {
  832.                                                         dt_c2=0;
  833.                                             dt_stop=0;       
  834.                                                         kye_2=0;
  835.               value1=0;
  836.               l2=1;
  837.                                                         S=0;
  838.                                                   if(l2==1)
  839.                                                   {       
  840.                                                           l2=0;
  841.                                                     SendData(0x0a);
  842.                       SendData(0x02);
  843.                       SendData(0x0b);               
  844.                                                   }
  845.                                           }       
  846.                                   }
  847.                                   else if(dt_cs==3)              //三楼
  848.                                   {
  849.                                           if(dt_c3==1)
  850.                                           {
  851.                                                         dt_c3=0;
  852.                                                
  853.                                             dt_stop=0;
  854.                                                         kye_1=0;
  855.               value1=0;
  856.                                              l3=1;
  857.                                                         S=0;
  858.               if(l3==1)
  859.                                                   {       
  860.                                                           l3=0;
  861.                                                           SendData(0x0a);
  862.                       SendData(0x03);
  863.                       SendData(0x0b);               
  864.                                                   }       
  865.                                           }
  866.                                   }
  867.                                   else if(dt_cs==4)              //四楼
  868.                                   {
  869.                                           if(dt_c4==1)
  870.                                           {
  871.                                                         dt_c4=0;                                               
  872.                                                   dt_stop=0;
  873.                                                         kye_4=0;
  874.               value1=0;
  875.                                                   l4=1;
  876.                                                         S=0;
  877.                                                   if(l4==1)
  878.                                                   {       
  879.                                                           l4=0;
  880.                                                     SendData(0x0a);
  881.                       SendData(0x04);
  882.                       SendData(0x0b);               
  883.                                                   }
  884.                                           }
  885.                                   }
  886.                                   else if(dt_cs==5)              //五楼
  887.                                   {
  888.                                           if(dt_c5==1)
  889.                                           {
  890.                                                         dt_c5=0;                                               
  891.                                                   dt_stop=0;
  892.                                                         kye_5=0;
  893.               value1=0;
  894.                                                   l5=1;
  895.                                                         S=0;
  896.                                                   if(l5==1)
  897.                                                   {       
  898.                                                           l5=0;
  899.                             SendData(0x0a);
  900.                       SendData(0x05);
  901.                       SendData(0x0b);               
  902.                                                   }
  903.                                           }
  904.                                   }
  905.                                   else if(dt_cs==6)              //六楼
  906.                                   {
  907.                                            if(dt_c6==1)
  908.                                           {
  909.                                                  dt_c6=0;                                               
  910.                                                  dt_stop=0;
  911.                                                  kye_6=0;
  912.              value1=0;
  913.                                                  l6=1;
  914.                                                         S=0;
  915.                                                  if(l6==1)
  916.                                                  {
  917.                                                          l6=0;
  918.                                                          SendData(0x0a);
  919.                      SendData(0x06);
  920.                      SendData(0x0b);               
  921.                                                  }
  922.                                          }
  923.                                  }
  924.                                   else if(dt_cs==7)              //七楼
  925.                                   {
  926.                                          if(dt_c7==1)
  927.                                          {
  928.                                                  dt_c7=0;
  929.                                                  dt_stop=0;
  930.                                                  kye_7=0;
  931.              value1=0;
  932.                                                  l7=1;
  933.                                                  S=0;
  934.                                                  if(l7==1)
  935.                                                  {       
  936.                                                          l7=0;
  937.                                        SendData(0x0a);
  938.                      SendData(0x07);
  939.                      SendData(0x0b);               
  940.                                                  }
  941.                                          }
  942.                                  }
  943.                                   else if(dt_cs==8)              //八楼
  944.                                   {
  945.                                          if(dt_c8==1)
  946.                                          {
  947.                                                  dt_c8=0;                                         
  948.                                                  dt_stop=0;
  949.                                                  kye_8=0;
  950.              value1=0;
  951.                                                  l8=1;
  952.                                                  S=0;
  953.                                                  if(l8==1)
  954.                                                  {       
  955.                                                          l8=0;
  956.                                                          SendData(0x0a);
  957.                      SendData(0x08);
  958.                      SendData(0x0b);               
  959.                                                  }
  960.                                          }
  961.                                  }       
  962.                           }                 
  963.                          }                        
  964.                  }                       
  965.          }
  966.         if(dt_stop == 0)                     
  967.         {
  968.           value++;
  969.                 if(value%5 == 0)
  970.                 {
  971.                         if(dt_sx == 1)
  972.                         {
  973. //                                shang=~shang;
  974.                         }
  975.                         if(dt_sx == 2)
  976.                         {
  977. //                          xia=~xia;
  978.                         }               
  979.                 }
  980.                 if(value >= 20)
  981.                 {
  982.                         value=0;
  983.                         diantipanduan2();                 //电体向上时,进行是否继续向上的判别
  984.                         diantipanduan3();                 //电梯向下时,进行是否继续向下的判别
  985.                 }
  986.         }
  987. }
  988. void time_init()                        //定时器0的初始化
  989. {
  990.         TMOD = 0x01;                          //定时器0、工作方式1、定时模式、非门控方式
  991.   TH0 =0x0D8;
  992.   TL0 =0x0F0;;                          // 0x3CB0=15536,方式一,定时50ms
  993.   EA = 1;                                            //开总中断
  994.   ET0 = 1;                                    //开定时器0中断
  995.   TR0 = 1;                                    //允许定时器0定时
  996.         EX0=1;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
  997. }
  998. void main()                             //主函数
  999. {
  1000.         lcd_init();                           //1602初始化
  1001.         time_init();                          //定时器初始化
  1002.   while(1)
  1003.         {

  1004.                 key();                                   //矩阵按键的识别   
  1005.                 if(key_value < 20)
  1006.                 {          
  1007.                         if(dt_sx == 0)
  1008.                         {
  1009.                                 value = 0;
  1010.                                 dt_stop = 1;
  1011.                         }
  1012.                 change();                                     //矩阵数据的转换
  1013.                 }  
  1014.                 yaoquloucheng();
  1015.                 diantipanudan1();                      //当电梯停下时进行运动判断
  1016.           dangqianlouceng();                     //显示函数
  1017.                 shangxiabioashi();
  1018.                 if(time_ting==1)
  1019.                 {
  1020.                         time_ting=0;
  1021.                   diantiting();                        //电梯总控制                       
  1022.                 }
  1023.                 dianjiqudong1();                       //电机驱动上下楼
  1024.                 dianjiqudong2();                       //电机驱动开关门
  1025.         }
  1026. }
  1027. void zhongduan() interrupt 0            //外部中断触发警报
  1028. {
  1029.   deep=0;
  1030. }
  1031. void time_0() interrupt 1               //定时器函数
  1032. {
  1033.         TH0 = (65534-45872)/256;
  1034.         TL0 = (65534-45872)%256;                                //重新装载初值
  1035.         value1 ++;
  1036.         time_ms++;
  1037.         S++;
  1038.         if(time_ms==8)
  1039.         {
  1040.                 time_ms=1;
  1041.                 time_ting=1;
  1042.         }
  1043.         if(S==40)
  1044.         {
  1045.                 dj_1=1;
  1046.                 dj_3=1;
  1047.         }
  1048.         if(S==80)
  1049.         {
  1050.                 dj_1=0;
  1051.                 dj_3=0;
  1052.         }
  1053.         if(S==100)
  1054.         {
  1055.                 dj_2=1;
  1056.                 dj_3=1;
  1057.         }
  1058.         if(S==140)
  1059.         {
  1060.                 dj_2=0;
  1061.                 dj_3=0;
  1062.                 dj_1=0;
  1063.         }
  1064. }
复制代码

程序:
简易电梯.zip (60.43 KB, 下载次数: 11)

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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