void delayms(unsigned int i);
void DA_conversion_V( unsigned long int temp );
void DA_conversion_A( unsigned long int temp );
void read_ad_U();
void read_ad_I();
void CodingsWitchPolling_V()//
{
static uchar Aold_U,Bold_U; //定义了两个变量用来储蓄上一次调用此方法是编码开关两引脚的电平
static uchar st; //定义了一个变量用来储蓄以前是否出现了两个引脚都为高电平的状态
if(CodingsWitch_A_U&&CodingsWitch_B_U)
st = 1; //
if(st) //如果st为1执行下面的步骤
{
if(CodingsWitch_A_U==0&&CodingsWitch_B_U==0) //如果当前编码开关的两个引脚都为底电平执行下面的步骤
{
if(Bold_U) //为高说明编码开关在向加大的方向转
{
st = 0;
tmp_V=tmp_V+V_mun; //
}
if(Aold_U) //为高说明编码开关在向减小的方向转
{
st = 0;
tmp_V=tmp_V-V_mun; //设返回值
}
}
}
Aold_U = CodingsWitch_A_U; //
Bold_U = CodingsWitch_B_U; //储
// return tmp; //
}
/////////////////////////////////////////////////////////////////////
void CodingsWitchPolling_I()//
{
static uchar Aold_I,Bold_I; //定义了两个变量用来储蓄上一次调用此方法是编码开关两引脚的电平
static uchar st; //定义了一个变量用来储蓄以前是否出现了两个引脚都为高电平的状态
if(CodingsWitch_A_I&&CodingsWitch_B_I)
st = 1; //
if(st) //如果st为1执行下面的步骤
{
if(CodingsWitch_A_I==0&&CodingsWitch_B_I==0) //如果当前编码开关的两个引脚都为底电平执行下面的步骤
{
if(Bold_I) //为高说明编码开关在向加大的方向转
{
st = 0;
tmp_A=tmp_A+A_mun; //
}
if(Aold_I) //为高说明编码开关在向减小的方向转
{
st = 0;
tmp_A=tmp_A-A_mun; //设返回值
}
}
}
Aold_I = CodingsWitch_A_I; //
Bold_I = CodingsWitch_B_I; //储
//
}
//编码开关有动作,开启定时器TO,一定时间后定时器TO自动关闭
void key()
{
if(CodingsWitch_A_U==0||CodingsWitch_B_U==0||CodingsWitch_A_I==0||CodingsWitch_B_I==0)
{
TR0=1; //启动定时器 T0
}
}
//开与关
void NO_OF()
{
if(NO_OFF==0)off_on_date++;
if(NO_OFF==1)off_on_date=0;
if(off_on_date==3)
{
mos_control=!mos_control;
if(mos_control==1)
{
LCD_ASCII(17,1,'O');
LCD_ASCII(18,1,'N');
LCD_ASCII(19,1,' ');
TR2 = 1;
}
else
{
LCD_ASCII(17,1,'O');
LCD_ASCII(18,1,'F');
LCD_ASCII(19,1,'F');
TR2 = 0;
}
temp=adjisuan_U(save_u);
voice=0;
delayms(500);
voice=1;
}
}
//编码开关调节档位
void key_V()
{
if(U_sb==0)
{
voice=0;
delayms(500);
voice=1;
V_tmp++;
if(V_tmp==4){V_tmp=0;}
switch(V_tmp)
{
case 0: V_mun=1000;break;
case 1: V_mun=100;break;
case 2: V_mun=10;break;
case 3: V_mun=1;break;
default:break;
}
}
}
//编码开关调节档位
void key_A()
{
if(I_sb==0)
{
voice=0;
delayms(500);
voice=1;
A_tmp++;
if(A_tmp==3){A_tmp=0;}
switch(A_tmp)
{
case 0: A_mun=100;break;
case 1: A_mun=10;break;
case 2: A_mun=1;break;
default:break;
}
}
}
void play_key()
{
if(tmp_A>10800)tmp_A=i_max ;
if(tmp_V>12750)tmp_V=u_max; //限制编码开关调节的最大值
if(tmp_V>temp)
{
LCD_ASCII(17,0,'C');
LCD_ASCII(18,0,'C');
}
else
{
LCD_ASCII(17,0,'C');
LCD_ASCII(18,0,'V');
}
//运行编码开关循环程序
key_A();//进位
key_V();
go_out(tmp_V);
if(GOUT[0]==0)
{
LCD_ASCII(0,1,' ');
}
else
LCD_Display(0,1,GOUT[0]);
LCD_Display(1,1,GOUT[1]);
LCD_Display(2,1,GOUT[2]);
LCD_Display(4,1,GOUT[3]);
LCD_Display(5,1,GOUT[4]);
go_out(tmp_A);
if(GOUT[0]==0)
{
LCD_ASCII(8,1,' ');
}
else
LCD_Display(8,1,GOUT[0]);
LCD_Display(9,1,GOUT[1]);
LCD_Display(11,1,GOUT[2]);
LCD_Display(12,1,GOUT[3]);
LCD_Display(13,1,GOUT[4]);
}
void play_eeprow()
{
go_out(temp);
LCD_Display(11,0,GOUT[0]);
LCD_Display(12,0,GOUT[1]);
LCD_Display(13,0,GOUT[2]);
LCD_Display(14,0,GOUT[3]);
LCD_Display(15,0,GOUT[4]);
go_out(tmp_V);
LCD_Display(3,1,GOUT[0]); // 编码开关数值移出 送显示
LCD_Display(4,1,GOUT[1]);
LCD_Display(5,1,GOUT[2]);
LCD_Display(6,1,GOUT[3]);
LCD_Display(7,1,GOUT[4]);
go_out(tmp_A);
LCD_Display(11,1,GOUT[0]);
LCD_Display(12,1,GOUT[1]);
LCD_Display(13,1,GOUT[2]);
LCD_Display(14,1,GOUT[3]);
LCD_Display(15,1,GOUT[4]);
}
void eeprow_v()
{
DA_conversion_V(tmp_V); // 编码开关数值移出 送DA转换
if( AD_DRDY == 0)
{
set_7705_ch(0); //设置通道2参数
write_ad(0x38); //指向数据寄存器 读操作 通道2
read_ad_U(); //读AD值
old_save_u = filter_1st(save_u,old_save_u,50);
temp=old_save_u;
}
}
void eeprow_i()
{
DA_conversion_A(tmp_V); // 编码开关数值移出 送DA转换
if( AD_DRDY == 0)
{
set_7705_ch(1); //设置通道2参数
write_ad(0x39); //指向数据寄存器 读操作 通道2
read_ad_I();
old_save_i = filter_1st(save_i,old_save_i,50);
temp=old_save_i; //读AD值
}
}
//矫正程序
void eeprow_save()
{
unsigned char i=0;
unsigned char j=0;
unsigned int time=0;
// unsigned char x,y;
if(U_sb==0)
{
delayms(1000);
if(U_sb==1)
{
display(1,"DA=",3); //显示格式
display(0,"Uin=",4);
cs_RW(0);
while (i<20)
{
/////////// 按键防抖
if(NO_OFF==0)
{
time++;
if(time==10)i++;
}
if(NO_OFF==1)time=0;
///////////
if(i==17)i=0; //自动循环
key(); //编码开关循环程序
key_A();//进位
key_V();
play_eeprow(); //显示编码开关数值
if(i==0) //////////////////////////////////////////////
{
if(j==0)
{
j++;
display(0,"Uin= 5V",7);
tmp_A=v.adc_5V;
tmp_V=v.dac_5V;
}
eeprow_v();
}
if(i==1) ////////////////////////////////////////////////
{
if(j==1)
{
j++; //只执行一遍
v.dac_5V=tmp_V; //保存前面的数据
v.adc_5V=tmp_A;
cs_RW(1);
display(0,"Uin=10V",7);
tmp_A=v.adc_10V; //读取旧数据
tmp_V=v.dac_10V;
}
eeprow_v();
}
if(i==2) //////////////////////////////////////////////////
{
if(j==2)
{
j++; //只执行一遍
v.dac_10V=tmp_V; //保存前面的数据
v.adc_10V=tmp_A;
cs_RW(1);
display(0,"Uin=20V",7);
tmp_A=v.adc_20V; //读取旧数据
tmp_V=v.dac_20V;
}
eeprow_v();
}
if(i==3) //////////////////////////////////////////////
{
if(j==3)
{
j++; //只执行一遍
v.dac_20V=tmp_V; //保存前面的数据
v.adc_20V=tmp_A;
cs_R
STC12C5A60S2.rar_TM7705_TM8211_stc12c5a60s2_tm8211 电子_电子负载
版权申诉
5星 · 超过95%的资源 30 浏览量
2022-07-15
04:49:39
上传
评论 3
收藏 200KB RAR 举报
寒泊
- 粉丝: 75
- 资源: 1万+
最新资源
- unidac29 for delphi 12.1
- Cauchy奇异积分的数值计算程序
- 基于Python实现的股票量化交易策略源代码+视频讲解+案例代码,含RSI策略、BOP指标策略、KDJ策略、MACD指标策略等
- EDA编码.zip
- 文本分类任务训练神经网络来学习词汇表中每个词的词向量
- MyBatis进阶技巧:探索动态SQL的无限可能.md
- HM2300C-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- HM2300B-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 员工解除劳动合同申请表.pdf
- 物模块模型代码,前往设计物模块所属
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