1602.c
资源名称:RLC.rar [点击查看]
上传用户:jdm789308
上传日期:2020-12-22
资源大小:78k
文件大小:5k
源码类别:
软件测试
开发平台:
Visual C++
- #include <reg52.h>
- #include "1602.h"
- #define DataPort P0
- #define ADCPort P2
- #define uchar unsigned char
- sbit button_r=P1^0;
- sbit button_c=P1^1;
- sbit button_l=P1^2;
- sbit button_q=P1^3;
- sbit LED_R=P1^4;
- sbit LED_C=P1^5;
- sbit LED_L=P1^6;
- sbit LED_Q=P1^7;
- sbit RS=P3^0;
- sbit RW=P3^1;
- sbit EN=P3^2;
- sbit START=P3^7;
- unsigned char func;
- unsigned long int R,C,L,f,y;
- uchar i=0;
- uchar aa,bb,cc;
- //uchar code aa[5]="free";
- uchar code meun[2][16]={" is: ","00000000 "};
- uchar code m[10]="0123456789";
- unsigned char T0count;
- unsigned char timecount;
- bit flag;
- void Intar_T0T1(void)
- {
- flag=0;
- timecount=0;
- T0count=0;
- TH0=0;
- TL0=0;
- TR0=1;
- TR1=1;
- }
- void delay1(void)
- {
- int i;
- for(i=80;i>0;i--);
- }
- void delay_ms(uchar t)
- {
- unsigned char i=0;
- while(t--)for(i=0;i<120;i++);
- }
- void WriteData(uchar dat)
- {
- EN=0;
- RS=0; //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
- RW=0; //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
- RS=1;
- RW=0;
- EN=1;
- DataPort=dat;
- EN=0;
- RS=0;
- RW=0;
- for (i=0;i<20;i++);
- }
- void WriteCmd(uchar cmd)
- {
- EN=0;
- RS=0; //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
- RW=0; //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
- EN=1;
- DataPort=cmd;
- RS=0;
- RW=0;
- EN=0;
- for (i=0;i<20;i++);
- }
- void DisChar(uchar ps,uchar dat)
- {
- WriteCmd((0x80+ps));
- WriteData(dat);
- }
- void LcdInit(void)
- {
- char pp=0;
- WriteCmd(0x38);
- delay_ms(5);
- WriteCmd(0x38);
- delay_ms(5);
- WriteCmd(0x38);
- delay_ms(5);
- WriteCmd(0x01);delay_ms(5);
- WriteCmd(0x06);delay_ms(5);
- WriteCmd(0x38);
- WriteCmd(0x0c);
- WriteCmd(0x40);
- for(pp=0;pp<16;pp++)DisChar(pp,*(meun[0]+pp));
- for(pp=0;pp<16;pp++)DisChar(pp+0x40,*(meun[1]+pp));
- }
- void Display(unsigned long int x)
- { DisChar(0,aa);
- DisChar(9+0x40,bb);
- DisChar(10+0x40,cc);
- DisChar(7+0x40,m[x%10]);x /= 10;
- DisChar(6+0x40,m[x%10]);x /= 10;
- DisChar(5+0x40,m[x%10]);x /= 10;
- DisChar(4+0x40,m[x%10]);x /= 10;
- DisChar(3+0x40,m[x%10]);x /= 10;
- DisChar(2+0x40,m[x%10]);x /= 10;
- DisChar(1+0x40,m[x%10]);x /= 10;
- DisChar(0+0x40,m[x%10]);x /= 10;
- delay_ms(200);
- }
- button()
- {
- //button_r=1;
- if(button_r==0)
- {
- func=1; //功能1:测电阻
- LED_R=0;
- LED_C=1;
- LED_L=1;
- LED_Q=1;
- }
- //button_c=1;
- if(button_c==0)
- {
- func=2; //功能2:测电容
- LED_R=1;
- LED_C=0;
- LED_L=1;
- LED_Q=1;
- }
- //button_l=1;
- if(button_l==0)
- {
- func=3; //功能3:测电感
- LED_R=1;
- LED_C=1;
- LED_L=0;
- LED_Q=1;
- }
- if(button_q==0)
- {
- func=4; //功能3:测电感
- LED_R=1;
- LED_C=1;
- LED_L=1;
- LED_Q=0;
- }
- return func;
- }
- void R_measure(void) //电阻测量,以Ω为单位
- {
- while(flag==0);
- f=(T0count*65536+TH0*256+TL0); //Hz
- //电阻计算公式
- R=721500000/f-10000;
- y=R;
- }
- void C_measure(void) //电容测量,以pF为单位
- {
- while(flag==0);
- f=(T0count*65536+TH0*256+TL0); //Hz
- //电容计算公式
- C=4800000/f; //pf
- y=C;
- }
- void L_measure(void) //电感测量,以uH为单位
- {
- while(flag==0);
- f=(T0count*65536+TH0*256+TL0); //Hz
- //电感计算公式
- f/=100000;
- L=922/(f*f); //L=922*10^10/(f*f) uH
- y=L;
- }
- unsigned int ADCTransform()
- {
- unsigned long int uiResult;
- START=1;
- START=0;
- delay_ms(10);
- uiResult=ADCPort; //出入转换结果。
- uiResult=(10000000*uiResult)/51; //处理运算结果。
- y=uiResult;
- }
- void main(void)
- { TMOD=0x15;//0001 0101
- TH0=0;
- TL0=0;
- TH1=(65536-49989)/256;
- TL1=(65536-49989)%256;
- ET0=1;
- ET1=1;
- EA=1;
- TR1=1;
- TR0=1;
- y=0x00;
- //ADCPort=51;
- LcdInit();
- // while(1);
- /*while(1)
- {
- if(flag==1)
- {
- y=(T0count*65536+TH0*256+TL0);
- Display(y);
- flag=0;
- timecount=0;
- T0count=0;
- TH0=0;
- TL0=0;
- TR0=1;
- TR1=1;
- }
- }*/
- while(1)
- {
- button();
- if (func==1)
- {
- aa='R';
- bb='n';
- cc='n';
- R_measure();
- }
- if (func==2)
- {
- aa='C';
- bb='p';
- cc='F';
- C_measure();
- }
- if (func==3)
- {
- aa='L';
- bb='u';
- cc='H';
- L_measure();
- }
- if(func==4)
- {
- aa='Q';
- bb='n';
- cc='n';
- ADCTransform();
- }
- Display(y);
- Intar_T0T1();
- }
- }
- void t0(void) interrupt 1 using 0 //计脉冲个数
- {
- T0count++;
- }
- void t1(void) interrupt 3 using 0 //定时1s
- {
- TH1=(65536-50045)/256;
- TL1=(65536-50045)%256;
- timecount++;
- if(timecount==20)
- {
- TR0=0;
- TR1=0;
- timecount=0;
- flag=1;
- }
- }