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

📄 108.lst

📁 PIC16F876单片机,有4到20MA电流输出,低功耗等特点,使用于工业仪表行业
💻 LST
📖 第 1 页 / 共 4 页
字号:
   318:  WR=0;  
   319:  delay1();     
   320:  WR=1;  
   321:  delay1();   //d=0
   322:  
   323:  DATA=1; 
   324:  delay1();   
   325:  WR=0;  
   326:  delay1();  
   327:  WR=1;  
   328:  delay1();   //d=1
   329:  addr=0x1b;
   330: addr<<=2;                                                       //surpose that ADDR=8bit
   331:   for (k=0;k<6;k++)
   332:     {
   333:      if (addr&0x80)
   334:          DATA=1;
   335:      else
   336:          DATA=0;
   337:      WR=0;
   338:      delay1();
   339:      WR=1;
   340:      delay1();
   341:      addr<<=1;
   342:     }  
   343:         da=j;  //0x01--Q1;  0x0e--P;  0x0f--Q1P
   344:         for(m=0;m<4;m++)
   345:                 {
   346:                 if(da&0x08)             //send  DATA first ,WR clock second for safety
   347:                         DATA=1;
   348:                 else
   349:                         DATA=0;
   350:                 WR=0;
   351:         delay1();
   352:                 WR=1;
   353:                 delay1();
   354:                 da<<=1; 
   355:                 }
   356: }
   357: 
   358: //#pragma interrupt_level 1
   359: void Lcd_Black()                                        //全黑屏
   360: {
   361: uchar k,m,da,i,addr;
   362: //write data mode :101
   363: CS=1;              // pre-initialize 
   364:  delay1();
   365: CS=0;              // pre-initialize 
   366:  delay1();
   367: 
   368: DATA=1; 
   369:  delay1();   
   370:  WR=0;  
   371:  delay1();  
   372:   WR=1;  
   373:  delay1();   //d=1  data mode 101
   374:  
   375: DATA=0; 
   376:  delay1();   
   377:  WR=0;  
   378:   delay1();     
   379:  WR=1;  
   380:  delay1();   //d=0
   381:  
   382:  DATA=1; 
   383:  delay1();   
   384:  WR=0;  
   385:  delay1();  
   386:  WR=1;  
   387:  delay1();   //d=1
   388:  
   389:  addr=0x00;           //the digit 5's address
   390:             
   391: // Lcd_Write_Data_Addr();
   392: //addr<<=2;                                                     //surpose that cpu sets ADDR=8bit
   393:   
   394:   for (k=0;k<6;k++)
   395:     {
   396:      DATA=0;
   397:      WR=0;
   398:      delay1();
   399:      WR=1;
   400:      delay1();
   401:     }
   402:   
   403:   for(m=0;m<32;m++)                       //32 addr:00000--------11111
   404:     { 
   405:        //da=0x08;                 //TEST DA=0X00,0X01,0X02,0X04,0X08
   406:        //da<<=4; 
   407:        da=0x00;                   //TEST DA=0X00,0X10,0X20,0X40,0X80
   408:        for(i=0;i<4;i++)
   409:         {
   410:           if(da&0x80)
   411:                 DATA=1;
   412:           else 
   413:                 DATA=0; 
   414:           WR=0;
   415:           delay1();    
   416:           WR=1;
   417:           delay1();
   418:           da<<=1;                
   419:          }
   420:     }     
   421:  }
   422: 
   423: 
   424: void  Lcd_Init(void)        //initialize the lcd
   425: {
   426:  delay2();     
   427:  Lcd_Write_Com(0b00101001);     //own to LCM141 only
   428:  Lcd_Write_Com(0b00010100);             // external oscillator mode
   429:  Lcd_Write_Com(0b00000001);             //open oscillater
   430:  Lcd_Write_Com(0b00000011);     
   431: }
   432: 
   433: void Timer_Init(void)
   434: {
   435: Lcd_Black();
   436: clrwdt();
   437: INTCON=0xe8;            //ei();//GIE=1;PEIE=1;T0IF=0;T0IE=1;  T0CS=0;//选内部时钟
   438: OPTION=0x87;            //分频比为 1:256 ,屏蔽RB口弱上拉~RBPU=1//PSA=0;
   439: //TMR0=0x62; 
   440: TMR1IE=0; 
   441: //TMR1IF=0;
   442: T1CON=0x03;             //P13WLT//分频比1:1T1CKPS1=0;T1CKPS0=0;~T1SYNC=0同步;
   443: TMR1H=0x00;             //赋初值;TMR1CS=1计数;TMR1ON=1;//开启计数器
   444: TMR1L=0x00;
   445: TMR0=0x97; 
   446: clrwdt();
   447: }    
   448: 
   449: #pragma interrupt_level 1
   450: void interrupt ISR(void)
   451: {
   452: 
   453: if(KEY_F) //莫用 if(RBIE&&RBIF)语句,否则任意键按下都会中断(起作用)
   454:         {key_f=1;
   455:         }
   456: else
   457:         {key_f=0;
   458:         RBIF=0;
   459:         }
   460: if(KEY_SR) 
   461:         {key_sr=1;
   462:         } 
   463: else
   464:         {key_sr=0;
   465:         RBIF=0;
   466:         }    
   467: if(KEY_ADD) 
   468:         {key_add=1;
   469:         }
   470: else
   471:         {key_add=0;
   472:         RBIF=0;
   473:         }                       
   474: if(KEY_F&&KEY_SR) //进入置数状态标志
   475:         {
   476:         key_f_sr=1;
   477:         }
   478: else
   479:         {key_f_sr=0;
   480:         RBIF=0;
   481:         }       
   482: if(KEY_SR&&KEY_ADD) 
   483:         {
   484:         key_sr_add=1;
   485:         }
   486: else
   487:         {key_sr_add=0;
   488:         RBIF=0;
   489:         }   
   490: 
   491: if(KEY_F&&KEY_ADD)      //莫用 if(RBIE&&RBIF)语句,清累计量标志
   492:         {key_f_add=1;
   493:         }       //也可读一下PORTB口
   494: else
   495:         {key_f_add=0;
   496:         RBIF=0;
   497:         }   
   498:                         
   499: if(T0IF&&T0IE)          //定时时间1s=(4/640k)*(256-tm0)[158]*(分频比256)*循环次数c[4]
   500:         { 
   501:         T0IF=0; 
   502:         ct++;
   503:         TMR0=0x97;                      //可设初值为4,然后c--;
   504:         if(ct%2==0)
   505:         {flag_tmr1=1;
   506:         flag_turn=!flag_turn;
   507:         flag_tmr1=0;}
   508:         if(ct==6)       //原为4
   509:                 { 
   510:                 flag_tmr0=1;
   511:                 ct=0; }
   512:         }
   513: }
   514: 
   515: void Read_Fre_K()                       //读出仪表系数
   516:         {
   517:         uchar i;
   518:         uint a,b,c,e;
   519:         float d,g;
   520:         uchar da_ee[12];
   521:         
   522:         for(i=0;i<4;i++)
   523:         {da_ee[i]=eeprom_read(255-i);clrwdt();}
   524: 
   525:         a=da_ee[0]*1000;clrwdt();
   526:         b=da_ee[1]*100;clrwdt();
   527:         c=da_ee[2]*10;clrwdt();
   528:         F1=a+b+c+da_ee[3];clrwdt();
   529:         
   530:         for(i=0;i<8;i++)
   531:         {da_ee[4+i]=eeprom_read(251-i);clrwdt();}                       
   532:         da_ee[4]=eeprom_read(251);
   533:         d=da_ee[4]*1000;clrwdt();
   534:         e=da_ee[5]*100;clrwdt();
   535:         d=(d+e)*100;
   536:         a=da_ee[6]*1000;clrwdt();
   537:         b=da_ee[7]*100;clrwdt();
   538:         c=da_ee[8]*10;clrwdt();
   539:         K1=da_ee[9]+c+b+a+d;clrwdt();
   540: 
   541:         
   542:         for(i=0;i<4;i++)
   543:         {da_ee[i]=eeprom_read(243-i);clrwdt();}
   544:         
   545:         a=da_ee[0]*1000;
   546:         b=da_ee[1]*100;
   547:         c=da_ee[2]*10;
   548:         F2=a+b+c+da_ee[3];clrwdt();
   549:         
   550:         for(i=0;i<8;i++)
   551:         {da_ee[4+i]=eeprom_read(239-i);clrwdt();}       
   552:         
   553:         d=da_ee[4]*1000;clrwdt();
   554:         e=da_ee[5]*100;clrwdt();
   555:         d=(d+e)*100;
   556:         a=da_ee[6]*1000;clrwdt();
   557:         b=da_ee[7]*100;clrwdt();
   558:         c=da_ee[8]*10;clrwdt();
   559:         K2=da_ee[9]+c+b+a+d;clrwdt();
   560: 
   561:         
   562:         for(i=0;i<4;i++)
   563:         {da_ee[i]=eeprom_read(231-i);clrwdt();} 
   564: 
   565:         a=da_ee[0]*1000;
   566:         b=da_ee[1]*100;
   567:         c=da_ee[2]*10;
   568:         F3=a+b+c+da_ee[3];clrwdt();
   569: 
   570:         for(i=0;i<8;i++)
   571:         {da_ee[4+i]=eeprom_read(227-i);clrwdt();}
   572: 
   573:         d=da_ee[4]*1000;clrwdt();
   574:         e=da_ee[5]*100;clrwdt();
   575:         d=(d+e)*100;
   576:         a=da_ee[6]*1000;clrwdt();
   577:         b=da_ee[7]*100;clrwdt();
   578:         c=da_ee[8]*10;clrwdt();
   579:         K3=da_ee[9]+c+b+a+d;clrwdt();
   580: 
   581:         
   582:         for(i=0;i<4;i++)
   583:         {da_ee[i]=eeprom_read(219-i);clrwdt();}
   584: 
   585:         a=da_ee[0]*1000;clrwdt();
   586:         b=da_ee[1]*100;clrwdt();
   587:         c=da_ee[2]*10;clrwdt();
   588:         F4=a+b+c+da_ee[3];clrwdt();
   589:         
   590:         for(i=0;i<8;i++)
   591:         {da_ee[4+i]=eeprom_read(215-i);clrwdt();}
   592:         d=da_ee[4]*1000;clrwdt();
   593:         e=da_ee[5]*100;clrwdt();
   594:         d=(d+e)*100;
   595:         a=da_ee[6]*1000;clrwdt();
   596:         b=da_ee[7]*100;clrwdt();
   597:         c=da_ee[8]*10;clrwdt();
   598:         K4=da_ee[9]+c+b+a+d;clrwdt();
   599: 
   600:         
   601:         for(i=0;i<4;i++)
   602:         {da_ee[i]=eeprom_read(207-i);clrwdt();}
   603: 
   604:         a=da_ee[0]*1000;clrwdt();
   605:         b=da_ee[1]*100;clrwdt();
   606:         c=da_ee[2]*10;clrwdt();
   607:         F5=a+b+c+da_ee[3];clrwdt();
   608:         
   609:         for(i=0;i<8;i++)
   610:         {da_ee[4+i]=eeprom_read(203-i);clrwdt();}
   611:         d=da_ee[4]*1000;clrwdt();
   612:         e=da_ee[5]*100;clrwdt();
   613:         d=(d+e)*100;
   614:         a=da_ee[6]*1000;clrwdt();
   615:         b=da_ee[7]*100;clrwdt();
   616:         c=da_ee[8]*10;clrwdt();
   617:         K5=da_ee[9]+c+b+a+d;clrwdt();
   618: 
   619:         
   620:         for(i=0;i<4;i++)
   621:         {da_ee[i]=eeprom_read(195-i);clrwdt();}
   622:         a=da_ee[0]*1000;clrwdt();
   623:         b=da_ee[1]*100;clrwdt();
   624:         c=da_ee[2]*10;clrwdt();
   625:         F6=a+b+c+da_ee[3];clrwdt();
   626:         
   627:         for(i=0;i<8;i++)
   628:         {da_ee[4+i]=eeprom_read(191-i);clrwdt();}
   629:         d=da_ee[4]*1000;clrwdt();
   630:         e=da_ee[5]*100;clrwdt();
   631:         d=(d+e)*100;
   632:         a=da_ee[6]*1000;clrwdt();
   633:         b=da_ee[7]*100;clrwdt();
   634:         c=da_ee[8]*10;clrwdt();

⌨️ 快捷键说明

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