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

📄 testpromain.lst

📁 单片机学习例子(全面测试程序) 适合初学者使用
💻 LST
📖 第 1 页 / 共 2 页
字号:
 223          void ext_int0() interrupt 0    //外部中断0服务程序
 224          {  
 225   1              EA = 0;
 226   1              Delay(4000);
 227   1              key1_flag=1;
 228   1              EA = 1;
 229   1      }
 230          void ext_int1() interrupt 2    //外部中断1服务程序
 231          {  
 232   1              EA = 0;
 233   1              Delay(4000);
 234   1              key2_flag=1;
 235   1              EA = 1;
 236   1      }
 237          
 238          //中断源编号为4,即串口中断
 239          void getch(void) interrupt 4 
 240          {
 241   1                      
C51 COMPILER V7.20   TESTPROMAIN                                                           08/23/2006 23:05:42 PAGE 5   

 242   1              uchar m;
 243   1              EA=0;
 244   1          //清除中断标志,硬件置位,软件清零
 245   1              RI=0; 
 246   1              //接受串口缓冲区数据             
 247   1              m=SBUF;
 248   1              if(m==0x80)
 249   1              {
 250   2                      
 251   2                      test_serial();
 252   2      
 253   2              }
 254   1          //通过串口缓冲区向外发送数据
 255   1              //SBUF=m;    
 256   1              //判断是否发送结束:TI==1为结束
 257   1              //while(TI==0); 
 258   1              //发送结束标志清零
 259   1              //TI=0; 
 260   1              EA=1;
 261   1                           
 262   1      }
 263          /*
 264          code char num_data[]={"0123456789"};
 265          void send_serial_data(char dat)
 266          {
 267                  SBUF=dat;
 268                  while(TI==0);
 269                  TI=0;   
 270          }
 271          */
 272          
 273          /*
 274          void longdelay(uchar s)  //长延时
 275          {
 276                   while(s--)
 277                   {
 278                          _delay(60) ;
 279                   }
 280          }
 281          */
 282          void _delay(uchar ms)
 283          {       // 延时子程序
 284   1               uchar i ;
 285   1               while(ms--)
 286   1               {
 287   2                      for(i = 0 ; i<250;i++) ;
 288   2               }
 289   1      }
 290          /*
 291          BOOL lcd_bz()
 292          {       // 测试LCD忙碌状态
 293                   BOOL result ;
 294                   rs = 0 ;
 295                   rw = 1 ;
 296                   ep = 1 ;
 297                   result = (BOOL)(P0 & 0x80) ;
 298                   ep = 0 ;
 299                   return result ; 
 300          }
 301          */
 302          
 303          void lcd_wcmd(uchar cmd)
C51 COMPILER V7.20   TESTPROMAIN                                                           08/23/2006 23:05:42 PAGE 6   

 304          {       // 写入指令数据到LCD
 305   1              //while(lcd_bz()) ;
 306   1              _delay(1);
 307   1              rs = 0 ;
 308   1              rw = 0 ;
 309   1              ep = 0 ;
 310   1              P0 = cmd ;
 311   1              ep = 1 ;
 312   1              ep = 0 ;  
 313   1      }
 314          
 315          void lcd_pos(uchar pos)
 316          {       //设定显示位置
 317   1              lcd_wcmd(pos | 0x80) ;
 318   1      }
 319          
 320          void lcd_wdat(uchar dat) 
 321          {       //写入字符显示数据到LCD
 322   1              //while(lcd_bz()) ;
 323   1              _delay(1);
 324   1              rs = 1 ;
 325   1              rw = 0 ;
 326   1              ep = 0 ;
 327   1              P0 = dat ;
 328   1              ep = 1 ;
 329   1              ep = 0 ; 
 330   1      }
 331          
 332          void lcd_init()
 333          {       //LCD初始化设定
 334   1               lcd_wcmd(0x38) ;   //function set
 335   1               _delay(1) ;
 336   1               lcd_wcmd(0x38) ;   //function set
 337   1               _delay(1) ;
 338   1               lcd_wcmd(0x08) ;   //display on/off
 339   1               _delay(1) ;
 340   1               lcd_wcmd(0x01) ;   //清除LCD的显示内容
 341   1               _delay(1) ;
 342   1               lcd_wcmd(0x06) ;   //entry mode set
 343   1               _delay(1) ;
 344   1               lcd_wcmd(0x0c) ;   //entry mode set
 345   1               _delay(1) ;
 346   1      }
 347          
 348          
 349          void display(uchar pos, uchar *q)
 350          { 
 351   1               uchar i ;
 352   1               //lcd_wcmd(0x01) ; //clear 
 353   1               _delay(10) ;
 354   1               lcd_pos(pos) ;
 355   1               for(i=0 ;i<16;i++)
 356   1               {
 357   2                        lcd_wdat(*q) ;
 358   2                        q++ ;
 359   2                        _delay(60) ;
 360   2               } 
 361   1      }
 362          
 363          void test_lcd(void)
 364          {
 365   1              CE573=0;  //1
C51 COMPILER V7.20   TESTPROMAIN                                                           08/23/2006 23:05:42 PAGE 7   

 366   1              display(0x00,dis1) ;
 367   1              display(0x40,dis2) ;
 368   1              display(0x14,dis1) ;
 369   1              display(0x54,dis2) ;
 370   1              P0=0xFF;
 371   1              CE573=1;         //0
 372   1      }
 373          
 374          
 375          main()
 376          {
 377   1      
 378   1              initmpu();
 379   1              lcd_init(); 
 380   1              Delay(10000);   
 381   1              
 382   1      
 383   1                
 384   1                      test_led();
 385   1                      test_digseg();  
 386   1                      test_beep();
 387   1                      test_lcd();
 388   1              
 389   1                      test_serial();
 390   1      
 391   1                      while(1)
 392   1                      {
 393   2                              if(key1_flag)
 394   2                              {
 395   3                                      key1_flag=0;
 396   3                                      P0=digseg[1];
 397   3                                      P1=0xFE;
 398   3      
 399   3      
 400   3              
 401   3                              }
 402   2                              else if(key2_flag)
 403   2                              {
 404   3                                      key2_flag=0;
 405   3                                      P0=digseg[2];
 406   3                                      P1=0xFC;
 407   3                                              
 408   3                              }
 409   2                              else if(check_K3())
 410   2                              {
 411   3                                      P0=digseg[3];
 412   3                                      P1=0xF8;
 413   3              
 414   3                              }
 415   2                              else if(check_K4())
 416   2                              {
 417   3                                      P0=digseg[4];
 418   3                                      P1=0xF0;
 419   3                              }
 420   2                              else if(check_K5())
 421   2                              {
 422   3                                      P0=digseg[5];
 423   3                                      P1=0xE0;        
 424   3                              }
 425   2                              SEL_D1;
 426   2                              _delay(600);
 427   2                              REL_D1;
C51 COMPILER V7.20   TESTPROMAIN                                                           08/23/2006 23:05:42 PAGE 8   

 428   2                              _delay(600);
 429   2                              
 430   2                      }
 431   1      
 432   1              
 433   1      
 434   1              
 435   1                                        
 436   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    691    ----
   CONSTANT SIZE    =    107    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       1
   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 + -