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

📄 51.lst

📁 一个基于51单片机的PFM型开关电源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 199   2      else 
 200   2              continue;
 201   2      if(i1==i2)//判断出有按键,查具体位置
 202   2              {       
 203   3                      P3_3=0;            //检查第一行
 204   3                      P3_2=1;
 205   3                      P3_1=1;
 206   3                      P3_0=1;                  
 207   3              if((P3&0xf0)!=0xf0)
 208   3                        j=0;
 209   3                        
 210   3                      P3_3=1;            //检查第二行
 211   3                      P3_2=0;
 212   3                      P3_1=1;
 213   3                      P3_0=1;
 214   3              if((P3&0xf0)!=0xf0)
 215   3                        j=1;
 216   3                        
 217   3                      P3_3=1;            //检查第三行
 218   3                      P3_2=1;
 219   3                      P3_1=0;
 220   3                      P3_0=1; 
 221   3              if((P3&0xf0)!=0xf0)
 222   3                        j=2;
 223   3                        
 224   3                      P3_3=1;            //检查第四行
 225   3                      P3_2=1;
 226   3                      P3_1=1;
 227   3                      P3_0=0;
 228   3              if((P3&0xf0)!=0xf0)
 229   3                        j=3;
 230   3                      
 231   3          
 232   3      
 233   3      
 234   3              do{     
 235   4                      delay(5000);
 236   4                      P3_3=0;
 237   4                      P3_2=0;
 238   4                      P3_1=0;
 239   4                      P3_0=0;}
 240   3              while(P3!=0xf0);      //等到按键放开
 241   3         
C51 COMPILER V8.02   51                                                                    08/01/2007 23:05:27 PAGE 5   

 242   3              
 243   3      
 244   3              }
 245   2      else 
 246   2              continue;
 247   2        
 248   2        Key=list[j][i1];
 249   2        if(Key==0x0b)             //启动频率输出
 250   2        {
 251   3           start=1;
 252   3           freqH=0xfe;
 253   3           freqL=0x16;
 254   3          // freqH=0xff;
 255   3          // freqL=0xdf;
 256   3               freq=1;
 257   3               i=0;
 258   3           TR1=1;                  //启动timer1
 259   3           LCD_cmd(0x01);/*清屏*/ 
 260   3           setxy(1,1);
 261   3           LCD_string("Start at:");
 262   3               setxy(2,1);
 263   3               LCD_string("01kHz");
 264   3        }
 265   2        
 266   2        if(Key==0x0c)             //停止频率输出
 267   2        {
 268   3           start=0;
 269   3               i=0;
 270   3           TR1=0;                  //停止timer1
 271   3           setxy(1,1);
 272   3           LCD_cmd(0x01);/*清屏*/ 
 273   3           LCD_string("Stop");
 274   3               setxy(2,1);
 275   3               LCD_string("Press b to start");
 276   3        }
 277   2        
 278   2        if(start==1)
 279   2        {
 280   3        
 281   3           if(0x00<=Key&&Key<=0x09)  //存储用户选择频率值
 282   3           {
 283   4             Keycode[i]=Key;
 284   4             i++;
 285   4                 if(i==1)
 286   4                 {
 287   5               setxy(2,0);
 288   5                   LCD_string("               ");  //清第二行
 289   5                 }
 290   4             setxy(2,i);
 291   4             Keydata=Key+48;
 292   4             LCD_char(Keydata);
 293   4                 
 294   4             if(i==2)
 295   4               i=0;
 296   4           }
 297   3                       
 298   3           if(Key==0x0a)                 //A为确认键
 299   3           { 
 300   4                 if(i==1)
 301   4                 continue;
 302   4                 i=0;
 303   4             freq=Keycode[0]*10+Keycode[1];
C51 COMPILER V8.02   51                                                                    08/01/2007 23:05:27 PAGE 6   

 304   4             if(freq<=20)
 305   4             {
 306   5               TR1=0;                 //停止timer1
 307   5               Tinit=0x10009-(uint)(500/freq);             //12M晶振 10009的值可微调
 308   5              // Tinit=0x10009-(uint)(1000/freq);          //24M晶振替换上一句
 309   5               freqH=(uchar)((Tinit&0xff00)>>8);
 310   5               freqL=(uchar)(Tinit&0x00ff);            //改变频率
 311   5               TR1=1;                 //启动timer1    
 312   5               LCD_string("kHz");
 313   5             }
 314   4             else
 315   4             {         
 316   5                      setxy(2,1);
 317   5              LCD_string("Out of range!");
 318   5             }
 319   4           }
 320   3           if(Key==0x0d)            //频率步进增加,步进0.5kHz
 321   3           {
 322   4              freq=freq+0.5;
 323   4              if(freq>20)
 324   4                freq=20;              //超出20kHz不再增加
 325   4              TR1=0;                 //停止timer1
 326   4              Tinit=0x10009-(uint)(500/freq);               //12M晶振 10009的值可微调
 327   4              // Tinit=0x10009-(uint)(1000/freq);           //24M晶振替换上一句
 328   4              freqH=(uchar)((Tinit&0xff00)>>8);
 329   4              freqL=(uchar)(Tinit&0x00ff);            //改变频率
 330   4              TR1=1;                 //启动timer1
 331   4              setxy(2,1);
 332   4              Keydata=(uchar)(freq/10);            //取十位        
 333   4              temp1=Keydata;
 334   4              LCD_char(Keydata+48);
 335   4              Keydata=(uchar)(freq-Keydata*10);    //取个位
 336   4              LCD_char(Keydata+48);
 337   4              if((freq-temp1*10-Keydata)!=0)
 338   4                      LCD_string(".5kHz");
 339   4              else
 340   4                      LCD_string(".0kHz");
 341   4           }
 342   3           if(Key==0x0e)            //频率步进减小,步进0.5kHz
 343   3           {
 344   4              freq=freq-0.5;
 345   4              if(freq<1)
 346   4                freq=1;              //小于1kHz不再减小
 347   4              TR1=0;                 //停止timer1
 348   4              Tinit=0x10009-(uint)(500/freq);              //12M晶振 10009的值可微调
 349   4              // Tinit=0x10009-(uint)(1000/freq);          //24M晶振 替换上一句
 350   4              freqH=(uchar)((Tinit&0xff00)>>8);
 351   4              freqL=(uchar)(Tinit&0x00ff);            //改变频率
 352   4              TR1=1;                 //启动timer1
 353   4              setxy(2,1);
 354   4              Keydata=(uchar)(freq/10);            //取十位        
 355   4              temp1=Keydata;
 356   4              LCD_char(Keydata+48);
 357   4              Keydata=(uchar)(freq-Keydata*10);    //取个位
 358   4              LCD_char(Keydata+48);
 359   4              if((freq-temp1*10-Keydata)!=0)
 360   4                      LCD_string(".5kHz");
 361   4              else
 362   4                      LCD_string(".0kHz");
 363   4           }
 364   3        }
 365   2      }
C51 COMPILER V8.02   51                                                                    08/01/2007 23:05:27 PAGE 7   

 366   1      
 367   1      }
 368          
 369          void timer1(void)  interrupt 3
 370          {   
 371   1          TH1=freqH;
 372   1              TL1=freqL;
 373   1          P2_0=~P2_0;           //输出方波
 374   1      }
 375          
 376          
 377          
 378          
 379          
 380          
 381          
 382          
 383          
 384          
 385          
 386          
 387          
 388          
 389          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1376    ----
   CONSTANT SIZE    =     86    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     18      26
   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 + -