#include<reg51.h>
#include<math.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit CD4051_1_A0=P2^0;
sbit CD4051_2_A1=P2^2;
sbit CD4051_2_A0=P2^3;
sbit intwire=P3^2;
sbit pd=P1^4; //判断是否引起中断
sbit lcden=P1^2;//液晶控制位
sbit lcdrw=P1^1;
sbit lcdrs=P1^0;
uchar code dis1[]= "current voltage";
uchar dis2[]= " ";
uchar flag0,flag1,flag2,recode,a,b,c,d,e,num;
uint sec;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//忙检查
bit busy_check()
{
bit lcd_status;
lcdrs=0;
lcdrw=1;
lcden=1;
delay(1);
lcd_status = (bit)(P0&0x80);
lcden=0;
return lcd_status;
}
//lcd写命令
void write_lcd_command(uchar cmd)
{
while(busy_check());
lcdrs=0;
lcdrw=0;
lcden=0;
P0=cmd;
lcden=1;
delay(1);
lcden=0;
}
//lcd写数据
void write_lcd_data(uchar dat)
{
while(busy_check());
lcdrs=1;
lcdrw=0;
lcden=0;
P0=dat;
lcden=1;
delay(1);
lcden=0;
}
//lcd初始化
void lcd_init()
{
delay(15);
write_lcd_command(0x38);
delay(5);
write_lcd_command(0x01);
delay(5);
write_lcd_command(0x06);
delay(5);
write_lcd_command(0x0c);
delay(5);
}
//设置显示位置
void set_lcd_pos(uchar p)
{
write_lcd_command(p|0x80);
}
//在lcd上显示字符串
void dis_lcd_string(uchar line,uchar *s)
{
if(line == 1)
set_lcd_pos(0x00);
else if(line ==2)
set_lcd_pos(0x40);
while(*s)
{
write_lcd_data(*s);
s++;
}
}
void init()
{
TMOD=0x01;//工作方式定时器0
TH0=0xfc;//置初值1ms
TL0=0x18;
EA=1;
ET0=1;//定时器0中断允许位
PT0=0;//优先级设置
EX0=1; //开int0中断
PX0=1;
intwire=1;//外中断管脚置1
IT0=1; //下降沿触发
TR0=0;
flag0=0; // 标志位
flag1=1;//
flag2=0;
pd=1; //判断位
recode=0; //定时器用于计数位
}
void main()
{
unsigned char i,j;
uint V=0;
i=0;
init();
lcd_init();
while(1)
{
if(flag2!=0)
{
CD4051_1_A0=0; //打到2v档
}
else
{
CD4051_1_A0=1; //flag==0打到200mv档 即引入放大10倍的电压
}
CD4051_2_A1=0; //积分电容放电
CD4051_2_A0=0;
if(flag0!=0)
{
i=recode;
j=TH0;
recode=0;
flag1=1;
flag0=0;
if(flag2==0) //小量程
{
V=i*25;
if(V<=2065)
{
V=V-157;
switch(V/100)
{
case 1: V=V-30 ;break;
case 2: V=V-8 ;break;
case 3: V=V ;break;
case 4: V=V-4 ;break;
case 5: V=V+3 ;break;
case 7: V=V+8 ;break;
case 8: V=V+9 ;break;
case 10:V=V+14 ;break;
case 11:V=V+46 ;break;
case 12:V=V+49 ;break;
case 14:V=V+56 ;break;
case 15:V=V+61 ;break;
case 17:V=V+63 ;break;
case 18:V=V+68 ;break;
}
e=V%10;
sec=V/10;
d=sec%10;
sec=sec/10;
c=sec%10;
sec=sec/10;
b=sec%10;
a=sec/10;
flag2=0;
dis2[1] = a+0x30;
dis2[2] = b+0x30;
dis2[3] = c+0x30;
dis2[4] = d+0x30;
dis2[5] = '.';
dis2[6] = e + 0x30;
dis2[13]='m';
dis2[14]='v';
dis_lcd_string(1,dis1);
delay(20);
dis_lcd_string(2,dis2);
delay(20);
}
else
{
flag2=1;
}
}
if(flag2==1) //大量程
{
V=i*250-1750;
if(V>2065)
{
switch(V/100)
{
case 22:V=V-133 ;break;
case 25:V=V-77 ;break;
case 27:V=V-121 ;break;
case 30:V=V-161 ;break;
case 32:V=V-55 ;break;
case 35:V=V-132 ;break;
case 37:V=V-90 ;break;
case 40:V=V-33 ;break;
case 42:V=V+30 ;break;
case 45:V=V-67 ;break;
case 47:V=V-11 ;break;
case 50:V=V+49 ;break;
case 52:V=V-47 ;break;
case 55:V=V+11 ;break;
case 57:V=V+24 ;break;
case 60:V=V+13 ;break;
case 62:V=V+30 ;break;
case 65:V=V+74 ;break;
case 67:V=V+60 ;break;
case 70:V=V+61 ;break;
case 72:V=V+77 ;break;
case 75:V=V+169 ;break;
case 77:V=V+123 ;break;
case 80:V=V+139 ;break;
case 82:V=V+194 ;break;
case 85:V=V+251 ;break;
case 87:V=V+157 ;break;
case 90:V=V+213 ;break;
case 92:V=V+281 ;break;
case 95:V=V+300 ;break;
case 97:V=V+240 ;break;
default:V=V+561;
}
e=V%10;
sec=V/10;
d=sec%10;
sec=sec/10;
c=sec%10;
sec=sec/10;
b=sec%10;
a=sec/10;
flag2=1;
dis2[1] = a+0x30;
dis2[2] = '.';
dis2[3] = b+0x30;
dis2[4] = c+0x30;
dis2[5] = d+0x30;
dis2[6] = e + 0x30;
dis2[13]='V';
dis2[14]=' ';
dis_lcd_string(1,dis1);
delay(20);
dis_lcd_string(2,dis2);
delay(20);
}
else
{
flag2=0;
}
}
}
TR0=1;
while(recode<20)
{}
recode=0;
TR0=0;
TH0=0xfc;//
TL0=0x18;
CD4051_2_A0=1; //正向积分
CD4051_2_A1=0;
delay(80);
CD4051_2_A1=1; //反向积分开始
CD4051_2_A0=0;
TR0=1;
while(flag1);
}
}
void int0() interrupt 0
{
TR0=0;
CD4051_2_A1=0; //积分电容放电
CD4051_2_A0=0;
flag0=1;
flag1=0;
intwire=1;
// pd=!pd; //用于检测外中断连续触发与否
}
void time0() interrupt 1
{
TR0=0;
TH0=0xfc;//计数器清零
TL0=0x15;
TR0=1;
// pd=!pd;//用于检测定时器定时与否
recode++;
if(recode>300)
{}
}
dyb.rar_双积分
版权申诉
125 浏览量
2022-09-24
16:18:08
上传
评论
收藏 2KB RAR 举报
JonSco
- 粉丝: 74
- 资源: 1万+
最新资源
- TG-2024-05-23-204718255.mp4
- 候志强@181 5428 8938_20240420112107.amr
- spispispispispi
- 实验二:IP协议分析.zip
- 驱动代码驱动代码驱动代码驱动代码
- SVID_20240523_141155_1.mp4
- Code for the complete guide to tkinter tutorial
- 关于百货中心供应链管理系统.zip
- SimpleFolderIcon-master 修改Unity的Project下的文件夹图标
- A python Tkinter widget to display tile based maps
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