找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机电梯设计内外机程序源码

[复制链接]
跳转到指定楼层
楼主
ID:578150 发表于 2025-11-28 16:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
内机:

  1. /**********************************
  2. 包含头文件
  3. **********************************/
  4. #include "main.h"
  5. #include "key.h"
  6. #include "tube.h"
  7. #include "timer.h"
  8. #include "uart.h"
  9. #include "interrupt.h"


  10. /**********************************
  11. 变量定义
  12. **********************************/
  13. uchar key_num = 0;                                                                                        //按键扫描标志位
  14. uint time_num = 0;                                                                                        //10ms计时变量

  15. bit flag_send = 0;                      //发送标志位

  16. bit flag_abnormal = 0;                  //电梯异常标志位

  17. uchar current_old = 0;                  //上次当前楼层
  18. uchar current_floor = 1;                //当前楼层
  19. uint target_floor = 1;                  //目标楼层
  20. uchar flag_floor_u[10] = {0};           //楼层上标志位
  21. uchar flag_floor_d[10] = {0};           //楼层下标志位
  22. bit flag_stop = 1;                      //到达目标楼层停留完成否标志位

  23. extern bit flag_door;                   //电梯门的状态
  24. uint flag_lift = 0;                     //当前升降标志位
  25. extern bit flag_bujin_1_o;                                                        //升降步进电机正转标志位
  26. extern bit flag_bujin_1_c;                                                        //升降步进电机反转标志位
  27. extern bit flag_bujin_2_o;                                                        //门步进电机正转标志位
  28. extern bit flag_bujin_2_c;                                                        //门步进电机反转标志位

  29. bit flag_maopi = 0;                                                                            //第一次毛皮重量标志位
  30. ulong weight_maopi = 0;                                                                  //毛皮重量
  31. uint  weight_value = 0;                                                                  //重量值
  32. uint  weight_test = 0;                                                                  //重量值

  33. uchar send_buf[10]={0x99,0x00};         //发送数组;

  34. extern uchar uart_buf[16];              //串口接收缓存区
  35. extern uchar uart_count;                //串口接收计数

  36. extern bit flag_timer_begin;                                                //计时开始标志位
  37. extern bit flag_time;                                                                //定时1s完成标志位

  38. extern bit flag_timer_begin_s;          //停留时间开始标志位
  39. extern bit flag_time_s;                 //停留时间到达标志位
  40. extern uint timer1_count_s;             //停留时间计数

  41. extern uchar Speed;

  42. extern bit Stop_Flag ;                                                                                                                        //升降步进电机停止标志位
  43. extern bit speed_alarm;                                                                                //速度
  44. extern bit Stop;                                                                                                                        //升降步进电机停止标志位

  45. /**********************************
  46. 函数声明
  47. **********************************/
  48. void Delay_function(uint x);                                                //延时函数(ms)
  49. void Key_function(void);                                                        //按键函数
  50. void Monitor_function(void);                                                //监测函数
  51. void Display_function(void);                                                //显示函数
  52. void Manage_function(void);                                                        //处理函数


  53. /****
  54. *******        主函数
  55. *****/
  56. void main()
  57. {
  58.   Timer0_Init();                                                       //定时器0初使化函数
  59.   Delay_function(50);                                                          //延时50ms
  60.   Uart_Init();                                                                      //串口初始化函数
  61.   Delay_function(50);                   //延时50ms
  62.   Exter0_Init();                                                                  //外部中断0初使化函数
  63.   Delay_function(50);                   //延时50ms
  64.   
  65.         while(1)
  66.         {
  67.                 Key_function();                                                                                //按键函数
  68. //                Monitor_function();                                                                        //监测函数
  69.                 Display_function();                                                                        //显示函数
  70.                 Manage_function();                                                                        //处理函数
  71.    
  72.                 Delay_function(10);                                                                        //延时10ms
  73.                 time_num++;                                                                                        //计时变量+1
  74.                 if(time_num == 5000)
  75.                 {
  76.                         time_num = 0;
  77.                 }
  78.         }
  79. }

  80. /****
  81. *******        延时 x ms函数
  82. *****/
  83. void Delay_function(uint x)
  84. {
  85.         uint m,n;
  86.         for(m=x;m>0;m--)
  87.     for(n=110;n>0;n--);
  88. }

  89. /****
  90. *******按键函数
  91. *****/
  92. void Key_function(void)
  93. {
  94.         key_num = Matrix_Keyboard_Scan();                   //按键扫描
  95.         if(key_num != 0xff)                                                                                //有按键按下
  96.         {
  97.                 switch(key_num)
  98.                 {
  99.                         case 1:                                                                                                                //按键1,一楼按下
  100.         if(current_floor > 1)       //如果当前楼层高于一楼,标记一楼下
  101.           flag_floor_d[1] = 1;
  102.         else if(current_floor < 1)  //如果当前楼层低于一楼,标记一楼上
  103.           flag_floor_u[1] = 1;
  104.                                 
  105.                                 Stop = 0;
  106.                         break;

  107.                         case 2:                                                                                                                //按键2,二楼按下
  108.         if(current_floor > 2)       //如果当前楼层高于二楼,标记二楼下
  109.           flag_floor_d[2] = 2;
  110.         else if(current_floor < 2)  //如果当前楼层低于二楼,标记二楼上
  111.           flag_floor_u[2] = 2;
  112.                                 
  113.                                 Stop = 0;
  114.                         break;

  115.                         case 3:                                                                                                                //按键3,三楼按下
  116.         if(current_floor > 3)       //如果当前楼层高于三楼,标记三楼下
  117.           flag_floor_d[3] = 3;
  118.         else if(current_floor < 3)  //如果当前楼层低于三楼,标记三楼上
  119.           flag_floor_u[3] = 3;
  120.                                 
  121.                                 Stop = 0;
  122.                         break;

  123.       case 4:                                                                                                        //按键4,开门
  124.         if(flag_bujin_1_o == 0 && flag_bujin_1_c == 0) //当前电梯未运行
  125.         {
  126.           flag_stop = 0;                  //标记未停留完成
  127.           if(flag_bujin_2_c == 1)         //如果正在关门,将门打开
  128.           {
  129.             flag_door = 0;
  130.           }
  131.           else                           //还没关门,清除停留时间计数
  132.           {
  133.             timer1_count_s = 0;
  134.           }
  135.         }
  136.                         break;

  137.       case 5:                                                                                                        //按键5,关门
  138.         if(flag_bujin_1_o == 0 && flag_bujin_1_c == 0 && YL==1 && INFRARED == 0) //当前电梯未运行
  139.         {
  140.           if(flag_bujin_2_o == 1)         //如果正在开,将门关闭
  141.           {
  142.             flag_stop = 1;
  143.             flag_door = 1;
  144.           }
  145.           else                            //如果门未在运动,直接停留完成
  146.           {
  147.             timer1_count_s = 3000;
  148.           }
  149.         }
  150.                         break;

  151.                         case 6:                                                                                                        //按键6,呼叫
  152.         RELAY = ~RELAY;
  153.                         RELAY = 0;
  154. //                                while(key_num==6);
  155.                         break;

  156.                         case 7:                                                                                                        //按键7,停止
  157.                                 Stop = ~Stop;
  158. //                                while(key_num==7);
  159.                         break;

  160.                         case 8:                                                                                                        
  161.                                 if(Speed==3)
  162.                                         Speed=0;
  163.                                 else
  164.                                         Speed=3;
  165. //                                while(key_num==8);
  166.                         break;
  167.                         
  168.                         case 9:                                                                                                        

  169.                         break;
  170.                                 
  171.                         default:
  172.                         break;
  173.                 }
  174.         }
  175. }

  176. /****
  177. *******监测函数
  178. *****/
  179. void Monitor_function(void)
  180. {
  181.   if(uart_count >= 2)         //如果接收到两个字节,标记相应楼层
  182.   {
  183.     if(uart_buf[1] == 0x11)
  184.     {
  185.       flag_floor_d[1] = 1;
  186.                         if(current_floor==1)
  187.                         {
  188.                                 flag_stop = 0;                  //标记未停留完成
  189.                                 if(flag_bujin_2_c == 1)         //如果正在关门,将门打开
  190.                                 {
  191.                                         flag_door = 0;
  192.                                 }
  193.                                 else                           //还没关门,清除停留时间计数
  194.                                 {
  195.                                         timer1_count_s = 0;
  196.                                 }
  197.                         }
  198.                         
  199.                         Stop = 0;
  200.     }
  201.     else if(uart_buf[1] == 0x21)
  202.     {
  203.       flag_floor_u[2] = 2;
  204.                         if(current_floor==2)
  205.                         {
  206.                                 flag_stop = 0;                  //标记未停留完成
  207.                                 if(flag_bujin_2_c == 1)         //如果正在关门,将门打开
  208.                                 {
  209.                                         flag_door = 0;
  210.                                 }
  211.                                 else                           //还没关门,清除停留时间计数
  212.                                 {
  213.                                         timer1_count_s = 0;
  214.                                 }
  215.                         }
  216.                         
  217.                         Stop = 0;
  218.     }
  219.     else if(uart_buf[1] == 0x22)
  220.     {
  221.       flag_floor_d[2] = 2;
  222.                         if(current_floor==2)
  223.                         {
  224.                                 flag_stop = 0;                  //标记未停留完成
  225.                                 if(flag_bujin_2_c == 1)         //如果正在关门,将门打开
  226.                                 {
  227.                                         flag_door = 0;
  228.                                 }
  229.                                 else                           //还没关门,清除停留时间计数
  230.                                 {
  231.                                         timer1_count_s = 0;
  232.                                 }
  233.                         }
  234.                         
  235.                         Stop = 0;
  236.     }
  237.     else if(uart_buf[1] == 0x31)
  238.     {
  239.       flag_floor_u[3] = 3;
  240.                         if(current_floor==3)
  241.                         {
  242.                                 flag_stop = 0;                  //标记未停留完成
  243.                                 if(flag_bujin_2_c == 1)         //如果正在关门,将门打开
  244.                                 {
  245.                                         flag_door = 0;
  246.                                 }
  247.                                 else                           //还没关门,清除停留时间计数
  248.                                 {
  249.                                         timer1_count_s = 0;
  250.                                 }
  251.                         }
  252.                         
  253.                         Stop = 0;
  254.     }
  255.     else if(uart_buf[1] == 0x32)
  256.     {
  257.       flag_floor_d[3] = 3;
  258.                         if(current_floor==3)
  259.                         {
  260.                                 flag_stop = 0;                  //标记未停留完成
  261.                                 if(flag_bujin_2_c == 1)         //如果正在关门,将门打开
  262.                                 {
  263.                                         flag_door = 0;
  264.                                 }
  265.                                 else                           //还没关门,清除停留时间计数
  266.                                 {
  267.                                         timer1_count_s = 0;
  268.                                 }
  269.                         }
  270.                         
  271.                         Stop = 0;
  272.     }
  273. //    else if(uart_buf[1] == 0x41)
  274. //    {
  275. //      flag_floor_u[4] = 4;
  276. //    }
  277. //    else if(uart_buf[1] == 0x42)
  278. //    {
  279. //      flag_floor_d[4] = 4;
  280. //    }
  281. //    else if(uart_buf[1] == 0x51)
  282. //    {
  283. //      flag_floor_u[5] = 5;
  284. //    }
  285. //    else if(uart_buf[1] == 0x52)
  286. //    {
  287. //      flag_floor_d[5] = 5;
  288. //    }
  289. //    else if(uart_buf[1] == 0x61)
  290. //    {
  291. //      flag_floor_u[6] = 6;
  292. //    }
  293. //    else if(uart_buf[1] == 0x62)
  294. //    {
  295. //      flag_floor_d[6] = 6;
  296. //    }
  297. //    else if(uart_buf[1] == 0x71)
  298. //    {
  299. //      flag_floor_u[7] = 7;
  300. //    }
  301. //    else if(uart_buf[1] == 0x72)
  302. //    {
  303. //      flag_floor_d[7] = 7;
  304. //    }
  305. //    else if(uart_buf[1] == 0x82)
  306. //    {
  307. //      flag_floor_u[8] = 8;
  308. //    }

  309.     Uart_Buf_Clear();         //清除接收缓存区
  310.   }
  311. }

  312. /****
  313. *******显示函数
  314. *****/
  315. void Display_function(void)
  316. {
  317.         Display_Tube_1(current_floor);  //数码管显示当前楼层
  318.   
  319.   if(flag_lift == 0)              //LED 显示方向电梯状态
  320.   {
  321.     LED_U = 1;
  322.     LED_D = 1;
  323.   }
  324.   else if(flag_lift == 1)
  325.   {
  326.     LED_U = 1;
  327.     LED_D = 0;
  328.   }
  329.   else if(flag_lift == 2)
  330.   {
  331.     LED_U = 0;
  332.     LED_D = 1;
  333.   }
  334.         
  335.   if(current_old != current_floor)      //如果楼层改变,发送当前楼层
  336.   {
  337. //    send_buf[1] = (current_floor/10*0x10 + current_floor%10);
  338.                
  339.          if(flag_lift == 1)          //如果电梯方向为下降,清除当前楼层下标志位
  340.          {
  341.                         if(current_floor == 1)
  342.                                 send_buf[1] = 0x01;
  343.                         else if(current_floor == 2)
  344.                                 send_buf[1] = 0x03;
  345.                         else if(current_floor == 3)
  346.                                 send_buf[1] = 0x04;
  347.                 }
  348.                 else if(flag_lift == 2)          //如果电梯方向为上升,清除当前楼层上标志位
  349.                 {
  350.                         if(current_floor == 1)
  351.                                 send_buf[1] = 0x01;
  352.                         else if(current_floor == 2)
  353.                                 send_buf[1] = 0x02;
  354.                         else if(current_floor == 3)
  355.                                 send_buf[1] = 0x04;
  356.                 }
  357.                                 
  358.     Uart_Sent_Str(send_buf);
  359.     current_old = current_floor;
  360.   }
  361. }

  362. /****
  363. *******处理函数
  364. *****/
  365. void Manage_function(void)
  366. {
  367.   if(flag_lift == 0)                            //如果当前电梯停止
  368.   {
  369. //                Uart_Sent_Str("123");
  370. //                Delay_function(1000);
  371.                
  372.     if(flag_stop == 1 && flag_door == 0)
  373.     {
  374.       if(flag_floor_d[1] == 1 || flag_floor_u[1] == 1)                 //一楼按下,目标楼层为一楼
  375.       {
  376.         target_floor = 1;
  377.       }
  378.       else if(flag_floor_d[2] == 2 || flag_floor_u[2] == 2)            //二楼按下,目标楼层为二楼
  379.       {
  380.         target_floor = 2;
  381.       }
  382.       else if(flag_floor_d[3] == 3 || flag_floor_u[3] == 3)            //三楼按下,目标楼层为三楼
  383.       {
  384.         target_floor = 3;
  385.       }

  386.     }
  387.   }
  388.         else if(flag_lift == 1)                            //如果电梯当前方向下降
  389.   {
  390.     if(flag_floor_d[3] == 3)                    //如果三楼下
  391.     {
  392.       if(current_floor > 3) //如果当前高于三楼,目标楼层等于三楼
  393.       {
  394.         target_floor = 3;
  395.       }
  396.     }

  397.     else if(flag_floor_d[2] == 2)           //如果二楼下
  398.     {
  399.       if(current_floor > 2) //如果当前高于二楼,目标楼层等于二楼
  400.       {
  401.         target_floor = 2;
  402.       }
  403.     }
  404.     else if(flag_floor_d[1] == 1)           //如果一楼
  405.     {
  406.       if(current_floor > 1) //如果当前高于一楼,目标楼层等于一楼
  407.         target_floor = 1;
  408.     }
  409.   }
  410.   else if(flag_lift == 2)                            //如果当前电梯上升
  411.   {
  412.     if(flag_floor_u[2] == 2)                //如果二楼上
  413.     {
  414.       if(current_floor < 2) //如果当前楼层低于二楼,目标楼层等于二楼
  415.       {
  416.         target_floor = 2;
  417.       }
  418.     }
  419.     else if(flag_floor_u[3] == 3)           //如果三楼上
  420.     {
  421.       if(current_floor < 3) //如果当前楼层低于三楼,目标楼层等于三楼
  422.       {
  423.         target_floor = 3;
  424.       }
  425.     }

  426.   }
  427.   
  428.   if(current_floor > target_floor)          //如果当前楼层比目标楼层高,电梯下降
  429.   {
  430.     flag_timer_begin = 0;
  431.     flag_stop = 0;
  432.     flag_lift = 1;
  433.     if(flag_bujin_2_o == 0 && flag_bujin_2_c == 0 && flag_door == 0)
  434.     {
  435.       flag_bujin_1_c = 1;
  436.       flag_bujin_1_o = 0;
  437.     }
  438.     flag_send = 0;
  439.   }
  440.   else if(current_floor < target_floor)     //如果当前楼层比目标楼层低,电梯上升
  441.   {
  442.     flag_timer_begin = 0;
  443.     flag_stop = 0;
  444.     flag_lift = 2;
  445.     if(flag_bujin_2_o == 0 && flag_bujin_2_c == 0 && flag_door == 0)
  446.     {
  447.       flag_bujin_1_c = 0;
  448.       flag_bujin_1_o = 1;
  449.     }
  450.     flag_send = 0;
  451.   }
  452.   else                                      //当前楼层等于目标楼层
  453.   {
  454.     if(flag_stop == 0)              //如果没有停留完成
  455.     {
  456.       if(flag_door == 0)            //如果门是关闭的,开门
  457.       {
  458.         flag_bujin_2_o = 1;
  459.         flag_bujin_2_c = 0;
  460.       }
  461.       else if(flag_door == 1)       //如果门已经打开了
  462.       {
  463.         flag_timer_begin_s = 1;     //开启停留定时
  464.       }
  465.                         
  466.       if(YL==0|| INFRARED == 0) //如果超重了或触发红外防夹,进行蜂鸣器提醒,清除停留时间计数
  467.       {
  468.         timer1_count_s = 0;
  469.                                 if(time_num % 15 == 0)
  470.                                 {
  471.                                         BEEP = ~BEEP;
  472.                                 }
  473.       }
  474.       else
  475.       {
  476.         BEEP = 1;
  477.       }
  478.                         
  479.       if(flag_time_s == 1)          //如果停留时间到达
  480.       {
  481.         flag_timer_begin_s = 0;
  482.         flag_time_s = 0;
  483.         flag_stop= 1;
  484.       }
  485.     }
  486.                
  487.     if(flag_stop == 1)              //如果停留完成
  488.     {
  489.       if(flag_door == 1)            //如果门是开启的,关门
  490.       {
  491.         flag_bujin_2_o = 0;
  492.         flag_bujin_2_c = 1;
  493.         if((INFRARED == 0 || YL == 0) && flag_bujin_2_c == 1)  //如果触发防夹,标记未停留完成
  494.         {
  495.           flag_door = 0;
  496.           flag_stop = 0;
  497.         }
  498.       }
  499.       else if(flag_door == 0)      //如果门已关闭清除当前按下楼层标志位
  500.       {
  501.         if(flag_lift == 1)          //如果电梯方向为下降,清除当前楼层下标志位
  502.         {
  503. //          if(flag_send == 0)
  504. //          {
  505. ////                                                        send_buf[1] = (current_floor/10*0x10 + current_floor%10);
  506. //                                                if(current_floor == 1)
  507. //                                                        send_buf[1] = 0x01;
  508. //                                                else if(current_floor == 2)
  509. //                                                        send_buf[1] = 0x03;
  510. //                                                else if(current_floor == 3)
  511. //                                                        send_buf[1] = 0x04;
  512. //                                                
  513. //            Uart_Sent_Str(send_buf);
  514. //            flag_send = 1;
  515. //          }
  516.           flag_floor_d[target_floor] = 0;
  517.         }
  518.         if(flag_lift == 2)          //如果电梯方向为上升,清除当前楼层上标志位
  519.         {
  520. //          if(flag_send == 0)
  521. //          {
  522. ////            send_buf[1] = (current_floor/10*0x10 + current_floor%10);
  523. //                                                if(current_floor == 1)
  524. //                                                        send_buf[1] = 0x01;
  525. //                                                else if(current_floor == 2)
  526. //                                                        send_buf[1] = 0x02;
  527. //                                                else if(current_floor == 3)
  528. //                                                        send_buf[1] = 0x04;
  529. //                                                
  530. //            Uart_Sent_Str(send_buf);
  531. //            flag_send = 1;
  532. //          }
  533.           flag_floor_u[target_floor] = 0;
  534.         }
  535.         if(flag_lift == 0)
  536.         {
  537. //                                        if(flag_send == 0)
  538. //          {
  539. ////            send_buf[1] = (current_floor/10*0x10 + current_floor%10);
  540. //                                                if(current_floor == 1)
  541. //                                                        send_buf[1] = 0x01;
  542. //                                                else if(current_floor == 2)
  543. //                                                        send_buf[1] = 0x02;
  544. //                                                else if(current_floor == 3)
  545. //                                                        send_buf[1] = 0x04;
  546. //                                                
  547. //            Uart_Sent_Str(send_buf);
  548. //            flag_send = 1;
  549. //          }

  550.           flag_floor_d[target_floor] = 0;
  551.           flag_floor_u[target_floor] = 0;
  552.         }
  553.         flag_timer_begin = 1;       //开启定时
  554.       }
  555.     }
  556.   }
  557.         
  558.   if(flag_time == 1)                //定时500ms到达,清除电梯运动标志位
  559.   {
  560.     flag_timer_begin = 0;
  561.     flag_lift = 0;
  562.     flag_time = 0;
  563.     flag_floor_d[current_floor] = 0;
  564.     flag_floor_u[current_floor] = 0;
  565.   }
  566.         
  567.         if(speed_alarm == 1)
  568.         {
  569.                 BEEP = 0;
  570.                 Delay_function(2000);
  571.                 BEEP = 1;
  572.                 speed_alarm = 0;
  573.         }
  574.         
  575.         if(YW == 0)
  576.         {
  577.                 if(time_num % 15 == 0)
  578.                 {
  579.                         BEEP = ~BEEP;
  580.                 }
  581.         }
  582.         else
  583.         {
  584.                 if(YL == 1 && INFRARED == 1)
  585.                         BEEP = 1;
  586.         }
  587. }

