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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1350|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 福利视频日韩 | 91偷拍精品一区二区三区 | 久久久精选 | 黄色一级特级片 | 国产精品一区二区不卡 | 亚洲视频观看 | 亚洲视频免费在线 | 久久国产精品99久久久久久丝袜 | 嫩草伊人| 欧美国产视频一区二区 | av三级在线观看 | 在线a视频 | 欧美日韩中文字幕在线播放 | 日本一区二区不卡 | 亚洲免费人成在线视频观看 | 大香网伊人 | 丝袜天堂 | 黄色片在线看 | 69精品久久久久久 | 精品成人在线观看 | 涩涩鲁亚洲精品一区二区 | 波多野结衣中文视频 | 一区二区三区日 | 激情福利视频 | 另类二区| 国产精品高潮呻吟久久aⅴ码 | 国产一区二区三区四区区 | 成人毛片网站 | 欧美freesex黑人又粗又大 | 91欧美激情一区二区三区成人 | 欧美视频第二页 | 日本不卡一区 | 华丽的挑战在线观看 | 亚洲精品中文字幕av | 成人在线免费看 | 久久国产精品视频 | a视频在线观看 | 天天操网 | av中文字幕在线观看 | 久久久蜜桃一区二区人 | 国产精品毛片久久久久久 |