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

📄 dimmer.lst

📁 LED控制
💻 LST
📖 第 1 页 / 共 2 页
字号:
 200   1      }
 201          
 202          /************************************************************************
 203          函数说明:发送DMX512数据(一帧)   
 204          备注    :波特率为250Kbit/s  共发送210次数据(MAX_ADDR)  则发送一轮数据需
 205                    44*210+88+8+8=9344us
 206          ************************************************************************/
 207          void DMX512_SendData(uchar TxBuf)
 208          {
 209   1          uchar i;
 210   1          
 211   1              TXD = 0;                        // Break
 212   1              Delay10us(10);          // Delay 100us instead 88us
 213   1              TXD = 1;                        // Mark-after-break
 214   1          Delay10us(1);
 215   1      
 216   1              TB8 = 1;                        // the tenth bit that is the first stop bit
 217   1              for(i=0;i<MAX_ADDR;i++){
 218   2                      TI = 0;                 // 清发送中断标志位     
 219   2              SBUF = TxBuf;   // 发送数据
 220   2              while(!TI);     // 等待数据发送完毕
 221   2          }
 222   1          TXD = 1;                    // 置数据空闲位
 223   1      }
 224          
 225          void TurnOff_Output(void)
 226          {
 227   1          uchar i;
 228   1              
 229   1              TXD = 0;                        // Break
 230   1              Delay10us(10);          // Delay 100us instead 88us
 231   1              TXD = 1;                        // Mark-after-break
 232   1          Delay10us(1);
 233   1      
 234   1              TB8 = 1;                        // the tenth bit that is the first stop bit
 235   1              for(i=0;i<MAX_ADDR;i++){
 236   2                      TI = 0;                 // 清发送中断标志位     
 237   2              SBUF = 0x00;    // 发送数据
 238   2              while(!TI);     // 等待数据发送完毕
 239   2          }
 240   1          TXD = 1;                    // 置数据空闲位
 241   1      }
