久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 使用AT89C4051單片機+CD4069的簡易LC測試儀源程序電路原理圖 [打印本頁]

作者: 太陽雨ZW    時間: 2024-11-20 14:32
標題: 使用AT89C4051單片機+CD4069的簡易LC測試儀源程序電路原理圖
電路原理圖如下:


單片機源程序如下:
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
/**********1602************/
sbit RS=P1^7;
sbit EN=P1^6;
sbit LCD_D4=P1^3;
sbit LCD_D5=P1^2;
sbit LCD_D6=P1^1;
sbit LCD_D7=P1^0;
sbit L_C=P3^0;
//---------------------------
bit Lc=1;
uchar cnt=0;
float counter=0;
float F1=0;
float F2=0;
float C1=0;
float L1=0;
ulong temp1=0;
ulong temp2=0;
unsigned char Data[8];
unsigned char Table[]="0123456789";
/********以下是函數聲明********/
void LCD_en_write(void);//液晶使能
void LCD_by(uchar abc);//寫字節
void LCD_set_xy(uchar x, uchar y);//寫地址
void LCD_write_str(uchar X,uchar Y,uchar *s);//寫字符串
void LCD_init(void);//液晶初始化
void del_ms(uint n);//ms延時函數
void delay_5us(void);//5us延時函數
void delay_nus(uint n);//N us延時函數
void T0_T1_ini(void);//定時器初始化
void process_8(unsigned long i,unsigned char *p) ;
void display_8C(unsigned char x, unsigned char y, unsigned char *p);
ulong calc_Cx(float cl);//計算被測電容Cx
float calc_Lx(float cl);//計算被測電感Lx
void display_8L(unsigned char x, unsigned char y, uchar *p);
//-----------------------------------------
void process_8(unsigned long i,uchar *p)
{
  p[0]=i/10000000%10;
  p[1]=i/1000000%10;
  p[2]=i/100000%10;
  p[3]=i/10000%10;
  p[4]=i/1000%10;
  p[5]=i/100%10;
  p[6]=i/10%10;
  p[7]=i%10;
}
//-------------------------------------------------------
void display_8C(unsigned char x, unsigned char y, uchar *p)
{
  unsigned char i;
  LCD_set_xy( x, y );
  RS=1;            
  for(i=0;i<8;i++)
  {
    LCD_by(Table[p[ i]]);
  }
}
//--------------------------------------------------------
void display_8L(unsigned char x, unsigned char y, uchar *p)
{
  unsigned char i;
  LCD_set_xy( x, y );
  RS=1;         
  for(i=0;i<8;i++)
  {
    if(i==6)
    {
      LCD_write_str(10,1,".");
    }
      LCD_by(Table[p[ i]]);
  }
}
//---------------------------------------------
void LCD_en_write(void)
{
     delay_5us();
     EN=1;        
     delay_5us();
     EN=0;        
}
//---------------------------------------
void LCD_by(uchar abc)
{
    delay_nus(500);
    if(((abc<<0)&0x80)==0)     
     LCD_D7=0;            
     else LCD_D7=1;         
    if(((abc<<1)&0x80)==0)     
     LCD_D6=0;              
     else LCD_D6=1;        
    if(((abc<<2)&0x80)==0)     
     LCD_D5=0;              
     else LCD_D5=1;        
    if(((abc<<3)&0x80)==0)     
     LCD_D4=0;              
     else LCD_D4=1;        
    LCD_en_write();

    if(((abc<<4)&0x80)==0)     
     LCD_D7=0;              
     else LCD_D7=1;         
    if(((abc<<5)&0x80)==0)     
     LCD_D6=0;              
     else LCD_D6=1;         
    if(((abc<<6)&0x80)==0)     
     LCD_D5=0;              
     else LCD_D5=1;         
    if(((abc<<7)&0x80)==0)     
     LCD_D4=0;              
     else LCD_D4=1;         
    LCD_en_write();
}
//----------------------------------------------
void LCD_set_xy( uchar x, uchar y )
  {
    uchar address;
    if (y == 0) address = 0x80 + x;
    else
    address = 0xc0 + x;
    RS=0;           
    LCD_by(address);
  }
//---------------------------------------------
void LCD_write_str(uchar X,uchar Y,uchar *s)
  {
    LCD_set_xy(X,Y);
    RS=1;
    while(*s)
    {
       LCD_by(*s);
       s++;
    }
  }
//------------------------------------
void LCD_init(void)     
{
    RS=0;            
    del_ms(500);

    LCD_by(0x30);
    del_ms(60);
    LCD_by(0x30);
    del_ms(10);
    LCD_by(0x30);
    del_ms(10);
    LCD_by(0x02);
    del_ms(10);
    LCD_by(0x28);
    del_ms(10);
    LCD_by(0x08);
    del_ms(10);
    LCD_by(0x01);
    del_ms(10);
    LCD_by(0x06);
    del_ms(10);
    LCD_by(0x0C);
    del_ms(100);
}
//----------------------------------------------
void delay_nus(uint n)//N us延時函數
  {
   uint i=0;
   for (i=0;i<n;i++){;}
  }
