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

📄 2.c

📁 用单片机控制MAX543
💻 C
字号:
#include<reg52.h>
#include<math.h>
#include <intrins.h>
#include <absacc.h>
#define DB P2    /*LCD8位数据*/
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit RS=P1^7;   /*LCD RS*/
sbit RW=P1^6;   /*LCD RW*/
sbit E=P1^5;    /*LCD E */
sbit CLK=P1^0;    
sbit SRI=P1^1;    
sbit LOAD=P1^2;     
long data vout;      /*输出*/
uint data add=1;     /*粗调细调控制,粗调add为10,细调add为1.*/
ulong data phase;  

void delay(int b)    /*延时控制程序*/
{int i;
 for(i=0;i<b;i++);
}


void sentv (void)
{int i;
 LOAD=1;
 CLK=0;
 SRI=0;
 delay(20);
 for(i=0;i<12;i++)
 {CLK=1;
  if(phase&0x800)
  SRI=1;
  else SRI=0;
  delay(5);
  CLK=0;
  phase=phase<<1;
 } 
 LOAD=0;
 delay(5);
 LOAD=1;
}





void chav(void)    /*调电压子程序*/
{static uchar st;

 if(P3^6==0)          /*是否按下*/
  {delay(200);
   if(P3^6==0) vout=0;   /*长按fout=0*/
   else{if(add==1) add=10;  /*安下放开为粗调细调之间切换*/
        else add=1;
        }
  }

   if(P3^7&&P3^5)    /*增减判断*/
   st = 1;
   if(st)
   {
      if(P3^7==0&&P3^5==0)
      {
         if(P3^7)
         {
            st = 0;
            vout=vout+add;  /*增*/
         }
         if(P3^5)
         {
            st = 0;
            vout=vout-add;  /*减*/
         }
      }
   }


 if(vout<0)              /*下限*/
  vout=0;

 if(vout>4095)          /*上限*/
  vout=4095;
 }


void clearlcd(void)       /*清屏*/
{E=1;
 RS=0;
 RW=0;
 DB=0x01;
 delay(1520);
 E=0;
}


void Readbusy(void)       /*判断是否忙*/
{E=1;
 RS=0;
 RW=1;
 _nop_();
 while(DB^7==1)           /*忙一直判断*/
 {if(DB^7==0)break;}      /*不忙跳出*/
 E=0;
}

void Write(unsigned c)    /*写入LED*/
{RS=1;
 RW=0;
 E=1;
 DB=c;
 delay(1);
 E=0;
}

void Shift(void)         /*左移一位*/
{RS=0;
 RW=0;
 E=1;
 DB=0x1c;
 delay(1);
 E=0;
}

void Display(void)       /*显示*/
{int a;
 uchar b; 
 a=vout/1000;
 b=0x30|a;
 Readbusy();
 Write(b);
 Shift();
 b=0x2E;               /*.*/
 Readbusy();
 Write(b);
 Shift();
 a=vout%1000/100;
 b=0x30|a;
 Readbusy();
 Write(b);
 Shift();
 a=vout%100/10;
 b=0x30|a;
 Readbusy();
 Write(b);
 Shift();
 a=vout%1000;
 b=0x30|a;
 Readbusy();
 Write(b);
 Shift();
 b=0x56;   /*V*/
 Readbusy();
 Write(b);
}

void Setlcd(unsigned c)    /*设置LED*/
{RS=0;
 RW=0;
 E=1;
 DB=c;
 delay(1);
 E=0;
}


void Rstlcd(void)         /*初始设置*/
{delay(15000);
 Setlcd(0x3C);            /*SET Function*/
 Setlcd(0x34);            /*SET Function*/
 Setlcd(0x0D);            /*Display*/
 Setlcd(0x07);            /*Shift*/
 clearlcd();
}


void Home(void)          /*光标复位*/
{RS=0;
 RW=0;
 E=1;
 DB=0x02;
 delay(1000);
 E=0;
}


void main(void)         /*主函数*/
{vout=0;
 Rstlcd();              /*初始LCD*/
 while(1)
 {phase=vout;      /*计算出32位的频率值*/
  sentv();           
  Readbusy();                  /*判断是否忙*/
  clearlcd();                  /*清屏*/
  Display();                   /*显示*/
  Home(); 
  chav();                         /*光标复位*/
 }
}

⌨️ 快捷键说明

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