C51 COMPILER V8.02   DIMMER                                                                03/27/2009 09:21:37 PAGE 5   

 242          
 243          /************************************************************************
 244          输入参数:无 
 245          返回参数:BIT[2-0]对应DEC,INC,POWER,值为1表示按键按下  
 246          备注    :KEY_POWER -> P2.5
 247                            KEY_INC       -> P2.6
 248                            KEY_DEC       -> P2.7
 249           ************************************************************************/
 250          uchar KeyScan(void)
 251          {
 252   1          uchar i, KeyValue;
 253   1      
 254   1              if((P2 & KEY_MASK)== KEY_MASK) return(NONE);    //无按键按下
 255   1              Delay1ms(20);                                                                   //有按键按下,则延时消抖
 256   1              if((P2 & KEY_MASK)== KEY_MASK) return(NONE);    //误触发
 257   1              
 258   1              if(PowerState) LED = !LED;
 259   1              
 260   1              KeyValue = (~(P2>>5)) & 0x07;
 261   1              
 262   1              for(i=0;i<20;i++){
 263   2                      Delay1ms(10);
 264   2                      if((P2 & KEY_MASK)== KEY_MASK) break;           //按键松开      
 265   2              }
 266   1              
 267   1              if(PowerState) LED = !LED;
 268   1              
 269   1              if(i<20) return KeyValue;                                               //没有超时
 270   1              else return OVERTIME;                                                   //按键按下超过200ms
 271   1      }
 272          
 273          
 274          void  main(void)
 275          {
 276   1              uchar KeyValue;         //按键返回值(可能为NONE,OVERTIME或有效按键值1~7)
 277   1              uchar i;
 278   1              
 279   1              Sys_Init();                             //系统初始化
 280   1              DataResume();   //从EEPROM中读取数据:电源开关状态和LED灰度值
 281   1              EnableInterrupt();
 282   1              
 283   1              while(1)
 284   1              {
 285   2                      KeyValue = KeyScan();                                                                                   //扫描按键
 286   2                      
 287   2                      if (KeyValue==NONE){                                                                                    //无按键按下
 288   3                              if (PowerState){                                                                                        //控制面板上的LED开关                   
 289   4                                      LED = ON;
 290   4                                      DMX512_SendData(CodingTable[GreyLevel]);                                                                //向调光器发送数据
 291   4                              } else {
 292   4                                      LED = OFF;
 293   4                                      TurnOff_Output();                                                                               //关闭调光器输出
 294   4                              }
 295   3                      }
 296   2                      else if (KeyValue==OVERTIME){                                                                   //按键按下超时,快速调节模式
 297   3                              if (!KEY_POWER){                                                                                        //KEY_POWER键按下               
 298   4                                      while(!KEY_POWER);                                                                              //等待按键松开
 299   4                                      Delay1ms(20);
 300   4                                      while(!KEY_POWER);                                                                              //等待按键松开
 301   4                                      if(PowerState){
 302   5                                              PowerState = OFF;
 303   5                                              TurnOff_Output();
C51 COMPILER V8.02   DIMMER                                                                03/27/2009 09:21:37 PAGE 6   

 304   5                                      }else{
 305   5                                              PowerState = ON;
 306   5                                              DMX512_SendData(CodingTable[GreyLevel]);
 307   5                                      }
 308   4                                      DataSave();                                                                                             //记录下控制参数        
 309   4                              } 
 310   3                              else if (!KEY_INC){                                                                                     //KEY_INC键按下
 311   4                                      if(PowerState == OFF) continue;                                                 //在电源关闭的情况下禁止调光
 312   4                                      i = 0;
 313   4                                      while(!KEY_INC){                                                                                //KEY_INC键持续按下过程中
 314   5                                              if(GreyLevel < GREY_LEVEL_MAX){
 315   6                                                      GreyLevel++;
 316   6                                                      DMX512_SendData(CodingTable[GreyLevel]);                                                //调光
 317   6                                                      Delay1ms(20);                                                                   //此处延时影响连续调光时的平滑程度及调节速度
 318   6                                                      if(++i >= 6){                                                                   //6分频,周期120ms
 319   7                                                              i = 0;
 320   7                                                              LED = !LED;     
 321   7                                                      }
 322   6                                              } else {
 323   6                                                      GreyLevel = GREY_LEVEL_MAX;
 324   6                                                      //DMX512_SendData(CodingTable[GreyLevel]);                                              //向调光器发送数据
 325   6                                                      //Delay1ms(40);
 326   6                                                      //LED = !LED;   
 327   6                                              } 
 328   5                                      }
 329   4                                      LED = ON;
 330   4                                      DataSave();     
 331   4                              }
 332   3                              else if (!KEY_DEC){                                                                                     //KEY_DEC键按下
 333   4                                      if(PowerState == OFF) continue;                                                 //在电源关闭的情况下禁止调光
 334   4                                      i = 0;
 335   4                                      while(!KEY_DEC){                                                                                //KEY_DEC键持续按下过程中
 336   5                                              if(GreyLevel > GREY_LEVEL_MIN){
 337   6                                                      GreyLevel--;
 338   6                                                      DMX512_SendData(CodingTable[GreyLevel]);                                                //调光
 339   6                                                      Delay1ms(20);                                                                   //此处延时影响连续调光时的平滑程度及调节速度
 340   6                                                      if(++i >= 6){                                                                   //6分频,周期120ms
 341   7                                                              i = 0;
 342   7                                                              LED = !LED;     
 343   7                                                      }
 344   6                                                      
 345   6                                              } else {
 346   6                                                      GreyLevel = GREY_LEVEL_MIN;     
 347   6                                                      //DMX512_SendData(CodingTable[GreyLevel]);                                              //向调光器发送数据
 348   6                                                      //Delay1ms(40);
 349   6                                                      //LED = !LED;   
 350   6                                              }
 351   5                                      }
 352   4                                      LED = ON;
 353   4                                      DataSave();     
 354   4                              }
 355   3                      }
 356   2                      else {                                                                                                                  //单击模式
 357   3                              if(KeyValue & 0x01){                                                                            //KEY_POWER键按下
 358   4                                      if(PowerState){                                                                                 //切换开关状态
 359   5                                              PowerState = OFF;
 360   5                                              TurnOff_Output();
 361   5                                      }else{
 362   5                                              PowerState = ON;
 363   5                                              DMX512_SendData(CodingTable[GreyLevel]);                                                                //向调光器发送数据
 364   5                                      }
 365   4                              }
C51 COMPILER V8.02   DIMMER                                                                03/27/2009 09:21:37 PAGE 7   

 366   3                              else if(KeyValue & 0x02){                                                                       //KEY_INC键按下
 367   4                                      if(PowerState == ON){
 368   5                                              if(GreyLevel < GREY_LEVEL_MAX){
 369   6                                                      GreyLevel++;
 370   6                                                      DMX512_SendData(CodingTable[GreyLevel]);                                                //向调光器发送数据
 371   6                                              } else {
 372   6                                                      GreyLevel = GREY_LEVEL_MAX;
 373   6                                                      DMX512_SendData(CodingTable[GreyLevel]);                                                //向调光器发送数据
 374   6                                              }
 375   5                                      }
 376   4                              } 
 377   3                              else if(KeyValue & 0x04){                                                                       //KEY_DEC键按下
 378   4                                      if(PowerState == ON){
 379   5                                              if(GreyLevel > GREY_LEVEL_MIN){
 380   6                                                      GreyLevel--;
 381   6                                                      DMX512_SendData(CodingTable[GreyLevel]);                                                //向调光器发送数据
 382   6                                              } else {
 383   6                                                      GreyLevel = GREY_LEVEL_MIN;     
 384   6                                                      DMX512_SendData(CodingTable[GreyLevel]);                                                //向调光器发送数据
 385   6                                              }
 386   5                                      }
 387   4                              }
 388   3                              DataSave();                                                                                                     //重新保存LED控制参数
 389   3                      }
 390   2              }
 391   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    603    ----
   CONSTANT SIZE    =     74    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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