复制代码



外机:
  1. /**********************************
  2. 包含头文件
  3. **********************************/
  4. #include "main.h"
  5. #include "key.h"
  6. #include "uart.h"


  7. /**********************************
  8. 变量定义
  9. **********************************/
  10. uchar key_num = 0;                                                                                        //按键扫描标志位                        
  11. uint time_num = 0;                                                                                        //10ms计时变量

  12. extern uchar uart_buf[16];              //串口接收缓存区
  13. extern uchar uart_count;                //串口接收计数

  14. uchar send_buf[24]={0x01,0x00};                //发送数组


  15. /**********************************
  16. 函数声明
  17. **********************************/
  18. void Delay_function(uint x);                                                //延时函数(ms)
  19. void Key_function(void);                                                                //按键函数
  20. void Manage_function(void);                                                        //处理函数


  21. /****
  22. *******        主函数
  23. *****/
  24. void main(void)
  25. {
  26.   Uart_Init();                  //串口初始化
  27.   Delay_function(50);
  28.   LED1 = 0;
  29.   
  30.         while(1)
  31.         {
  32.                 Key_function();                                                                                        //按键函数
  33.                 Manage_function();                                                                        //处理函数

  34.                 Delay_function(10);                                                                        //延时10ms
  35.                 time_num++;                                                                                                        //计时变量+1
  36.                 if(time_num == 5000)
  37.                 {
  38.                         time_num = 0;
  39.                 }
  40.         }
  41. }

  42. /****
  43. *******        延时 x ms函数
  44. *****/
  45. void Delay_function(uint x)
  46. {
  47.         uint m,n;
  48.         for(m=x;m>0;m--)
  49.     for(n=110;n>0;n--);
  50. }

  51. /****
  52. *******按键函数
  53. *****/
  54. void Key_function(void)
  55. {
  56.         key_num = Chiclet_Keyboard_Scan(0);                  //按键扫描
  57.         if(key_num != 0)                                                                                        //有按键按下
  58.         {
  59.                 switch(key_num)
  60.                 {
  61.                         case 1:                                                                                                                //按键1,发送一楼上
  62.                                 send_buf[1] = 0x11;
  63.         Uart_Sent_Str(send_buf);
  64.                         break;

  65.                         case 2:                                                                                                                //按键2,发送二楼上
  66.                                 send_buf[1] = 0x21;
  67.         Uart_Sent_Str(send_buf);
  68.                         break;

  69.                         case 3:                                                                                                                //按键3,发送二楼下
  70.                                 send_buf[1] = 0x22;
  71.         Uart_Sent_Str(send_buf);
  72.                         break;
  73.       

  74.                         case 4:                                                                                                                //按键4,发送三楼下
  75.                                 send_buf[1] = 0x32;
  76.         Uart_Sent_Str(send_buf);
  77.                         break;      

  78.                         default:
  79.                         break;
  80.                 }
  81.         }
  82. }

  83. /****
  84. *******处理函数
  85. *****/
  86. void Manage_function(void)
  87. {
  88.         if(uart_count >= 2)         //如果接收到两个字节,解析数据,点亮对应楼层的LED
  89.   {
  90.     P1 = 0xff;
  91.     if(uart_buf[1] == 0x01)   
  92.     {
  93.       LED1 = 0;
  94.     }
  95.     else if(uart_buf[1] == 0x02)
  96.     {
  97.       LED2 = 0;
  98.     }
  99.     else if(uart_buf[1] == 0x03)
  100.     {
  101.       LED3 = 0;
  102.     }
  103.     else if(uart_buf[1] == 0x04)
  104.     {
  105.       LED4 = 0;
  106.     }
  107.    
  108.     Uart_Buf_Clear();         //清除接收缓存区
  109.   }
  110. }
复制代码


原理图: 无
仿真: 无
代码: 电梯-实物源程序-C语言源码.7z (32.72 KB, 下载次数: 0)

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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