📄 dianliuyuan.txt
字号:
#include"reg52.h"
#include"absacc.h"
#define ulong unsigned long
#define uint unsigned int
#define uchar unsigned char
#define XADDRESS XBYTE[0x0000]
#define key XBYTE[0xe000]
uchar keybuf,tishi,tishi1,queren,i,j,zhuanhuan;
uchar idata t,qiehuan1,qiehuan2;
uchar idata shuzu[5],gewei[5],gewei1[5];//前者显示预置,中者显示实测,后者增减显示
uint idata qz[4]={1,10,100,1000},shuzhi1,shice;
uint shuzhi;
void LCMInit(void);
void cls(void);
void dprintf(uchar x,uchar y,char *ptr);
void shortdelay(uint tt);
void da_0(uint da);
uint ad_0(void);
void scxianshi(uint m);
void zjxianshi(uint m);
sbit da_cs=P1^2;//--DA
sbit da_clk=P1^1;
sbit da_in=P1^0;
sbit ad_clk=P1^4;//--AD
sbit ad_out=P1^5;
sbit ad_cs=P1^6;
void TimeSvr(void) interrupt 1
{
TH0=0X3C;
TL0=0XB0;
T0=~T0;
}
void main()
{
TMOD=0X01;
TH0=0X3C;
TL0=0XB0;
TR0=1;
ET0=1;
IT1=1;
EX1=1;
EA=1;
tishi=0;
t=0;
shuzhi=0;
qiehuan1=1;//提示界面与预置值界面的切换
qiehuan2=1;//预置值的增或减
LCMInit();
cls();
reset:
cls();
for(i=0;i<5;i++)
{
shuzu[i]=0;
}
while(1)
{
shortdelay(1000);
while(qiehuan1)
{
dprintf(0,0,"请输入预置值");
dprintf(0,1,"要求:单位mA");
//dprintf(4,2,"10的整倍");
dprintf(4,2,"且不大于1000");
dprintf(0,3,"B递增C递减D返回");
}
cls();
dprintf(0,0,"预置值:");
while(tishi1)//tishi标示每次中断,tishi1标示置数完毕
{
if(tishi&&t<4)
{
shuzu[t]=keybuf+48;
t++;
dprintf(7,0,shuzu);
}
tishi=0;
shortdelay(100);
}
while(zhuanhuan)
{
for(j=0;j<t;j++)//由数组转换成数值
{
shuzhi=shuzhi+(shuzu[j]-48)*qz[t-1-j];
}
zhuanhuan=0;
}
while(queren==1) //确认键A
{
tishi=0;
if(keybuf==11)//递增
{
shuzhi=shuzhi+10;
qiehuan2=1;
}
if(keybuf==12)//递减
{
shuzhi=shuzhi-10;
qiehuan2=1;
cls();
}
shuzhi1=(shuzhi*33)/40;//shuzhi不变以便比较,shuzhi1改变以便补偿
//while((shuzhi%10==0)&&qiehuan2&&shuzhi<=1000)
while(qiehuan2&&shuzhi<=1000)
{
zjxianshi(shuzhi);
dprintf(0,0,"预置值:");
dprintf(7,0,gewei1);
da_0(shuzhi1);
shortdelay(10);
shice=ad_0();//shice由模数直接得到
shortdelay(10);
shice=shice+ad_0();
shortdelay(10);
shice=shice+ad_0();
shice=shice/3;//求三次的平均值
//zjxianshi(shuzhi);
//dprintf(0,0,"预置值:");
//dprintf(7,0,gewei1);
//scxianshi(shice);
//dprintf(0,1,"实测值:");
//dprintf(7,1,gewei);
if(shuzhi>shice)
{
shortdelay(10);
shuzhi1++;
da_0(shuzhi1);
}
if(shuzhi<shice)
{
shortdelay(10);
shuzhi1--;
da_0(shuzhi1);
}
if(shuzhi==shice);
{
shortdelay(10);
da_0(shuzhi1);
}
scxianshi(shice);
dprintf(0,1,"实测值:");
dprintf(7,1,gewei);
}
//if(shuzhi%10!=0||shuzhi>1000)
if(shuzhi>1000)
{
for(i=0;i<5;i++)
shuzu[i]=0;
t=0;
shuzhi=0;
cls();
dprintf(0,1,"要求不符");
shortdelay(2000);
queren=20;
qiehuan1=1;
}
if(keybuf==13)
{
t=0;
shuzhi=0;
goto reset;
}
}
}
}
void service_int1() interrupt 2 using 2 //-------- 键盘中断1--------
{
tishi=1;tishi1=1;qiehuan1=0;
keybuf=key;
switch(keybuf)
{
case 253 :keybuf=0; break;
case 254 :keybuf=1; break;
case 255 :keybuf=2; break;
case 240 :keybuf=3; break;
case 243 :keybuf=4; break;
case 246 :keybuf=5; break;
case 249 :keybuf=6; break;
case 252 :keybuf=7; break;
case 242 :keybuf=8; break;
case 245 :keybuf=9; break;
case 248:keybuf=10;break;
case 250:keybuf=11;break;
case 241:keybuf=12;break;
case 244:keybuf=13;break;
case 247:keybuf=14;break;
case 251:keybuf=15;break;
}
if(keybuf==10)//确认键A
{
tishi1=0;//跳出输入预置值循环
queren=1;
zhuanhuan=1;
qiehuan2=1;
}
if(keybuf==11)//加10mA键
{
queren=1;
qiehuan2=0;
}
if(keybuf==12)//减10mA键
{
queren=1;
qiehuan2=0;
}
if(keybuf==13)//复位键
{
qiehuan2=0;
qiehuan1=1;
}
//while(INT1==0);
//EA=1;
do{}while(INT1==1);
}
void scxianshi(uint m)//实测显示
{
uchar n;
for(n=0;n<4;n++)
gewei[n]=0;
if(m>=1000)
{
gewei[0]=m/1000+48;
gewei[1]=m%1000/100+48;
gewei[2]=m%1000%100/10+48;
gewei[3]=m%1000%100%10+48;
}
if(m<1000&&m>=100)
{
gewei[0]=m/100+48;
gewei[1]=m%100/10+48;
gewei[2]=m%100%10+48;
gewei[3]=0;
}
if(m<100&&m>=10)
{
gewei[0]=m/10+48;
gewei[1]=m%10+48;
gewei[3]=0;
gewei[4]=0;
}
if(m<10)
{
gewei[0]=m+48;
gewei[1]=0;
gewei[2]=0;
gewei[3]=0;
}
}
void zjxianshi(uint m)//增减显示
{
uchar n;
for(n=0;n<4;n++)
{
shortdelay(10);
gewei1[n]=0;
}
if(m>=1000)
{
gewei1[0]=m/1000+48;
gewei1[1]=m%1000/100+48;
gewei1[2]=m%1000%100/10+48;
gewei1[3]=m%1000%100%10+48;
}
if(m<1000&&m>=100)
{
gewei1[0]=m/100+48;
gewei1[1]=m%100/10+48;
gewei1[2]=m%100%10+48;
gewei1[3]=0;
}
if(m<100&&m>=10)
{
gewei1[0]=m/10+48;
gewei1[1]=m%10+48;
gewei1[2]=0;
gewei1[3]=0;
}
if(m<10)
{
gewei1[0]=m+48;
gewei1[1]=0;
gewei1[2]=0;
gewei1[3]=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -