📄 test.c
字号:
//---------头文件-------------//
#include<reg52.h>
#include<intrins.h>
#include<math.h>
#include"Fr_LCD_12864.c"
//--------定义变量-----------//
#define uchar unsigned char
#define uint unsigned int
//----------AD接口定义--------//
sbit Relay=P1^0; //积分电容的选择
sbit Switch_C=P1^3; //模拟开关
sbit Switch_B=P1^2;
sbit Switch_A=P1^1;
unsigned long int count ,volt ;
uint Zrang ; //量程标志位的定义
uchar Tab_voutsmall[6]={0};
uchar Tab_voutmax[6]={0};
uint Tab_num[]={'0','1','2','3','4','5','6','7','8','9','.'};
uchar code string2v[]={"2V :"};
uchar code string200mv[]={"200mV:"};
uchar code string1[]={"积分式直流数字"};
uchar code string2[]={"电压表"};
//--------函数定义区--------//
void delay(uint t);
void data_transmax();
void data_transsmall();
//---------主函数---------//
void main(void)
{
LCD_RST = 0 ;
LCD_RST = 1 ;
LCD_PSW = 1 ;
Re_Start_LCD12864();
Write_OrderOrData_To_LCD12864( Order , ClearDDTAM_Data ) ; //首先清除显示
Write_OrderOrData_To_LCD12864( 0 , 0x80 ) ;
Write_String_To_LCD12864(1,2,string1);
Write_String_To_LCD12864(2,3,string2);
Write_String_To_LCD12864(3,1,string200mv);
Write_String_To_LCD12864(4,1,string2v);
//------时序控制开始--------------
Zrang=0; //标志位为零,说明并没有置标志位
Relay=1;
Relay=0; //低电平,电容放电
delay(20);
Relay=1;
Switch_C=0; //000,输入; 011 , -1V
Switch_B=1; //001,+1V; 100 ,-100mV;
Switch_A=0; //010 ,100mV;
TMOD=0x55; //0101 0101 定时计数器0和1,工作模式1,T0,T1均为计数,
TH0=(65536-50000)/256; //计数10000个脉冲
TL0=(65536-50000)%256;
TR0=1; //启动定时计数器0
TR1=0;
ET0=1; // 开定时计数器中断
EA=1;
while(1)
{
;
}
}
void t0(void) interrupt 1
{
TH0=0;
TL0=0;
TR0=0;
EA=0; //关总中断
/* if(Zrang==0)
{
Switch_C=0; //选择-1V基准
Switch_B=1;
Switch_A=1;
}
else if (Zrang==1)
{
Switch_C=1; //选择-100Mv基准来进行反向积分
Switch_B=0;
Switch_A=0;
}
else
{
Switch_C=0; //选择-1V基准
Switch_B=1;
Switch_A=1;
}*/
if(Zrang == 1)
{
Switch_C=1; //选择-100Mv基准来进行反向积分
Switch_B=0;
Switch_A=0;
}
else
{
Switch_C=0; //选择-1V基准
Switch_B=1;
Switch_A=1;
}
TH1=0;
TL1=0;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR1=1;
TR0=0;
EX1=1;
IT1=1;
EA=1;
}
//测正电压,直接用INT1中断,不用反向
void int1(void) interrupt 2
{
Relay=0;
EA=0;
TR1=0;
Switch_C=1; //接地
Switch_B=1;
Switch_A=1;
count=TH1*256+TL1;
if(Zrang==0)
{
if(count<=2600)
{
Zrang=1;
}
else
{
Zrang=2;
}
}
else if(Zrang==1)
{
data_transsmall();
Zrang=0;
}
else
{
data_transmax();
Zrang=0;
}
Switch_C=0; //选择100mV基准
Switch_B=1;
Switch_A=0;
TMOD=0x55; //定时计数器初始化一次就可以了
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
// TH1=0;
// TL1=0;
Relay=1;
TR0=1; //启动定时计数器
TR1=0;
ET0=1; //开定时计数器中断
EA=1;
}
//-----------t为几,延时几毫秒------
void delay(uint t)
{
uint j , k , l;
for(j=0;j<t;j++)
for(k=0;k<2;k++)
for(l=0;l<255;l++);
}
//----------2V量程显示函数----------
void data_transmax()
{
uint a;
volt=count-600;
Tab_voutmax[0]=volt/10000;
Tab_voutmax[1]=10;
Tab_voutmax[2]=(volt%10000)/1000;
Tab_voutmax[3]=(volt%1000)/100;
Tab_voutmax[4]=(volt%100)/10;
Tab_voutmax[5]=volt%10;
SetPonit_In_LCD12864( 4 , 3 );
for(a=0;a<6;a++)
{
Write_OrderOrData_To_LCD12864( Datas , Tab_num[Tab_voutmax[a]] );
}
Write_OrderOrData_To_LCD12864( Datas , 'V');
}
//-------------200mV量程显示函数-----
void data_transsmall()
{
uchar a;
volt=count/2;
volt=volt-4000;
Tab_voutsmall[0]=volt/10000;
Tab_voutsmall[1]=(volt%10000)/1000;
Tab_voutsmall[2]=(volt%1000)/100;
Tab_voutsmall[3]=10;
Tab_voutsmall[4]=(volt%100)/10;
Tab_voutsmall[5]=volt%10;
SetPonit_In_LCD12864( 3 , 4 );
for(a=0;a<6;a++)
{
Write_OrderOrData_To_LCD12864( Datas , Tab_num[Tab_voutsmall[a]] );
}
Write_OrderOrData_To_LCD12864( Datas , 'm');
Write_OrderOrData_To_LCD12864( Datas , 'V');
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -