⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 board.lst

📁 单片机控制面板程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 207   2                  CLK=0;
 208   2                  DI=led_show_bit;
 209   2                  CLK=1;//人工模拟时钟,在上升沿锁存
 210   2                  led_show_data=led_show_data>>1;//将显示代码进行移位处理,以便8个位都进行输出
 211   2                 }
 212   1             RCK=0;
 213   1             RCK=1;//人工模拟锁存输出信号,在上升沿将锁存器的值输出
 214   1             led_show_data=P2|0xf8;//将5根共阳控制线状态重新读取回来
 215   1             led_show_data=led_show_data&led_show_number;//将要点亮的那位数码管的共阳极选通(即通电)
 216   1             P2=led_show_data;//输出5根共阳控制线,给需要点亮的那位数码管进行通电
 217   1      }
 218          //=================================================================
 219          //程序说明:通讯发送子程序,其中需要保证每次发送时没有数据正在发送;
 220          //并且发送按照优先级高低进行;一类数据发送不能中断;下一类数据的发送
 221          //必须在前一类数据已收到应答或20ms没有收到应答后自动重发
 222          //=================================================================
 223          void send()                             //发送子程序
 224          {
 225   1           char temp_kind=0;
 226   1               char send_temp=0;
 227   1      
 228   1           if(send_on_flag==0)//一个8位还未发送完成,不进行下一个8位的发送
 229   1                {
 230   2                 if(send_success_flag==0)//还未连接上,需要先发送握手协议
 231   2                    {
 232   3                        if(send_kind==SEND_HAND)
 233   3                           {
 234   4                                send_kind=send_kind&0xfe;//握手协议会定时发送,因此可以在这里清除发送标志
 235   4                    send_on_flag=1;
 236   4                    SBUF=HAND_CMD;
 237   4                                send_over_kind=0;
C51 COMPILER V7.06   BOARD                                                                 03/19/2009 21:23:59 PAGE 5   

 238   4                               }
 239   3                        }
 240   2             else                    //已经连接上,根据优先集高低发送应用类数据
 241   2                    {
 242   3                        if(send_over_kind==0)//发送前,需要验证上次一类数据是否主机已经接收到
 243   3                        {
 244   4                        if(send_on_kind==0)//判断一类数据是否发完,非0表示还未发完
 245   4                        {
 246   5                        if((send_kind&0x2)==0x2)
 247   5                           {
 248   6                                temp_kind=SEND_KEY;
 249   6                                }
 250   5                        else
 251   5                           {
 252   6                                if((send_kind&0x4)==0x4)
 253   6                                   {
 254   7                                       temp_kind=SEND_SET;
 255   7                                       }
 256   6                                else
 257   6                                   {
 258   7                                        if((send_kind&0x8)==0x8)
 259   7                                           {
 260   8                                           temp_kind=SEND_FU;
 261   8                                               }
 262   7                                        else
 263   7                                           {
 264   8                                                if((send_kind&0x10)==0x10)
 265   8                                                  {
 266   9                                                  temp_kind=SEND_FAULT;
 267   9                                                      }
 268   8                                                else
 269   8                                                  {
 270   9                                                       if((send_kind&0x20)==0x20)
 271   9                                                          {
 272  10                                                          temp_kind=SEND_FAULT_STACK;
 273  10                                                              }
 274   9                                                       else
 275   9                                                         {
 276  10                                                          if((send_kind&0x40)==0x40)
 277  10                                                             {
 278  11                                                                 temp_kind=SEND_SHOW;
 279  11                                                                 }
 280  10                                                          else
 281  10                                                            {
 282  11                                                             if((send_kind&0x80)==0x80)
 283  11                                                                {
 284  12                                                                    temp_kind=SEND_HEART;
 285  12                                        }
 286  11                                                              }//else
 287  10                                                               }//else
 288   9                                                         } //else
 289   8                                                       }//else  
 290   7                                                }//else
 291   6                                         }//else
 292   5                                       }//if
 293   4                              else//有类数据在连续发送时,需要先发送该类数据
 294   4                                 {
 295   5                                  switch(send_on_kind)
 296   5                                       {
 297   6                                        case SET_CMD:
 298   6                                           {
 299   7                                                temp_kind=SEND_SET;
C51 COMPILER V7.06   BOARD                                                                 03/19/2009 21:23:59 PAGE 6   

 300   7                                                break;
 301   7                                                }
 302   6                                        case SHOW_CMD:
 303   6                                           {
 304   7                                                temp_kind=SEND_SHOW;
 305   7                                                break;
 306   7                                               }
 307   6                                        case SET_FU_CMD:
 308   6                                           {
 309   7                                                temp_kind=SEND_FU;
 310   7                                                break;
 311   7                                               }
 312   6                                        case FAULT_STACK_CMD:
 313   6                                          {
 314   7                           temp_kind=SEND_FAULT_STACK;
 315   7                                               break;
 316   7                                              }
 317   6                                        default:break;
 318   6                                       }
 319   5                                 }
 320   4                        switch(temp_kind)//根据上面的优先集排序,进行相关类数据的发送,每次发送时保证同类数据发送完成
 321   4                            {
 322   5                                 case SEND_SET:
 323   5                                   {
 324   6                        send_on_flag=1; //正在发送标志位
 325   6                                        switch(send_point)
 326   6                                           {
 327   7                                                case 0:
 328   7                                                   {
 329   8                                                        SBUF=SET_CMD;
 330   8                                                        send_point++;
 331   8                                send_on_kind=SET_CMD;
 332   8                                                        break;
 333   8                                                        }
 334   7                                                case 1:
 335   7                                                   {
 336   8                                                        SBUF=led_data;
 337   8                                                        send_point++;
 338   8                                send_on_kind=SET_CMD;
 339   8                                                        break;
 340   8                                                        }
 341   7                                                case 2:
 342   7                                                   {
 343   8                                                        SBUF=set_data>>8;
 344   8                                                        send_point++;
 345   8                                send_on_kind=SET_CMD;
 346   8                                                        break;
 347   8                                                        }
 348   7                                                case 3:
 349   7                                                   {
 350   8                                                        SBUF=set_data&0xff;
 351   8                                                        send_point++;
 352   8                                send_on_kind=SET_CMD;
 353   8                                                        break;
 354   8                                                        }
 355   7                                                case 4:
 356   7                                                    { 
 357   8                                send_temp=set_data>>8;
 358   8                                                        send_or_number=SET_CMD^led_data^send_temp;
 359   8                                                        send_temp=set_data&0xff;
 360   8                                                        send_or_number=send_or_number^send_temp;
 361   8                                                        SBUF=send_or_number;
C51 COMPILER V7.06   BOARD                                                                 03/19/2009 21:23:59 PAGE 7   

 362   8                                                        send_point=0;
 363   8                                                        send_over_kind=SET_CMD;//提示该类数据已经发送完,需要等待接收,或延时10s还未收到时,继续发送
 364   8                                                        send_over_flag=1;//一类数据已经发送完成标志位
 365   8                                send_on_kind=0;
 366   8                                                        break;
 367   8                                                        }
 368   7                                                default:break;
 369   7                                                }
 370   6                        break;
 371   6                                        }
 372   5                     case SEND_SHOW:
 373   5                                   {
 374   6                        send_on_flag=1;//正在发送标志位
 375   6                                        switch(send_point)
 376   6                                          {
 377   7                                               case 0:
 378   7                                                 {
 379   8                                                  SBUF=SHOW_CMD;
 380   8                                                      send_point++;
 381   8                              send_on_kind=SHOW_CMD;
 382   8                                                      break;
 383   8                                                      }
 384   7                                               case 1:
 385   7                                                  {
 386   8                                                       SBUF=led_data;
 387   8                                                       send_point++;
 388   8                                                       send_or_number=SHOW_CMD^led_data;
 389   8                               send_on_kind=SHOW_CMD;
 390   8                                                       break;
 391   8                                                       }
 392   7                                               case 2:
 393   7                                                  {
 394   8                                                       SBUF=send_or_number;
 395   8                                                       send_point=0;
 396   8                                                       send_over_kind=SHOW_CMD;//同上
 397   8                                                       send_over_flag=1;//同上
 398   8                               send_on_kind=0;
 399   8                                                       break;
 400   8                                                       }
 401   7                                               default:break;
 402   7                                               }
 403   6                        break;
 404   6                                        }
 405   5                                 case SEND_FU:
 406   5                                   {
 407   6                        send_on_flag=1;
 408   6                                        switch(send_point)
 409   6                                          {
 410   7                                               case 0:
 411   7                                                 {
 412   8                                                  SBUF=SET_FU_CMD;
 413   8                                                      send_point++;
 414   8                                                      send_on_kind=SET_FU_CMD;
 415   8                                                      break;
 416   8                                                      }
 417   7                                               case 1:
 418   7                                                  {
 419   8                                                       SBUF=led_data;
 420   8                                                       send_point++;
 421   8                                                       send_or_number=SET_FU_CMD^led_data;
 422   8                                                       send_on_kind=SET_FU_CMD;
 423   8                                                       break;
C51 COMPILER V7.06   BOARD                                                                 03/19/2009 21:23:59 PAGE 8   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -