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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1304|回復: 5
打印 上一主題 下一主題
收起左側

使用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");
      }   
   }
}

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1136941 發表于 2024-11-22 11:19 | 只看該作者
電路圖中的電容C8容量應該是2200PF
回復

使用道具 舉報

板凳
ID:1136941 發表于 2024-11-22 11:21 | 只看該作者
電路圖中的電容C8改為2200PF
回復

使用道具 舉報

地板
ID:71955 發表于 2024-11-24 16:38 來自手機 | 只看該作者
問一下使用cd4069對比lm393哪一個頻率穩,我用lm393做的頻率很不穩導致數字亂跳
回復

使用道具 舉報

5#
ID:1136941 發表于 2024-11-24 17:37 | 只看該作者
用CD4069的震蕩頻率在10HZ位跳動,測試值還比較穩定。C8用的是2200PF滌綸電容,其它的是獨石電容。
回復

使用道具 舉報

6#
ID:1136941 發表于 2024-11-25 16:49 | 只看該作者
精度還是可以滿足一般應用的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品视频一区二区三区 | 国产aⅴ爽av久久久久久久 | 国产综合久久 | 美女啪啪国产 | 精品成人av | 99国产精品99久久久久久粉嫩 | 国产福利在线视频 | 国产精品一区二区福利视频 | 亚洲九九色 | 精品视频99 | 99成人免费视频 | 亚洲成人免费观看 | 在线播放中文字幕 | 国产一区999| 久久精品一区二区 | 一区二区在线 | 国产在线一区二区三区 | 九九九国产| av男人的天堂av | 日韩h | 国产99久久精品一区二区永久免费 | 国产高清久久 | 婷婷色网 | 欧美日韩成人在线 | 午夜在线电影网 | 最近中文字幕在线视频1 | 精品久久一区二区三区 | 国产99热 | 国产成人精品一区二 | 国产欧美在线观看 | 麻豆91av| 日韩成人高清在线 | 欧美色成人 | 国产精品久久久久一区二区三区 | 日韩一区av | 日韩一区二区免费视频 | 浴室洗澡偷拍一区二区 | 欧美中文在线 | 成人精品一区二区三区中文字幕 | 天堂中文字幕av | 欧美成人高清视频 |