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

📄 hello.lst

📁 uart,mcu,linux,embedded soc
💻 LST
📖 第 1 页 / 共 4 页
字号:
 219   1         while(m==P0);                        /*按钮放开否?*/
 220   1         send_to_Led_a();                             /*串行发送到DTLED-6副程式*/
 221   1      }               /*返回上一层程式*/
 222          /****************************************************/
 223          void wxb1(void)
 224          {
 225   1         switch(tab[ptr])                     /*是则测试ptr键盘扫描计数器指标至TAB[]取到的键盘码*/
 226   1              {
 227   2                case 0x02: 
 228   2                              dispbuf[dispbuf[0]]++;  /*是按“上”,是则呼叫设定密码SET*/
 229   2                              if(dispbuf[dispbuf[0]]>9)
 230   2                                      {dispbuf[dispbuf[0]+1]++;       
 231   3                                       dispbuf[dispbuf[0]]=0;
 232   3                                      }  
 233   2                              if(dispbuf[dispbuf[0]+1]==6)
 234   2                                      {dispbuf[dispbuf[0]+1]=dispbuf[dispbuf[0]]=0;
 235   3                                      }  
 236   2                           break;             /*跳出此循环*/
 237   2                case 0x08: 
 238   2                              if(dispbuf[dispbuf[0]]==0)      /*是按“下”,是则呼叫清除显示器CLEAR*/
 239   2                                      {if(dispbuf[dispbuf[0]+1]==0)  
C51 COMPILER V7.07   HELLO                                                                 11/07/2006 19:17:04 PAGE 5   

 240   3                                          dispbuf[dispbuf[0]+1]=6;
 241   3                                          dispbuf[dispbuf[0]]=10; 
 242   3                                          dispbuf[dispbuf[0]+1]--;
 243   3                                      }       
 244   2                              dispbuf[dispbuf[0]]--;          
 245   2                           break;             /*跳出此循环*/
 246   2                case 0x04:                    /*是按“左”,未规划键待用户自己定义*/
 247   2                              dispbuf[0]=dispbuf[0]+2;        /*小数点左移一位*/
 248   2                                      if(dispbuf[0]>6)
 249   2                                              dispbuf[0]=1;
 250   2                           break;             /*跳出此循环*/
 251   2                case 0x06:                    /*是按“右”,未规划键待用户自己定义*/  
 252   2                                      if(dispbuf[0]<3)
 253   2                                              dispbuf[0]=7;
 254   2                              dispbuf[0]=dispbuf[0]-2;        /*小数点右移一位*/
 255   2                           break;             /*跳出此循环*/
 256   2                case 0x0a:                    /*是按“*”,已侦测过*/ 
 257   2                              FLAG5=1;
 258   2                           break;             /*跳出此循环*/ 
 259   2                case 0x0c:                    /*是否按“A”,未规划键待用户自己定义*/
 260   2                              FLAG4=FLAG5=P3_6=1;     
 261   2                                      dispbuf[0]=0x03;                /*小数点位*/
 262   2                           break;             /*跳出此循环*/
 263   2                default:                      /*以上均不是*/
 264   2                           break;             /*跳出此循环*/
 265   2              }                       
 266   1      }               /*返回上一层程式*/
 267          /****************************************************/
 268          void wxb2(void)
 269          {switch(tab[ptr])                       /*是则测试ptr键盘扫描计数器指标至TAB[]取到的键盘码*/
 270   1              {case 0x02: 
 271   2                              dispbuf[dispbuf[0]]++;  /*是按“上”,是则呼叫设定密码SET*/
 272   2                              if(dispbuf[dispbuf[0]+1]==2)
 273   2                                      {if(dispbuf[dispbuf[0]]>4)
 274   3                                              {dispbuf[dispbuf[0]+1]=dispbuf[dispbuf[0]]=0;}  
 275   3                                              }
 276   2                              else
 277   2                                      {if(dispbuf[dispbuf[0]]>9)
 278   3                                              {dispbuf[dispbuf[0]+1]++;       dispbuf[dispbuf[0]]=0;}  
 279   3                                      if(dispbuf[dispbuf[0]+1]>2)
 280   3                                              {dispbuf[dispbuf[0]+1]=dispbuf[dispbuf[0]]=0;}  
 281   3                                              }
 282   2                           break;             /*跳出此循环*/
 283   2                case 0x08: 
 284   2                              if(dispbuf[dispbuf[0]]==0)      /*是按“下”,是则呼叫清除显示器CLEAR*/
 285   2                                      {if(dispbuf[dispbuf[0]+1]==0) 
 286   3                                              {dispbuf[dispbuf[0]+1]=2;
 287   4                                               dispbuf[dispbuf[0]]=5; 
 288   4                                          }   
 289   3                                      else 
 290   3                                          {dispbuf[dispbuf[0]]=10; dispbuf[dispbuf[0]+1]--;
 291   4                                          }   
 292   3                                      }
 293   2                                      dispbuf[dispbuf[0]]--;          
 294   2                           break;             /*跳出此循环*/
 295   2                case 0x04:                    /*是按“左”,未规划键待用户自己定义*/
 296   2                              dispbuf[0]=dispbuf[0]+2;        /*小数点左移一位*/
 297   2                                      if(dispbuf[0]>6)
 298   2                                              dispbuf[0]=1;
 299   2                           break;             /*跳出此循环*/
 300   2                case 0x06:                    /*是按“右”,未规划键待用户自己定义*/  
 301   2                                      if(dispbuf[0]<3)
C51 COMPILER V7.07   HELLO                                                                 11/07/2006 19:17:04 PAGE 6   

 302   2                                              dispbuf[0]=7;
 303   2                              dispbuf[0]=dispbuf[0]-2;        /*小数点右移一位*/
 304   2                           break;             /*跳出此循环*/
 305   2                case 0x0a:                    /*是按“*”,已侦测过*/ 
 306   2                              FLAG5=1;
 307   2                           break;             /*跳出此循环*/                    
 308   2                case 0x0c:                    /*是否按“A”,未规划键待用户自己定义*/
 309   2                              FLAG4=FLAG5=P3_6=1;     
 310   2                                      dispbuf[0]=0x03;                /*小数点位*/
 311   2                           break;             /*跳出此循环*/
 312   2                default:                      /*以上均不是*/
 313   2                           break;             /*跳出此循环*/
 314   2              }                       
 315   1      }               /*返回上一层程式*/
 316          /****************************************************/
 317          void save_clocks(void)                          /*按显示时间更改时钟*/
 318          {clocktmp[0]=dispbuf[1]|(dispbuf[2]<<4);
 319   1       clocktmp[1]=dispbuf[3]|(dispbuf[4]<<4);
 320   1       clocktmp[2]=dispbuf[5]|(dispbuf[6]<<4);
 321   1       Wr1302();
 322   1       FLAG2=1;                               
 323   1       nop;
 324   1      }
 325          /****************************************************/
 326          void xch(void)                                  /*显示向右移动副程式*/
 327          {char c;                                        /*宣告变数*/
 328   1           for(c=6;c>0;c--)
 329   1           {dispbuf[c]=dispbuf[c-1];/*将显示器dispbuf[]移位交换,dispbuf[3]->dispbuf[4]->dispbuf[5]...*/
 330   2           }
 331   1           dispbuf[0]=0;                              /*有安键时,小数点不亮*/
 332   1           dispbuf[1]=tab[ptr];               /*新的按键值存入dispbuf[1],最低位*/
 333   1      }               /*返回上一层程式*/
 334          /****************************************************/
 335          void open(void)                                 /*开门比较密码副程式*/
 336          {char c;                                                /*宣告变数*/
 337   1         FLAG1=1;                                             /*设开门标号为1*/
 338   1      for(c=1;c<6;c++)                                /*比较六个密码*/
 339   1       {if(dispbuf[c]!=bufdata[c])    /*显示值(按键值disbuf[])与密码TAB[]比较是否相等*/
 340   2              FLAG1=0;
 341   2              if(FLAG1==0)                    /*FLAG1=0 表示不相等*/
 342   2                     break;                   /*跳出此循环*/
 343   2       }
 344   1       if(FLAG1==1)                           /*如FLAG1=1 表示密码相等,令电锁P2.0置0动作*/
 345   1        {                                                     /*密码正确*/
 346   2          dispbuf[8]=0x09;                            /*蜂鸣器设定开/二次分频*/
 347   2              dispbuf[0]=0x01;                        /*小数点到最高位位*/
 348   2              P3_6=0;                                         /*P3.6置0,使绿色下载指示灯亮(喇叭响)*/  
 349   2              TMOD=0x11;
 350   2              TR1=1;                                          /**/
 351   2          IE=0x8a;                                    /*8是允许中断,a是TIMER0,TIMER1中断致能位*/
 352   2              send_to_Led_a();                /*串行发送到DTLED-6副程式*/     
 353   2              while(FLAG5==0)                         /*等待设置死循环*/
 354   2                      {
 355   3                       //scan();                      /*呼叫键盘扫描副程式有按FLAG0会为1*/
 356   3                       if(FLAG0==1) 
 357   3                        {
 358   4                         temp_setclock();             /*判断有按键输入否?*/
 359   4                        }
 360   3                      }
 361   2              if(FLAG4==0)
 362   2          save_clocks();                              /*按显示时间更改时钟*/
 363   2        }     
C51 COMPILER V7.07   HELLO                                                                 11/07/2006 19:17:04 PAGE 7   

 364   1          else P3_6=1;                                /*密码错,P3.6置1,关闭绿色下载指示灯灭(喇叭不响)*/      
 365   1      }               /*返回上一层程式*/
 366          /******************************************************/
 367          void clear(void)                                /*清除显示器dispbuf[]为00副程式*/
 368          {char c;                                        /*宣告变数*/
 369   1           for(c=1;c<7;c++)                   /*将00存入显示阵列dispbuf[]*/
 370   1           {dispbuf[c]=0x00;
 371   2           }                                  
 372   1      }               /*返回上一层程式*/
 373          /******************************************************/
 374          void Wr1302(void)                                       /*写时钟芯片DS1302*/
 375          {char i,j,ts0,conb,conbyt;
 376   1              conb=0x80;
 377   1              ts0=conb;
 378   1      //
 379   1      for(j=0;j<3;j++)                        /*写秒,分,时三次循环*/
 380   1              {clk=RST=0;                                     /*DS1302系统初始化*/
 381   2                      nop;nop;
 382   2                      RST=1;
 383   2              for(i=0;i<8;i++)                        /*写控制字到DS1302*/
 384   2                {clk=0;                                       /*清时钟*/
 385   3                      if(conb&0x01) 
 386   3                                      DINOUT=1;
 387   3                      else    DINOUT=0;
 388   3                      clk=1;                                  /*时钟上升沿,发送数据有效*/
 389   3                      conb=conb>>1;   
 390   3                      nop;
 391   3                }
 392   2                      clk=0;                                  /*清时钟*/
 393   2                      conb=ts0+2+j*2;
 394   2              conbyt=clocktmp[j]&0x7f;
 395   2              for(i=0;i<8;i++)                        /*写设定值到DS1302*/
 396   2                {clk=0;                                       /*清时钟*/
 397   3                 if(conbyt&0x01) 
 398   3                                      DINOUT=1;
 399   3                      else    DINOUT=0;
 400   3                      clk=1;                                  /*时钟上升沿,发送数据有效*/
 401   3                      conbyt=conbyt>>1;       
 402   3                      nop;
 403   3                }
 404   2              delay(5);
 405   2              RST=0;
 406   2      nop;
 407   2      }
 408   1              }
 409                          /*返回主程式*/
 410          /******************************************************/
 411          void Rd1302st()                         /*启动时钟芯片振荡器*/
 412          {
 413   1      char i,ts0,conb,conbyt;
 414   1              Rd1302();
 415   1              conbyt=clocktmp[0]&0x7f;
 416   1              conb=0x80;
 417   1              ts0=conb;
 418   1              clk=RST=0;                                      /*DS1302系统初始化*/
 419   1              nop;nop;
 420   1              RST=1;
 421   1              for(i=0;i<8;i++)                        /*写控制字到DS1302*/
 422   1                {     clk=0;                                  /*清时钟*/
 423   2                      if(conb&0x01) 
 424   2                                      DINOUT=1;
 425   2                      else    DINOUT=0;
C51 COMPILER V7.07   HELLO                                                                 11/07/2006 19:17:04 PAGE 8   

 426   2                      clk=1;                                  /*时钟上升沿,发送数据有效*/
 427   2                      conb=conb>>1;   
 428   2                      nop;
 429   2                }
 430   1                      clk=0;                                  /*清时钟*/
 431   1              for(i=0;i<8;i++)                        /*写控制字到DS1302*/
 432   1                {     clk=0;                                  /*清时钟*/
 433   2                      if(conbyt&0x01) 
 434   2                                      DINOUT=1;
 435   2                      else    DINOUT=0;
 436   2                      clk=1;                                  /*时钟上升沿,发送数据有效*/
 437   2                      conbyt=conbyt>>1;       
 438   2                      nop;
 439   2                }
 440   1              delay(5);
 441   1              RST=0;
 442   1      nop;
 443   1      }               /*返回主程式*/
 444          //**************************************************************
 445          void read24c02()                                /*读24c02的存储值*/

⌨️ 快捷键说明

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