//------------------------------
void delay_5us(void)//@12.000MHz//5us延時函數
{
   unsigned char data i;

   _nop_();
   _nop_();
   i = 12;
   while (--i);
}

//------------------------------
void del_ms(uint n)//ms延時函數
{
   uchar j;
   while(n--)
  {for(j=0;j<125;j++);}
}
//------------------------------
void T0_T1_ini(void)
{
   TMOD=0x15;//T1方式1定時,T0方式1計數
   TH1=(65536-50000)/256;//50ms
   TL1=(65536-50000)%256;
   TH0=0x00;
   TL0=0x00;
   TR0=1;
   TR1=1;
   EA=1;
   ET1=1;
}
//-------------------------------
void timer1(void) interrupt 3 using 2//測頻率
{
   TH1=(65536-50000)/256;//50ms
   TL1=(65536-50000)%256;
   TF1=0;
   cnt++;
   if(cnt==2)//0.1秒閘門
   {
     cnt=0;
     temp1=TL0;
     temp2=TH0;
     TR0=0;
     TL0=0;
     TH0=0;
     TR0=1;
     counter=((temp2*256)+temp1)*10;
     if(Lc==1)//先測出頻率值F1
     {
       Lc=0;
       F1=counter;
      }
    }
}
//--------------------------------
ulong calc_Cx(float cx)//計算C
{
  float x;
  float temp1;
  
  temp1=(float)F1/(float)F2;
  x=(float)(((temp1*temp1)-1)*cx);        
  return x;
}
//--------------------------------
float calc_Lx(float lx)//計算L
{
  float x;
  float temp1;
  
  temp1=(float)F1/(float)F2;
  x=(float)(((temp1*temp1)-1)*lx);
  x=x*100;        
  return x;
}
//--------------------------------
void main(void)
{
  float L2,C2;
        
  del_ms(1000);//等待震蕩穩定
  T0_T1_ini();
  LCD_init();
  del_ms(100);
  if(L_C==0)//檔位錯誤
  {
    while(1)
    {
      LCD_write_str(4,0,"Error !!!");
    }
}  

  while(1)
  {
    F2=counter;//測頻率值F2
               
    LCD_write_str(0,0,"fq=");
    process_8(counter,Data);
    display_8C(4,0,Data);
    LCD_write_str(14,0,"Hz");
               
     if(L_C==0)//測電感
     {
        L1=76.95;//uH
        L2=calc_Lx(L1);
        LCD_write_str(0,1,"Lx=");
        process_8(L2,Data);
        display_8L(4,1,Data);
        LCD_write_str(14,1,"uH");
      }
     if(L_C==1)//測電容
     {
        LCD_write_str(12,1," ");
        C1=2408;//pF
        C2=calc_Cx(C1);
        LCD_write_str(0,1,"Cx=");
        process_8(C2,Data);
        display_8C(4,1,Data);
        LCD_write_str(14,1,"pF");
      }   
   }
}

作者: 太陽雨ZW    時間: 2024-11-22 11:19
電路圖中的電容C8容量應該是2200PF
作者: 太陽雨ZW    時間: 2024-11-22 11:21
電路圖中的電容C8改為2200PF
作者: uid71955    時間: 2024-11-24 16:38
問一下使用cd4069對比lm393哪一個頻率穩,我用lm393做的頻率很不穩導致數字亂跳
作者: 太陽雨ZW    時間: 2024-11-24 17:37
用CD4069的震蕩頻率在10HZ位跳動,測試值還比較穩定。C8用的是2200PF滌綸電容,其它的是獨石電容。
作者: 太陽雨ZW    時間: 2024-11-25 16:49
精度還是可以滿足一般應用的




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲一区中文字幕 | 欧美不卡视频一区发布 | 一区天堂 | 久久香焦 | 国产成人一区二区三区精 | 欧美一级全黄 | 亚洲精品在线看 | 精品福利在线 | 国产成都精品91一区二区三 | 一级a性色生活片久久毛片 午夜精品在线观看 | 亚洲午夜av久久乱码 | 国产在视频一区二区三区吞精 | 99re热精品视频 | 亚洲国产一区视频 | 污免费网站 | 午夜在线 | 日韩一区中文字幕 | 午夜精品在线观看 | 三级免费av | 九九热这里只有精品在线观看 | 亚洲精品国产成人 | 懂色av色香蕉一区二区蜜桃 | 日韩欧美精品一区 | 国产精品视频久久久 | 黄色片在线 | 日韩欧美中文字幕在线观看 | 超碰av在线 | 国产成人精品一区二区三区视频 | 一区在线播放 | 成人免费一区二区三区视频网站 | 欧美日产国产成人免费图片 | caoporn免费在线视频 | 亚洲午夜网 | 久久机热| 欧美大片一区二区 | 午夜影院网站 | 欧美午夜一区 | 成人免费看电影 | 国产精品成人一区二区三区 | 欧美精品成人一区二区三区四区 | 久久99精品久久久久久国产越南 |