📄 main.c
字号:
#include"upsd3300.h"
#include"intrins.h"
#include"absacc.h"
#include"math.h"
#define uchar unsigned char
#define uint unsigned int
#include"LCD_DR.C" //液晶显示初始化ini_OCMJ(void)和驱动程序sub_lcd(uchar in)。
//占用I/O口为 #define LCD_OUT P4
//sbit LCD_BUSY=P3^6;
//sbit LCD_REQ=P3^7;
#include"keyscan.c" //占用P4
#include"ad197.c"
#include"da1230.c"
#include"firstp.c"
#include"secondp.c"
#define cshu0 2.0475
uint code xx[31]={70,165,177,189,201,213,222,232,243,255,
268,281,294,307,320,331,344,357,369,382,
394,404,416,429,441,452,464,476,489,500,509}; //查表用
////////////////////////////////////////////////////////////////////////////////
//全局变量
/////////////////////////////////////
uchar kk[5]={0,0,0,0,0};//存贮设定值。
uint jgw1=0;
unsigned int ad_vaul;
uchar r;
/////////////////////////////////////////////
uint sdz; //设定值
void pid (void)//dac自调
{
_nop_();
if(jgw1>sdz){ if((jgw1-sdz)>50)
{ad_vaul= ad_vaul+20;}
else ad_vaul= ad_vaul++;
da_zh(ad_vaul);}
else if (jgw1<sdz)
{if((jgw1-sdz)<50)
{ad_vaul= ad_vaul-20;}
else ad_vaul= ad_vaul--;
da_zh(ad_vaul);
}
}
void adjust()
{
unsigned char j[6],k[5],i;
j[0]=(jgw1)/100;
k[4]=(jgw1)%100;
j[2]=k[4]/10;
j[3]=k[4]%10;
for(i=0;i<4;i++) //步进加1后,设置电流值部分数显
{ sub_lcd(0xf9);
sub_lcd(0x09+i);
sub_lcd(0x20);
if(i!=1)
sub_lcd(0x30+j[i]);
else
sub_lcd(0x2e);
}
pid();
}
void adc()
{
unsigned char aa;
unsigned int me[10];
for(aa=0;aa<10;aa++)
{ me[aa]=ad_cy(); //AD采样过来的值
_nop_();
_nop_();
_nop_();
}
jgw1=(me[0]+me[1]+me[2]+me[3]+me[4]+me[5]+me[6]+me[7]+me[8]+me[9])/10;
_nop_();
if(jgw1<=30)
{jgw1 = xx[jgw1]/10;}
else if (jgw1<=35)
{jgw1 = jgw1*1.65;}
else if (jgw1<=40)
{jgw1 = jgw1*1.6;}
else if (jgw1<=45)
{jgw1 = jgw1*1.55;}
else if (jgw1<=50)
{jgw1 = jgw1*1.51;}
else if (jgw1<=55)
{jgw1 = jgw1*1.5;}
else if (jgw1<=60)
{jgw1 = jgw1*1.47;}
else if (jgw1<=65)
{jgw1 = jgw1*1.44;}
else if (jgw1<=70)
{jgw1 = jgw1*1.42;}
else if (jgw1<=75)
{jgw1 = jgw1*1.41;}
else if (jgw1<=80)
{jgw1 = jgw1*1.395;}
else if (jgw1<=85)
{jgw1 = jgw1*1.385;}
else if (jgw1<=90)
{jgw1 = jgw1*1.375;}
else if (jgw1<=95)
{jgw1 = jgw1*1.365;}
else if (jgw1<=100)
{jgw1 = jgw1*1.355;}
else if (jgw1<=105)
{jgw1 = jgw1*1.347;}
else if (jgw1<=110)
{jgw1 = jgw1*1.34;}
else if (jgw1<=115)
{jgw1 = jgw1*1.334;}
else if (jgw1<=120)
{jgw1 = jgw1*1.328;}
else if (jgw1<=125)
{jgw1 = jgw1*1.322;}
else if (jgw1<=130)
{jgw1 = jgw1*1.316;}
else if (jgw1<=135)
{jgw1 = jgw1*1.312;}
else if (jgw1<=140)
{jgw1 = jgw1*1.309;}
else if (jgw1<=145)
{jgw1 = jgw1*1.305;}
else if (jgw1<=150)
{jgw1 = jgw1*1.3;}
else if (jgw1<=155)
{jgw1 = jgw1*1.295;}
else {jgw1 = jgw1*1.29;}
}
void main(void)
{ uchar cc=0;
uchar wei[5]={0,0,0,0,0};
uint zhongz[3]={0,0,0};
//申明部分
// 键值
//设定值个数计数器
start:da_zh(0);
r=0;
jgw1=0;
ini_OCMJ(); //液晶初始化
first_p();
second_p();
while(r<6)
{ switch(get_key())
{ case 0x0a: goto start;
case 0x00: { if(r!=1) { kk[r]=0;
sub_lcd(0xf9);
sub_lcd(0x09+r);
sub_lcd(0x10);
sub_lcd(0x30+kk[r]);
r++;
}
}break;
case 0x01: { if(r!=1) { kk[r]=1;
sub_lcd(0xf9);
sub_lcd(0x09+r);
sub_lcd(0x10);
sub_lcd(0x30+kk[r]);
r++;
}
}break;
case 0x02: { if(r!=1) { kk[r]=2;
sub_lcd(0xf9);
sub_lcd(0x09+r);
sub_lcd(0x10);
sub_lcd(0x30+kk[r]);
r++;
}
}break;
case 0x03: { if(r!=1) { kk[r]=3;
sub_lcd(0xf9);
sub_lcd(0x09+r);
sub_lcd(0x10);
sub_lcd(0x30+kk[r]);
r++;
}
}break;
case 0x04: { if(r!=1) { kk[r]=4;
sub_lcd(0xf9);
sub_lcd(0x09+r);
sub_lcd(0x10);
sub_lcd(0x30+kk[r]);
r++;
}
}break;
case 0x05: { if(r!=1) { kk[r]=5;
sub_lcd(0xf9);
sub_lcd(0x09+r);
sub_lcd(0x10);
sub_lcd(0x30+kk[r]);
r++;
}
}break;
case 0x06: { if(r!=1) { kk[r]=6;
sub_lcd(0xf9);
sub_lcd(0x09+r);
sub_lcd(0x10);
sub_lcd(0x30+kk[r]);
r++;
}
}break;
case 0x07: { if(r!=1) { kk[r]=7;
sub_lcd(0xf9);
sub_lcd(0x09+r);
sub_lcd(0x10);
sub_lcd(0x30+kk[r]);
r++;
}
}break;
case 0x08: { if(r!=1) { kk[r]=8;
sub_lcd(0xf9);
sub_lcd(0x09+r);
sub_lcd(0x10);
sub_lcd(0x30+kk[r]);
r++;
}
}break;
case 0x09: { if(r!=1) { kk[r]=9;
sub_lcd(0xf9);
sub_lcd(0x09+r);
sub_lcd(0x10);
sub_lcd(0x30+kk[r]);
r++;
}
}break;
case 0x0f:{ sub_lcd(0xf9);
sub_lcd(0x09+r);
sub_lcd(0x10);
sub_lcd(0x2e);
r++;} break;
case 0x0d: {r--;
kk[r]=0;
sub_lcd(0xf9);
sub_lcd(0x09+r);
sub_lcd(0x10);
sub_lcd(0x20);
} break;
case 0x0b:{ r=6;}break;
default: break;
}
}
_nop_();
sdz = kk[0]*1000+kk[2]*100+kk[3]*10+kk[4];
ad_vaul=(2000-sdz)*cshu0; //设定值送给DA;
da_zh(ad_vaul); //DA 转换输出.
_nop_();
while(1)
{
adc();
adjust();
cc=get_key();
if(cc==0x0c||cc==0x0e)
{goto last;}
}
//
while(1)
{
adc();
adjust();
last: switch(get_key())
{ case 0x0c: { sdz=sdz+1; // sdz步进加1后更新。
wei[0]=sdz/1000;
zhongz[0]=sdz%1000;
wei[2]=zhongz[0]/100;
zhongz[1]=zhongz[0]%100;
wei[3]=zhongz[1]/10;
wei[4]=zhongz[1]%10;
for(zhongz[2]=0;zhongz[2]<5;zhongz[2]++) //步进加1后,设置电流值部分数显
{ sub_lcd(0xf9);
sub_lcd(0x09+zhongz[2]);
sub_lcd(0x10);
if(zhongz[2]!=1)
sub_lcd(0x30+wei[zhongz[2]]);
else
sub_lcd(0x2e);
}
} break;
case 0x0e: {
sdz=sdz-1; //sdz步进减1后更新
wei[0]=sdz/1000;
zhongz[0]=sdz%1000;
wei[2]=zhongz[0]/100;
zhongz[1]=zhongz[0]%100;
wei[3]=zhongz[1]/10;
wei[4]=zhongz[1]%10;
for(zhongz[2]=0;zhongz[2]<5;zhongz[2]++) //步进减1后,设置电流值部分数显
{ sub_lcd(0xf9);
sub_lcd(0x09+zhongz[2]);
sub_lcd(0x10);
if(zhongz[2]!=1)
sub_lcd(0x30+wei[zhongz[2]]);
else
sub_lcd(0x2e);
}
} break;
case 0x0a: goto start;break;
default: break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -