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

📄 kt.c

📁 低频数字式相位测量仪; 此系统由相位测量仪、数字式移相信号发生器和移相网络三部分组成。为使系统更加稳定
💻 C
字号:
 #include<reg51.h>
 #include<intrins.h>

 #define uchar unsigned char
 #define schar signed char
 #define uint  unsigned int

 //define data
 #define NTH1D    0xF4      // MODE 1  4MHz: 0FAH  6MHZ: 0FBH   2.5MS
 #define NTL1D    0xD0      //         12MHZ: 2.85MS= 2850=B30H=-F4D0H
 #define KSETD    0X01      // set button
 #define KMOVED   0x02      // move bit button
 #define KUPD     0x03      // add 1 button
 #define KDOWND   0x04      // subtract 1 button

 //define bit
 sbit  RCLKB =P1^0 ;       // A0
 sbit  A1B   =P1^1 ;       // A1
 sbit  SRCLKB=P1^2 ;       // A2
 sbit  SERB  =P1^3 ;       // A3
 sbit  GB    =P1^4 ;       // G=1 out is high ,G=0 out is admit
 sbit  KEYB  =P1^5 ;
 bit   SHINE       ;       // LED shine
 bit   BANK        ;

 //all x
 uchar data Keysigne,      // which key down
            Keysigne1,
            Disbit,        // display bit
            Kled,          // signe LED  contrl shine
            N,             // contrl shine time
            Pn0;           // contrl point
 schar data  C2;           // sub 1
 uchar  Tfxtest;
 uint   F,                 //  濒率
        FN,
        PP;                 //  相位

 //function list
 void first(void);         // first send data
 void key(void);           // key deal
 // void display(void);
 void delay(uint m);
 void keydelay(void);      // 去抖
 void sudr(void);          // set up down reset
 void set(void);
 void move(void);
 void up(void);
 void down(void);
 void high(void);          // clear high bit 0
 void rehigh(void);        // recover high 0
 void disbuft(void);
 void deal(uint m,uint n);

 // point define
 uchar code *p;
 uchar data *pd;
 //arange define
 uchar data disbuf[8]={10,2,3,4,5,6,7,8};    // display is area
 uchar data disbuff[8]={0,0,0,0,11,12,10,10};    // display is area
 uchar data disbufp[8]={0,0,0,0,11,12,10,10};    // display is area
 //uchar code tab[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0}; //0-9
 uchar code tab[]={0XFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0};
 uchar code tabf[]={0XFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0,0x6e,0x8e};
 uchar code tabp[]={0XFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0,0x6e,0xce};
 //T1 MODE 1  2.85S
 void timer1(void) interrupt 3 using 1  // T=0.544ms  12MHZ
 {
    uchar data x1,save;
    GB=1;                               // clear display
    TH1=NTH1D;
    TL1=NTL1D;
    KEYB=1;
    if(KEYB==0)
     { Keysigne=Disbit; }               // 取键
    if((C2==Disbit)&&(SHINE==1)) save=0;
    else save=p[pd[Disbit]&0xef];
    if(Pn0==Disbit) save=save|0x80;
    if(Disbit==8) save=Kled;
    // send data to display
    RCLKB=0;
    for(x1=0;x1<8;x1++)                  // send data to 74HC595
    {
        SRCLKB=0;
        save=save<<1;
        SERB=CY;                         // send 1 bit to SER
        SRCLKB=1;                        // low-to-high
    }
    RCLKB=1;                             // send 8 bit to 74HC595 save
    P1=P1&0xf0;
    P1=P1|Disbit;
    GB=0;
    Disbit+=1;
    if(Disbit==9)   Disbit=0;
    if(++N==100)  { SHINE=0; }          // LED shine contrl
    if(N==200)  { N=0; SHINE=1; }
 }

void main(void)
 {
     first();
     F=5555; PP=90;
     FN=F/2;
     deal(F,PP);
     Pn0=4;
     pd=disbuf;
     p=tab;
     while(1)
     {
        high();
        key();
     }
 }

 void first(void)
 {
    TMOD=0X10;
    TH1=NTH1D;
    TL1=NTL1D;
    ET1=1;
    EA=1;
    TR1=1;
    P0=0XFF;
    P1=0xff;
    P2=0XFF;
    P3=0XFF;
    Kled=0;
    SHINE=0;
    BANK=0;
    C2=0xff;
    Keysigne1=0;
    Pn0=0xff;
 }

 void key(void)
 {
    keydelay();
    if(Keysigne==0) { return; }
    delay(3500);                 // first push delay
    keydelay();
    if(Keysigne!=KSETD) { return; }
    keydelay();
    while(Keysigne)
    keydelay();                  // 等待键放开
    Kled=0x20;                   // set led
    BANK=1;
    pd=disbuff;
    p=tabf;
    rehigh();
    C2=3;
    while(BANK)
    {
       sudr();
    }
    Kled=0;
    C2=0XFF;
    high();
    pd=disbuf;
    p=tab;
    disbuft();
 }

 void keydelay(void)
 {
     uint j1=1200;//1430;
     Keysigne=0;
     KEYB=1;
     while(--j1)
     {
       _nop_(); _nop_();
       _nop_(); _nop_();
     }
 }

 void sudr(void)
 {
      while(Keysigne==0) {keydelay(); Keysigne1=Keysigne;}
      while(Keysigne) keydelay();
      if(Keysigne1==KUPD) up();
      while(Keysigne==0) {keydelay(); Keysigne1=Keysigne;}
      while(Keysigne) keydelay();
      if(Keysigne1==KDOWND) down();
      while(Keysigne==0) {keydelay(); Keysigne1=Keysigne;}
      while(Keysigne) keydelay();
      if(Keysigne1==KMOVED) move();
      while(Keysigne==0) {keydelay(); Keysigne1=Keysigne;}
      while(Keysigne) keydelay();
      if(Keysigne1==KSETD) set();
 }

 void set(void)
 {
     BANK=0;
     F=disbuff[0]*1000+disbuff[1]*100+disbuff[2]*10+disbuff[3];
     FN=F/2;
     PP=disbufp[1]*100+disbufp[2]*10+disbufp[3];
     deal(F,PP);
 }

 void move(void)
 {
    ++Tfxtest;
    if(Tfxtest==1) {p=tabp;pd=disbufp;}
    if(Tfxtest==2) {p=tabf;pd=disbuff;Tfxtest=0;}
 }

 void up(void)
 {
     --C2;
     if(C2==-1) C2=3;

 }

 void down(void)
 {
     ++pd[C2];
     if(pd[C2]==10) pd[C2]=0;
 }

 void delay(uint m)
 {
     while(--m)
     {
          _nop_();_nop_();_nop_();_nop_();
          _nop_();_nop_();_nop_();_nop_();
          _nop_();_nop_();_nop_();_nop_();
          _nop_();_nop_();_nop_();_nop_();
          _nop_();_nop_();_nop_();_nop_();
          _nop_();_nop_();_nop_();_nop_();
          _nop_();_nop_();_nop_();_nop_();
          _nop_();_nop_();_nop_();_nop_();
          _nop_();_nop_();_nop_();_nop_();
          _nop_();_nop_();_nop_();_nop_();
          _nop_();_nop_();_nop_();_nop_();
          _nop_();_nop_();_nop_();_nop_();
          _nop_();_nop_();_nop_();_nop_();
          _nop_();_nop_();_nop_();_nop_();
     }
 }

 void high(void)
 {
     if(disbuf[0]==0)
     {
        disbuf[0]=10;
        if(disbuf[1]==0)
        {
           disbuf[1]=10;
           if(disbuf[2]==0) disbuf[2]=10;
        }
     }
 }

 void rehigh(void)
 {
      if(disbuf[0]==10)
     {
        disbuf[0]=0;
        if(disbuf[1]==10)
        {
           disbuf[1]=0;
           if(disbuf[2]==10) disbuf[2]=0;
        }
     }
 }
 void disbuft(void)
 {
     disbuf[0]=disbuff[0];
     disbuf[1]=disbuff[1];
     disbuf[2]=disbuff[2];
     disbuf[3]=disbuff[3];
     disbuf[4]=disbufp[0];
     disbuf[5]=disbufp[1];
     disbuf[6]=disbufp[2];
     disbuf[7]=disbufp[3];
 }
 void deal(uint m,uint n)
    {
       uchar data b0,b1,b2,b3,b4;
       uint div=1000;
       disbuf[0]=m/div;
       m%=div;
       div/=10;
       disbuf[1]=m/div;
       m%=div;
       div/=10;
       disbuf[2]=m/div;
       m%=div;
       disbuf[3]=m/div;
       div=1000;
       disbuf[4]=n/div;
       n%=div;
       div/=10;
       disbuf[5]=n/div;
       n%=div;
       div/=10;
       disbuf[6]=n/div;
       n%=div;
       disbuf[7]=n/div;
    }

⌨️ 快捷键说明

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