找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机八层电梯系统的原理图,源代码

[复制链接]
跳转到指定楼层
楼主
电路原理图如下:
word版.docx (22.88 KB, 下载次数: 27) 原理图.doc (524.5 KB, 下载次数: 34)



单片机源程序如下:
  1. #include <reg52.h>                 //调用单片机头文件
  2. #define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255
  3. #define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535
  4. uchar code smg_du[]=
  5. {
  6.         0xEE,/*0*/
  7.         0xA0,/*1*/
  8.         0xCD,/*2*/
  9.         0xE9,/*3*/
  10.         0xA3,/*4*/
  11.         0x6B,/*5*/
  12.         0x6F,/*6*/
  13.         0xE0,/*7*/
  14.         0xEF,/*8*/
  15.         0xEB,/*9*/
  16. };        
  17. bit flag_100ms,flag_1s;        
  18. bit flag_stop = 1;   //用做到了相应的楼停下

  19. sbit beep  = P2^7;
  20. sbit xia   = P2^0;
  21. sbit zhong = P2^1;
  22. sbit shang = P2^2;

  23. uchar value2;
  24. uchar flag_start ;     //启动标志位  1为起动步进电机 否则关闭电机
  25. uchar flag_z_f;        //正反标志位  0为顺时钟 1为逆时史上转

  26. sbit led8 = P1^7;          //8个发光二极管定义
  27. sbit led7 = P1^6;
  28. sbit led6 = P1^5;
  29. sbit led5 = P1^4;
  30. sbit led4 = P1^3;
  31. sbit led3 = P1^2;
  32. sbit led2 = P1^1;
  33. sbit led1 = P1^0;

  34. sbit dj1 = P2^6;   //电机IO口定义
  35. sbit dj2 = P2^5;   //电机IO口定义
  36. sbit dj3 = P2^4;   //电机IO口定义
  37. sbit dj4 = P2^3;   //电机IO口定义


  38. uchar dt_1;  //1楼电梯标志位
  39. uchar dt_2;  //2楼电梯标志位
  40. uchar dt_3;  //3楼电梯标志位
  41. uchar dt_4;  //4楼电梯标志位
  42. uchar dt_5;  //5楼电梯标志位
  43. uchar dt_6;  //6楼电梯标志位
  44. uchar dt_7;  //7楼电梯标志位
  45. uchar dt_8;  //8楼电梯标志位

  46. uchar dt_value = 1;  //电梯到哪一层的变量
  47. uchar dt_s_x ;    //电梯上下的标志位

  48. void Delay(unsigned int i)//延时
  49. {
  50.         while(--i);
  51. }

  52. /***********************正转****************************/
  53. void zheng(uchar dat)
  54. {
  55.         switch(dat)
  56.         {
  57.                 case 0: dj1=0;dj2=0;dj3=0;dj4=1; break;
  58.                 case 1: dj1=0;dj2=0;dj3=1;dj4=0; break;
  59.                 case 2: dj1=0;dj2=1;dj3=0;dj4=0; break;
  60.                 case 3: dj1=1;dj2=0;dj3=0;dj4=0; break;
  61.         }
  62. }

  63. /***********************反转****************************/
  64. void fan(uchar dat)
  65. {
  66.         switch(dat)
  67.         {
  68.                 case 0: dj1=1;dj2=0;dj3=0;dj4=0; break;
  69.                 case 1: dj1=0;dj2=1;dj3=0;dj4=0; break;
  70.                 case 2: dj1=0;dj2=0;dj3=1;dj4=0; break;
  71.                 case 3: dj1=0;dj2=0;dj3=0;dj4=1; break;
  72.         }
  73. }

  74. /***********************1ms延时函数*****************************/
  75. void delay_1ms(uint q)
  76. {
  77.         uint i,j;
  78.         for(i=0;i<q;i++)
  79.                 for(j=0;j<120;j++);
  80. }


  81. /********************独立按键程序*****************/
  82. uchar key_can;         //按键值

  83. void key()         //独立按键程序
  84. {
  85.         static uchar key_new;
  86.         key_can = 20;                   //按键值还原
  87.         P3 |= 0xff;
  88.         if(P3 != 0xff)                //按键按下
  89.         {
  90.                 delay_1ms(1);                     //按键消抖动
  91.                 if((P3 != 0xff) && (key_new == 1))
  92.                 {                                                //确认是按键按下
  93.                         key_new = 0;
  94.                         switch(P3)
  95.                         {
  96.                                 case 0xfe: key_can = 1; break;          //得到按键值
  97.                                 case 0xfd: key_can = 2; break;          //得到按键值
  98.                                 case 0xfb: key_can = 3; break;          //得到按键值
  99.                                 case 0xf7: key_can = 4; break;          //得到按键值
  100.                                 case 0xef: key_can = 5; break;          //得到按键值
  101.                                 case 0xdf: key_can = 6; break;          //得到按键值
  102.                                 case 0xbf: key_can = 7; break;          //得到按键值
  103.                                 case 0x7f: key_can = 8; break;          //得到按键值
  104.                         }
  105.                 }                        
  106.         }
  107.         else
  108.                 key_new = 1;        
  109. }

  110. void key_with()
  111. {
  112.         if(key_can == 1)
  113.         {
  114.                 led1 = 1;         //点亮发光二极管
  115.                 dt_1 = 1;         //
  116.         }               
  117.         if(key_can == 2)
  118.         {
  119.                 led2 = 1;         //点亮发光二极管
  120.                 dt_2 = 1;
  121.         }        
  122.         if(key_can == 3)
  123.         {
  124.                 led3 = 1;        //点亮发光二极管
  125.                 dt_3 = 1;
  126.         }        
  127.         if(key_can == 4)
  128.         {
  129.                 led4 = 1;        //点亮发光二极管
  130.                 dt_4 = 1;
  131.         }        
  132.         if(key_can == 5)
  133.         {
  134.                 led5 = 1;        //点亮发光二极管
  135.                 dt_5 = 1;
  136.         }        
  137.         if(key_can == 6)
  138.         {
  139.                 led6 = 1;        //点亮发光二极管
  140.                 dt_6 = 1;
  141.         }        
  142.         if(key_can == 7)
  143.         {
  144.                 led7 = 1;        
  145.                 dt_7 = 1;
  146.         }        
  147.         if(key_can == 8)
  148.         {
  149.                 led8 = 1;        
  150.                 dt_8 = 1;
  151.         }        
  152. }
  153. /*********************当电梯不动时、判断是向上、还是向下**********************/
  154. void tiandi_shang_xia()
  155. {
  156.         static uchar value;
  157.         if(dt_s_x == 0)
  158.         {
  159.                
  160.                 flag_stop = 1;
  161.                 if(dt_value == 1)         //电梯在第1层停下不走了
  162.                 {
  163.                         value = dt_2 + dt_3 + dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
  164.                         if(value != 0)
  165.                         {
  166.                                 dt_s_x = 1;   //电梯向上        
  167.                                 shang = 0;          //显示上
  168.                                 zhong = 0;        
  169.                                 xia = 1;                                         
  170.                         }
  171.                 }                        
  172.                 if(dt_value == 2)         //电梯在第2层停下不走了
  173.                 {
  174.                         value = dt_3 + dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
  175.                         if(value != 0)
  176.                         {
  177.                                 dt_s_x = 1;   //电梯向上走        
  178.                                 shang = 0;          //显示上
  179.                                 zhong = 0;        
  180.                                 xia = 1;                                         
  181.                         }
  182.                         value = dt_1;
  183.                         if(value != 0)
  184.                         {
  185.                                 dt_s_x = 2;   //电梯向下走        
  186.                                 xia = 0;          //显示下
  187.                                 zhong = 0;        
  188.                                 shang = 1;                                                
  189.                         }        
  190.                 }
  191.                 if(dt_value == 3)         //电梯在第3层停下不走了
  192.                 {
  193.                         value = dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
  194.                         if(value != 0)
  195.                         {
  196.                                 dt_s_x = 1;   //电梯向上走        
  197.                                 shang = 0;          //显示上
  198.                                 zhong = 0;        
  199.                                 xia = 1;                                         
  200.                         }
  201.                         value = dt_1 + dt_2;
  202.                         if(value != 0)
  203.                         {
  204.                                 dt_s_x = 2;   //电梯向下走        
  205.                                 xia = 0;          //显示下
  206.                                 zhong = 0;        
  207.                                 shang = 1;        
  208.                                                                         
  209.                         }        
  210.                 }        
  211.                 if(dt_value == 4)         //电梯在第4层停下不走了
  212.                 {
  213.                         value = + dt_5 + dt_6 + dt_7 + dt_8;
  214.                         if(value != 0)
  215.                         {
  216.                                 dt_s_x = 1;   //电梯向上走        
  217.                                 shang = 0;          //显示上
  218.                                 zhong = 0;        
  219.                                 xia = 1;                                         
  220.                         }
  221.                         value = dt_1 + dt_2 + dt_3;
  222.                         if(value != 0)
  223.                         {
  224.                                 dt_s_x = 2;   //电梯向下走        
  225.                                 xia = 0;          //显示下
  226.                                 zhong = 0;        
  227.                                 shang = 1;                                                
  228.                         }        
  229.                 }        
  230.                 if(dt_value == 5)         //电梯在第5层停下不走了
  231.                 {
  232.                         value = dt_6 + dt_7 + dt_8;
  233.                         if(value != 0)
  234.                         {
  235.                                 dt_s_x = 1;   //电梯向上走        
  236.                                 shang = 0;          //显示上
  237.                                 zhong = 0;
  238.                                 xia = 1;                                                
  239.                         }
  240.                         value = dt_1 + dt_2 + dt_3 + dt_4;
  241.                         if(value != 0)
  242.                         {
  243.                                 dt_s_x = 2;   //电梯向下走        
  244.                                 xia = 0;          //显示下
  245.                                 zhong = 0;        
  246.                                 shang = 1;                                                
  247.                         }        
  248.                 }        
  249.                 if(dt_value == 6)         //电梯在第6层停下不走了
  250.                 {
  251.                         value =  dt_7 + dt_8;
  252.                         if(value != 0)
  253.                         {
  254.                                 dt_s_x = 1;   //电梯向上走        
  255.                                 shang = 0;          //显示上
  256.                                 zhong = 0;
  257.                                 xia = 1;                                                
  258.                         }
  259.                         value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5;
  260.                         if(value != 0)
  261.                         {
  262.                                 dt_s_x = 2;   //电梯向下走        
  263.                                 xia = 0;          //显示下
  264.                                 zhong = 0;        
  265.                                 shang = 1;                                                
  266.                         }        
  267.                 }        
  268.                 if(dt_value == 7)         //电梯在第7层停下不走了
  269.                 {
  270.                         value = dt_8;
  271.                         if(value != 0)
  272.                         {
  273.                                 dt_s_x = 1;   //电梯向上走        
  274.                                 shang = 0;          //显示上
  275.                                 zhong = 0;        
  276.                                 xia = 1;                                         
  277.                         }
  278.                         value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5 + dt_6;
  279.                         if(value != 0)
  280.                         {
  281.                                 dt_s_x = 2;   //电梯向下走        
  282.                                 xia = 0;          //显示下
  283.                                 zhong = 0;        
  284.                                 shang = 1;                                                
  285.                         }        
  286.                 }        
  287.                 if(dt_value == 8)          //电梯在第8层停下不走了
  288.                 {
  289.                         value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5 + dt_6+dt_7;
  290.                         if(value != 0)
  291.                         {
  292.                                 dt_s_x = 2;   //电梯向下走        
  293.                                 xia = 0;          //显示下
  294.                                 zhong = 0;        
  295.                                 shang = 1;                                         
  296.                         }        
  297.                 }        
  298.                 if(dt_s_x == 1)        
  299.                 {                          
  300.                         flag_start = 1 ;     //运行
  301.                         flag_z_f = 0;        //向上
  302.                 }
  303.                 if(dt_s_x == 2)        
  304.                 {                          
  305.                         flag_start = 1 ;     //运行
  306.                         flag_z_f = 1;        //向下
  307.                 }
  308.                 if(dt_s_x == 0)                                 
  309.                 {
  310.                         flag_start = 0 ;     //停下
  311.                         flag_z_f = 1;        //
  312.                 }
  313.         }
  314. }

  315. /****************电梯向上、做最后的判断是否还要继续向上****************/
  316. void dt_shang_guan()
  317. {
  318.         uchar value;
  319.         if(dt_s_x == 1)    //电梯向上  做最后的判断是否还要继续向上
  320.         {
  321.                 if(dt_value == 1)        //在第1层
  322.                 {
  323.                         value = dt_2 + dt_3 + dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
  324.                         if(value == 0)         //说明上面没有人按下
  325.                         {
  326.                                 dt_s_x = 0;  //电梯停下不动了  
  327.                                 shang = 1;                //关闭上字
  328.                                 zhong = 1;  
  329.                         }else
  330.                                 flag_stop = 1;        
  331.                 }               
  332.                 else if(dt_value == 2)        //在第2层
  333.                 {
  334.                         value = dt_3 + dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
  335.                         if(value == 0)         //说明上面没有人按下
  336.                         {
  337.                                 dt_s_x = 0;  //电梯停下不动了  
  338.                                 shang = 1;                //关闭上字
  339.                                 zhong = 1;  
  340.                         }else
  341.                                 flag_stop = 1;        
  342.                 }               
  343.                 else if(dt_value == 3)        //在第3层
  344.                 {
  345.                         value = + dt_6 + dt_7 + dt_8;
  346.                         if(value == 0)         //说明上面没有人按下
  347.                         {
  348.                                 dt_s_x = 0;  //电梯停下不动了  
  349.                                 shang = 1;                //关闭上字
  350.                                 zhong = 1;                                          
  351.                         }else
  352.                                 flag_stop = 1;         
  353.                 }               
  354.                 else if(dt_value == 4)        //在第4层
  355.                 {
  356.                         value = dt_5 + dt_6 + dt_7 + dt_8;
  357.                         if(value == 0)         //说明上面没有人按下
  358.                         {
  359.                                 dt_s_x = 0;  //电梯停下不动了  
  360.                                 shang = 1;                //关闭上字
  361.                                 zhong = 1;  
  362.                         }else
  363.                                 flag_stop = 1;                 
  364.                 }               
  365.                 else if(dt_value == 5)        //在第5层
  366.                 {
  367.                         value = dt_6 + dt_7 + dt_8;
  368.                         if(value == 0)         //说明上面没有人按下
  369.                         {
  370.                                 dt_s_x = 0;  //电梯停下不动了  
  371.                                 shang = 1;                //关闭上字
  372.                                 zhong = 1;  
  373.                         }else
  374.                                 flag_stop = 1;               
  375.                 }               
  376.                 else if(dt_value == 6)        //在第6层
  377.                 {
  378.                         value = dt_7 + dt_8;
  379.                         if(value == 0)         //说明上面没有人按下
  380.             {
  381.                                 dt_s_x = 0;  //电梯停下不动了  
  382.                                 shang = 1;                //关闭上字
  383.                                 zhong = 1;  
  384.                         }else
  385.                                 flag_stop = 1;                        
  386.                 }        
  387.                 else if(dt_value == 7)        //在第7层
  388.                 {
  389.                         value = dt_8;
  390.                         if(value == 0)         //说明上面没有人按下
  391.                         {
  392.                                 dt_s_x = 0;  //电梯停下不动了  
  393.                                 shang = 1;                //关闭上字
  394.                                 zhong = 1;  
  395.                         }else
  396.                                 flag_stop = 1;        
  397.                 }               
  398.                 else if(dt_value == 8)        //在第8层
  399.                 {
  400.                         dt_s_x = 0;  //电梯停下不动了
  401.                         shang = 1;                //关闭上字
  402.                         zhong = 1;         
  403.                 }               
  404.         }        
  405. }

  406. /****************电梯向下、做最后的判断是否还要继续向下****************/
  407. void dt_xia_guan()
  408. {
  409.         uchar value;
  410.         if(dt_s_x == 2)    //电梯向下  做最后的判断是否还要继续向下
  411.         {
  412.                 if(dt_value == 1)        //在第1层
  413.                 {
  414.                         dt_s_x = 0;  //电梯停下不动了
  415.                         xia = 1;                //关闭上字
  416.                         zhong = 1;         
  417.                         flag_stop = 1;        
  418.                 }               
  419.                 else if(dt_value == 2)        //在第2层
  420.                 {
  421.                         value = dt_1;
  422.                         if(value == 0)         //说明上面没有人按下
  423.                         {
  424.                                 dt_s_x = 0;  //电梯停下不动了  
  425.                                 xia = 1;                //关闭上字
  426.                                 zhong = 1;  
  427.                         }else
  428.                                 flag_stop = 1;        
  429.                 }               
  430.                 else if(dt_value == 3)        //在第3层
  431.                 {
  432.                         value = dt_1 + dt_2;
  433.                         if(value == 0)         //说明上面没有人按下
  434.                         {
  435.                                 dt_s_x = 0;  //电梯停下不动了  
  436.                                 xia = 1;                //关闭上字
  437.                                 zhong = 1;                                          
  438.                         }else
  439.                                 flag_stop = 1;         
  440.                 }               
  441.                 else if(dt_value == 4)        //在第4层
  442.                 {
  443.                         value = dt_2 + dt_3;
  444.                         if(value == 0)         //说明上面没有人按下
  445.                         {
  446.                                 dt_s_x = 0;  //电梯停下不动了  
  447.                                 xia = 1;                //关闭上字
  448.                                 zhong = 1;  
  449.                         }else
  450.                                 flag_stop = 1;                 
  451.                 }               
  452.                 else if(dt_value == 5)        //在第5层
  453.                 {
  454.                         value = dt_1 + dt_2 + dt_4;
  455.                         if(value == 0)         //说明上面没有人按下
  456.                         {
  457.                                 dt_s_x = 0;  //电梯停下不动了  
  458.                                 xia = 1;                //关闭上字
  459.                                 zhong = 1;  
  460.                         }else
  461.                                 flag_stop = 1;               
  462.                 }               
  463.                 else if(dt_value == 6)        //在第6层
  464.                 {
  465.                         value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5;
  466.                         if(value == 0)         //说明上面没有人按下
  467.             {
  468.                                 dt_s_x = 0;  //电梯停下不动了  
  469.                                 xia = 1;                //关闭上字
  470.                                 zhong = 1;  
  471.                         }else
  472.                                 flag_stop = 1;                        
  473.                 }        
  474.                 else if(dt_value == 7)        //在第7层
  475.                 {
  476.                         value = dt_1 + dt_2  + dt_4 + dt_5+ dt_6;
  477.                         if(value == 0)         //说明上面没有人按下
  478.                         {
  479.                                 dt_s_x = 0;  //电梯停下不动了  
  480.                                 xia = 1;                //关闭上字
  481.                                 zhong = 1;  
  482.                         }else
  483.                                 flag_stop = 1;        
  484.                 }               
  485.                 else if(dt_value == 8)        //在第8层
  486.                 {
  487.                         value =   dt_3 + dt_4 + dt_5 + dt_6 + dt_7;
  488.                         if(value == 0)         //说明上面没有人按下
  489.                         {
  490.                                 dt_s_x = 0;  //电梯停下不动了  
  491.                                 xia = 1;                //关闭上字
  492.                                 zhong = 1;  
  493.                         }else
  494.                                 flag_stop = 1;        

  495.                         
  496.                 }               
  497.         }               
  498. }

  499. /***********************电梯处理函数************************/
  500. void td_dis()
  501. {
  502.         uchar value,value1;
  503.         value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
  504.         if(value != 0)
  505.         {                   //100ms
  506.                 if(flag_stop == 1)        //到相应的楼了  要停下
  507.                 {
  508. /***************************向上走电梯***********************************/        
  509.                         if(dt_s_x != 0)                  //向上走电梯
  510.                         {
  511.                                 value1 ++;
  512.                                 if(value1 >= 10)  //1s
  513.                                 {
  514.                                         value1 = 0;
  515.                                         if(dt_s_x == 1)                  //向上走电梯
  516.                                         {
  517.                                                 dt_value ++;
  518.                                                 shang = 0;                //显示上字
  519.                                                 zhong = 0;
  520.                                         }
  521.                                         if(dt_s_x == 2)                  //向下走电梯
  522.                                         {
  523.                                                 dt_value --;
  524.                                                 xia = 0;                //显示下字
  525.                                                 zhong = 0;
  526.                                         }                                       
  527.                                         if(dt_value == 1)           //当到了第一层的时候
  528.                                         {
  529.                                                 if(dt_1 == 1)
  530.                                                 {
  531.                                                         led1 = 0;                 //关闭第一层发光二极管
  532.                                                         dt_1 = 0;        //清零电机在的标志
  533.                                                         flag_stop = 0;   //到停下
  534.                                                         beep = 0;        //打开蜂鸣器
  535.                                                 }                                 
  536.                                         }
  537.                                         else if(dt_value == 2)           //当到了第二层的时候
  538.                                         {
  539.                                                 if(dt_2 == 1)
  540.                                                 {
  541.                                                         led2 = 0;                 //关闭第二层发光二极管
  542.                                                         dt_2 = 0;        //清零电机在的标志
  543.                                                         flag_stop = 0;   //到停下
  544.                                                         beep = 0;        //打开蜂鸣器
  545.                                                 }                                 
  546.                                         }
  547.                                         else if(dt_value == 3)           //当到了第3层的时候
  548.                                         {
  549.                                                 if(dt_3 == 1)
  550.                                                 {
  551.                                                         led3 = 0;                 //关闭第3层发光二极管
  552.                                                         dt_3 = 0;        //清零电机在的标志
  553.                                                         flag_stop = 0;   //到停下
  554.                                                         beep = 0;        //打开蜂鸣器
  555.                                                 }                                 
  556.                                         }
  557.                                         else if(dt_value == 4)           //当到了第4层的时候
  558.                                         {
  559.                                                 if(dt_4 == 1)
  560.                                                 {
  561.                                                         led4 = 0;                 //关闭第4层发光二极管
  562.                                                         dt_4 = 0;        //清零电机在的标志
  563.                                                         flag_stop = 0;   //到停下
  564.                                                         beep = 0;        //打开蜂鸣器
  565.                                                 }                                 
  566.                                         }
  567.                                         else if(dt_value == 5)           //当到了第5层的时候
  568.                                         {
  569.                                                 if(dt_5 == 1)
  570.                                                 {
  571.                                                         led5 = 0;                 //关闭第5层发光二极管
  572.                                                         dt_5 = 0;        //清零电机在的标志
  573.                                                         flag_stop = 0;   //到停下
  574.                                                         beep = 0;        //打开蜂鸣器
  575.                                                 }                                 
  576.                                         }
  577.                                         else if(dt_value == 6)           //当到了第6层的时候
  578.                                         {
  579.                                                 if(dt_6 == 1)
  580.                                                 {
  581.                                                         led6 = 0;                 //关闭第6层发光二极管
  582.                                                         dt_6 = 0;        //清零电机在的标志
  583.                                                         flag_stop = 0;   //到停下
  584.                                                         beep = 0;        //打开蜂鸣器
  585.                                                 }                                 
  586.                                         }
  587.                                         else if(dt_value == 7)           //当到了第7层的时候
  588.                                         {
  589.                                                 if(dt_7 == 1)
  590.                                                 {
  591.                                                         led7 = 0;                 //关闭第7层发光二极管
  592.                                                         dt_7 = 0;        //清零电机在的标志
  593.                                                         flag_stop = 0;   //到停下
  594.                                                         beep = 0;        //打开蜂鸣器
  595.                                                 }                                 
  596.                                         }
  597.                                         else if(dt_value == 8)           //当到了第8层的时候
  598.                                         {
  599.                                                 if(dt_8 == 1)
  600.                                                 {
  601.                                                         led8 = 0;                 //关闭第8层发光二极管
  602.                                                         dt_8 = 0;        //清零电机在的标志
  603.                                                         flag_stop = 0;   //到停下
  604.                                                         beep = 0;        //打开蜂鸣器
  605.                                                 }                                 
  606.                                         }
  607.                                 }
  608.                         }               
  609.                 }                                                
  610.         }
  611.         if(flag_stop == 0)
  612.         {
  613.                 value2 ++;
  614.                 if(value2 % 5 == 0)
  615.                 {
  616.                         if(dt_s_x == 1)           //上
  617.                         {
  618.                                 shang = ~shang;
  619.                                 zhong = ~zhong;                                
  620.                         }
  621.                         if(dt_s_x == 2)           //下
  622.                         {
  623.                                 zhong = ~zhong;
  624.                                 xia = ~xia;                                
  625.                         }               
  626.                 }
  627.                 if(value2 >= 10) //1.0s
  628.                 {                        
  629.                         beep = 1;  //关闭蜂鸣器
  630.                 }
  631.                 if(value2 >= 20)
  632.                 {
  633.                         value2 = 0;                                 
  634.                         dt_shang_guan();  //电梯向上  做最后的判断是否还要继续向上
  635.                         dt_xia_guan();          //电梯向下  做最后的判断是否还要继续向下
  636.                 }
  637.         }        
  638. }
  639. /*************定时器0初始化程序***************/
  640. void time_init()         
  641. {
  642.         EA   = 1;                   //开总中断
  643.         TMOD = 0X01;          //定时器0、工作方式1
  644.         ET0  = 1;                  //开定时器0中断
  645.         TR0  = 1;                  //允许定时器0定时
  646. }

  647. /******************主程序**********************/           
  648. void main()
  649. {
  650.         uchar i;
  651.         P1 = 0x00;
  652.         P0 = 0X00;           //单片机IO口初始化
  653.         time_init();   //定时器初始化
  654.         while(1)
  655.         {
  656.                 key();                  //按键程序
  657.                 if(key_can < 20)
  658.                 {         
  659.                         if(dt_s_x == 0)
  660.                         {
  661.                                 value2 = 0;
  662.                                 flag_stop = 1;
  663.                         }
  664.                         key_with();               
  665.                 }
  666.                
  667.                 tiandi_shang_xia();          //当电梯不动时、判断是向上、还是向下
  668.                
  669.                 P0 = ~smg_du[dt_value];          //显示
  670.                
  671.                 if(flag_100ms  == 1)
  672.                 {
  673.                         flag_100ms = 0;
  674.                         td_dis();                 //电梯处理函数
  675.                 }
  676.                 if(flag_start == 1)
  677.                 {
  678.                         for(i=0;i<4;i++)                    //4相
  679.                         {
  680.                                 if(flag_z_f == 0)
  681.                                 {
  682.                                         zheng(i);      //电机正转
  683.                                 }
  684.                                 else
  685.                                 {
  686.                                         fan(i);        //电机反转
  687.                                 }
  688.                                 Delay(650);        //改变这个参数可以调整电机转速
  689.                         }
  690.                 }
  691.         }
  692. }

  693. /*************定时器0中断服务程序***************/
  694. void time0_int() interrupt 1
  695. {        
  696.         static uchar value;
  697.         TH0 = 0x3c;
  698.         TL0 = 0xb0;     // 50ms
  699.         value ++;
  700.         if(value % 2 == 0)
  701.         {
  702.                 flag_100ms = 1 ;
  703.         }
  704. }
复制代码

所有资料51hei提供下载:
程序.docx (18.57 KB, 下载次数: 29)



评分

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

查看全部评分

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

使用道具 举报

沙发
ID:450700 发表于 2018-12-20 21:38 | 只看该作者
有仿真图吗,发一下附件
回复

使用道具 举报

板凳
ID:99693 发表于 2019-1-4 14:14 | 只看该作者
看着这代码感觉这个电梯要出事故啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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