目录
一、主要功能
1、LCD1602液晶显示测量数值
2、测量范围:电阻 100Ω-100KΩ;
电容 1000pF-1uF;
电感 1mH-1000mH;
测量精度:5%。
3、通过开关选择测量类型
二、使用步骤
基于51单片机的RLC测量仪设计涉由硬件电路、信号处理和软件算法等多个方面组成。
三、硬件资源
1、51单片机核心模块
2、按键模块
3、电阻测量模块
4、电容测量模块
5、电感测量模块
6、LCD1602显示模块
四、软件设计
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^6;
sbit RW=P2^5;
sbit E=P2^7;
sbit R=P1^0;
sbit C=P1^1;
sbit L=P1^2;
sbit A1=P1^3;
sbit A0=P1^4;
#define LCD_data P0
uchar code table1[10]={"R= R"};
uchar code table2[10]={"C= pF"};
uchar code table3[10]={"L= mH"};
uchar code f_table[88]={13,14,15,16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100};
uchar code f_correct[88]={9,10, 11, 12, 12, 12, 13, 14, 15, 16, 17, 18, 18, 18, 19, 20, 21, 21, 22, 23, 24, 25, 25, 26, 26, 27, 28, 29, 29, 30, 30, 31, 32, 33, 33, 34, 35, 35, 36, 37, 38, 38, 39, 40, 41, 41, 42, 42, 43, 44, 45, 45, 46, 47, 48, 49, 49, 50, 51, 51, 52, 53, 54, 54, 55, 55, 56, 57, 57, 58, 59, 60, 60, 62, 62, 63, 64, 64, 65, 66, 66, 67, 67, 68, 69, 70, 71, 71,};
uchar a6,a5,a4,a3,a2,a1;
uchar flag;
unsigned long cnt,cnt1;
uchar f_cnt;
/********************************/
void delay_us(); //18us
void delay_ms(uint);
void lcd_init();
void lcd_write_com(uchar com);
void lcd_write_dat(uchar dat);
void lcd_init();
void lcd_display(uchar add,uchar dat);
/***********************************/
void delay_us()
{
uchar x;
for(x=0;x<5;x++);
}
void delay_ms(uint z)
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<123;y++);
}
void lcd_write_com(uchar com)
{
E=0;
RS=0;
RW=0;
delay_us();
LCD_data=com;
E=1; //
delay_us();
E=0;
}
void lcd_write_dat(uchar dat)
{
E=0;
RS=1;
RW=0;
delay_us();
LCD_data=dat;
E=1; //
delay_us();
E=0;
}
void lcd_init() //lcd
{
delay_ms(15);
lcd_write_com(0x38);
delay_ms(10);
lcd_write_com(0x0c);
lcd_write_com(0x06);
lcd_write_com(0x01);
delay_ms(2);
}
void timer_init(void)
{
TMOD=0X51;
PT0=1;
TH0=0x3c;
TL0=0xb0;
TH1=0;
TL1=0;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
EA=1;
}
void lcd_display(uchar add,uchar dat) //lcd
{
lcd_write_com(add);
lcd_write_dat(dat);
delay_us();
}
void main()
{
timer_init();
lcd_init();
while(1)
{
if(flag==1)
{
real_display();
flag=0;
}
}
}
五、实验现象
演示视频: