⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yj1264yli.c

📁 水泵压力检测
💻 C
字号:
#include <stc5408.H>
//sbit CS=P1^0;	//片选 高电平有效 单片LCD使用时可固定高电平
sbit  SID=P2^1;	//数据
sbit  SCLK=P2^0;	//时钟
//sbit  PSB=P3^6;	//低电平时表示用串口驱动,可固定低电平
sbit  RESET=P1^7;	//LCD复位,LCD模块自带复位电路。可不接
#define uchar unsigned char
#define uint unsigned int
#define read 0x01   
#define prog 0x02 
#define sect 0x03 
uchar sjsj,fbsj,fbdj,bpsd;
uint xdata  dys[10],dya,bbb;
uchar ysd,yldq,yllc,phd,kbsj,tbsj;
uchar l2,wz,pm,dywz,ret,ii,fm=70,fjs=0,jps,lds,sds,mjs;
bit xs1,fy,jg,pp,sj,dj,js,jjs,jpp;
float  d1;
//uint ls,mc1=3000;
char ywz=0;
//uint xdata  d3,d2,yjs,zjs,gys[33];
unsigned long xdata zbc;
void write(bit start, unsigned char ddata);
void sendbyte(unsigned char bbyte);
void nop(unsigned int di);
void lcdinit(void);
void lcdtest(void);
void lcdcls(void);
uchar jj,jj2;
char code sz[]={"0123456789.V"};
uchar code ma[]={"  JD-2-I型"};
uchar code ma2[]={"中国烟台双诚节能"};
uchar code ma3[]={0xca,0xfd};//数
uchar code ma5[]={"恒压供水系统"};
uchar code m6[]={"Mp"};
uchar code m7[]={"秒级开关"};
uint cs[8];
uchar code mcf[10][10]=
          {{"给定压力: "},  
           {"加泵时间: "},  
           {"减泵时间: "},  
           {"输出平滑度"},
           {"传感器校零"},
           {"当前压力: "},
           {"传感器量程"},
           {"传感器误差"},
           {"变频泵状态"},
           {"辅助泵状态"}};
void kjxs();
void key();
void ccc();
void x9313(uchar ssj,uchar bs)
 {   uchar ii,kk;
    p24=0;
  if (ssj==1) {p33=1;} else p33=0;
    for(kk=0;kk<130;kk++) {;}
    for(ii=0;ii<bs;ii++)
    { p35=0;
     for(kk=0;kk<130;kk++) {;}
     p35=1;
     for(kk=0;kk<130;kk++) {;}
      if(ssj==1) bpsd++;else bpsd--;   }
      p24=1;  }
void yali()  {if(dya>=cs[4])
{d1=(500-cs[4]);zbc=cs[6];d1=zbc/d1;bbb=dya-cs[4]; d1=d1*bbb;
if(cs[7]!=20) {if((cs[7]>9)&&(cs[7]<31)) {jj2=80+cs[7];d1*=jj2;d1/=100;} }
bbb=d1; cs[5]=bbb;}
 else {cs[5]=bbb=0;}
xs1=1;}
void goz()
{uchar i1;ret=0;write(0,0x01);
 write(0,0x80); for(i1=0;i1<10;i1++)  write(1,mcf[5][i1]);
 write(0,0x90); for(i1=0;i1<10;i1++)  write(1,mcf[0][i1]);
 write(0,0x88); for(i1=0;i1<10;i1++)  write(1,mcf[8][i1]);
 write(0,0x98); for(i1=0;i1<10;i1++)  write(1,mcf[9][i1]);

while(1)
{key();
if(xs1) {xs1=0;write(0,0x85);jj=bbb/100;write(1,sz[jj]);write(1,sz[10]);jj=(bbb%100)/10;write(1,sz[jj]);jj=bbb%10;write(1,sz[jj]);write(1,m6[0]);write(1,m6[1]);
               write(0,0x95);jj=cs[0]/100;write(1,sz[jj]);write(1,sz[10]);jj=(cs[0]%100)/10;write(1,sz[jj]);jj=cs[0]%10;write(1,sz[jj]);write(1,m6[0]);write(1,m6[1]);
               write(0,0x8e);jj=bpsd/10;write(1,sz[jj]);jj=bpsd%10;write(1,sz[jj]);if(p34==0) {write(1,m7[4]);write(1,m7[5]);} else {write(1,m7[6]);write(1,m7[7]);}
               write(0,0x9e);if(sj) jj=fbsj/10;else  jj=fbdj/10;write(1,sz[jj]);if(sj) jj=fbsj%10;else  jj=fbdj%10;write(1,sz[jj]);if(p32==0) {write(1,m7[4]);write(1,m7[5]);} else {write(1,m7[6]);write(1,m7[7]);}}
if(ret==4) {x9313(0,bpsd),ysd=20;PCON=0x01;kjxs();p34=p32=1;ret=0;return;}
if(cs[5]<cs[0]) {sj=1;} else {sj=0;}
if(bpsd>0) p34=0;  else p34=1;
if(dj!=p32) {ysd=10;PCON=0x01;dj=p32;}
if(sj) {if(bpsd<32) {if(sjsj==0) {fbsj=cs[1];sjsj=2+cs[3]*3;x9313(1,1);}} else {if(fbsj==0) {p32=0;fbdj=cs[2];} } }
       // else {p34=0; if(p32==0)  {if(fbdj==0) p32=1; } else  {if(bpsd>0) {if(sjsj==0) {sjsj=2+cs[3]*3;x9313(0,1);}}}}

    else { if(p32==0)  {if(fbdj==0) p32=1; }  if(bpsd>0) {if(sjsj==0) {sjsj=2+cs[3]*3;x9313(0,1);}}}
ret=0;}}

void xwz() {uchar ll; if(wz>3) ll=wz-4;else ll=wz; switch(ll) {case 0:write(0,0x87);break;case 1:write(0,0x97);break;case 2:write(0,0x8f);break;case 3:write(0,0x9f);}}
void xsj() {          if(wz<4) {write(0,0x85);jj=cs[0]/100;write(1,sz[jj]);write(1,sz[10]);jj=(cs[0]%100)/10;write(1,sz[jj]);jj=cs[0]%10;write(1,sz[jj]);write(1,m6[0]);write(1,m6[1]);
                                write(0,0x95);write(1,ma[0]);jj=cs[1]/10;write(1,sz[jj]); jj=cs[1]%10;write(1,sz[jj]);write(1,ma[0]);write(1,m7[0]);write(1,m7[1]); 
                                write(0,0x8d);write(1,ma[0]);jj=cs[2]/10;write(1,sz[jj]); jj=cs[2]%10;write(1,sz[jj]);write(1,ma[0]);write(1,m7[0]);write(1,m7[1]); 
                                write(0,0x9e);if(cs[3]>9) cs[3]=0;write(1,sz[cs[3]]);write(0,0x9f);write(1,m7[2]);write(1,m7[3]);}
                         else  {write(0,0x85);jj=cs[4]/100;write(1,sz[jj]);write(1,sz[10]);jj=(cs[4]%100)/10;write(1,sz[jj]);jj=cs[4]%10;write(1,sz[jj]);write(1,0xa3);write(1,0xd6);
                                write(0,0x95);jj=cs[5]/100;write(1,sz[jj]);write(1,sz[10]);jj=(cs[5]%100)/10;write(1,sz[jj]);jj=cs[5]%10;write(1,sz[jj]);write(1,m6[0]);write(1,m6[1]);
                                write(0,0x8d);jj=cs[6]/100;write(1,sz[jj]);write(1,sz[10]);jj=(cs[6]%100)/10;write(1,sz[jj]);jj=cs[6]%10;write(1,sz[jj]);write(1,m6[0]);write(1,m6[1]);
                                write(0,0x9d);if((cs[7]>30)||(cs[7]<10)) cs[7]=20;if(cs[7]==20) {write(1,0xa1);write(1,0xc0);write(1,sz[0]);write(1,sz[0]);} 
                                else {write(1,0xa3);if(cs[7]>20) {write(1,0xab);jj=(cs[7]-20)/10;write(1,sz[jj]);jj=(cs[7]-20)%10;write(1,sz[jj]);} else {write(1,0xad);jj=(20-cs[7])/10;write(1,sz[jj]);jj=(20-cs[7])%10;write(1,sz[jj]);}} write(1,0xa3);write(1,0xa5);}
}
void kjxs()
{write(0,0x01);
 write(0,0x81); for(ii=0;ii<10;ii++)  write(1,ma[ii]);
 write(0,0x91); for(ii=0;ii<12;ii++)  write(1,ma5[ii]);
 write(0,0x98); for(ii=0;ii<16;ii++)  write(1,ma2[ii]);
 }
void xp()
{uchar i1;
 write(0,0x01);
 write(0,0x80); for(i1=0;i1<10;i1++)  write(1,mcf[wz][i1]);
 write(0,0x90); for(i1=0;i1<10;i1++)  write(1,mcf[wz+1][i1]);
 write(0,0x88); for(i1=0;i1<10;i1++)  write(1,mcf[wz+2][i1]);
 write(0,0x98); for(i1=0;i1<10;i1++)  write(1,mcf[wz+3][i1]);
fy=1;
}
void tz()
{uchar k1;
 write(0,0x0d);
 while(1)
 { key();
  if(ret==1){if((wz==0)||(wz==5)||(wz==6)) {k1=cs[wz]/10;k1++;if(k1>24) k1=0;cs[wz]%=10;cs[wz]+=k1*10;}
               else {if((wz==1)||(wz==2)) {k1=cs[wz]/10; k1++;if(k1>9) k1=0;cs[wz]%=10;cs[wz]+=k1*10;}
                         else {if(wz==3) {cs[wz]++;if(cs[wz]>9) cs[wz]=0;}
                               else {if(wz==4) {cs[wz]=dya;}
                                      else {cs[7]++;if(cs[7]>30) cs[7]=30;}}}}xsj();xwz();}   
            
  if(ret==2){if((wz==0)||(wz==5)||(wz==6)) {k1=cs[wz]%10;k1++;if(k1>9) k1=0;cs[wz]/=10;cs[wz]*=10;cs[wz]+=k1;}
               else {if((wz==1)||(wz==2)) {k1=cs[wz]%10; k1++;if(k1>9) k1=0;cs[wz]/=10;cs[wz]*=10;cs[wz]+=k1;}
                         else {if(wz==3) {if(cs[wz]==0)  cs[wz]=9; else {cs[wz]--;}}
                               else {if(wz==4) {cs[wz]=dya;}
                                      else {cs[7]--;if(cs[7]<10) cs[7]=10;}}}}xsj();xwz();}
  if(ret==3){if((wz==3)||(wz==7)) fy=0;wz++;if(wz>7) wz=0;xwz();}
  if(ret==4){ccc();ret=0;write(0,0x0c);kjxs();return;}
  ret=0;if(!fy) {xp();xsj();xwz();}
}
}

void nop(uint  kk)
{for(kk;kk>0;kk--) {;} }
void ISP_IAP_enable(void)
{
	EA=0;
	ISP_CONTR=ISP_CONTR & 0x18;    
	ISP_CONTR=ISP_CONTR | 0x03;
	ISP_CONTR=ISP_CONTR | 0x80;
}
void ISP_IAP_disable(void)
{
	ISP_CONTR=ISP_CONTR & 0x7f;
	ISP_TRIG=0x00;
	EA=1;
}
uchar bread(uint byte_addr)
{	ISP_ADDRH=(uchar)(byte_addr >> 8);
	ISP_ADDRL=(uchar)(byte_addr & 0x00ff);
	ISP_CMD  =ISP_CMD & 0xf8; 
	ISP_CMD  =ISP_CMD | read; 
	ISP_IAP_enable();
	ISP_TRIG	=	0x46;
	ISP_TRIG	=	0xb9;
	nop(10);
	ISP_IAP_disable();
	return (ISP_DATA);
}
 uchar sector(uint dz)
{
	uint get_sector_addr	=0;
	get_sector_addr	=(dz & 0xfe00); 
	ISP_ADDRH =(uchar)(get_sector_addr >> 8);
	ISP_ADDRL =0x00;
	ISP_CMD	=ISP_CMD&0xf8;
	ISP_CMD	=ISP_CMD|sect;
	ISP_IAP_enable();
	ISP_TRIG=0x46; 
	ISP_TRIG=0xb9;
        nop(80);
	ISP_IAP_disable();
	return 1;
}
void  bprog(uint byte_addr, uchar original_data)
{
	ISP_ADDRH=(uchar)(byte_addr >> 8);
	ISP_ADDRL=(uchar)(byte_addr & 0x00ff);
	ISP_CMD	=ISP_CMD&0xf8; 
	ISP_CMD	=ISP_CMD|prog; 
   ISP_DATA=original_data;
	ISP_IAP_enable();
	ISP_TRIG=0x46;
	ISP_TRIG=0xb9;
	nop(70);
	ISP_IAP_disable();
}
void ccc()
{uint l1;
 sector(0x2800);
for (l2=0;l2<8;l2++)  {l1=0x2800+l2;bprog(l1,cs[l2]); }
}
void lcdinit(void)	//初始化LCD 
{
  nop(100); //启动等待,等LCM讲入工作状态
//  PSB=0; ;   	 //串口驱动模式
  RESET=0; 
  nop(10); 
  RESET=1; // 复位LCD
//  CS=1;
  write(0,0x30);  //8 位介面,基本指令集
  write(0,0x0c);  //显示打开,光标关,反白关
   //清屏,将DDRAM的地址计数器归零  
}

void write(bit start, unsigned char ddata) //写指令或数据
{
  unsigned char start_data,Hdata,Ldata;
  if(start==0) start_data=0xf8;	 //写指令
    else       start_data=0xfa;  //写数据
  
  Hdata=ddata&0xf0;		  //取高四位
  Ldata=(ddata<<4)&0xf0;  //取低四位
  sendbyte(start_data);	  //发送起始信号
  nop(150); //延时是必须的
  sendbyte(Hdata);	      //发送高四位
  nop(20);  //延时是必须的
  sendbyte(Ldata);		  //发送低四位
  nop(300);  //延时是必须的
}

void sendbyte(unsigned char bbyte) //发送一个字节
{
 unsigned char i;
 for(i=0;i<8;i++)
   {
   SID=bbyte&0x80; //取出最高位
   SCLK=1;
   SCLK=0;
   bbyte<<=1; //左移
   }  
}


void damo_t1() interrupt 3
{if(ysd>0) {ysd--;} else PCON=0x30;
if(pm>0) {pm--;}
pp=1;
if(sjsj>0) sjsj--;else sjsj=0;
fjs++; if(fjs>9) {fjs=0;mjs++;lds++;if(lds>30) {p12=1;lds=30;}else p12=0;
if(fbsj>0) fbsj--; else fbsj=0;
if((bpsd<32)&&(fbdj>0)) fbdj--;
} 
TH1=-63000/256;TL1=-63000%256;
}

void key()
{dog=0x34; 
//ret=0;
if((pp)&&(ADC_CONTR==0xe0)) if(jg) ADC_CONTR=0x8d; else ADC_CONTR=0x8e; 
if((ADC_CONTR&0x10)==0x10) {
  ADC_CONTR=0xe0;
  zbc=ADCDATA;zbc<<=2;ADC=ADC&0x03;zbc+=ADC;
  zbc=(500*zbc)/1023;
if(jg)
  {dys[dywz]=zbc;
   if(dywz==9) {zbc=0;for(ii=0;ii<10;ii++) {zbc+=dys[ii];} zbc/=10;dya=zbc;yali();}
    dywz++;if(dywz>9) dywz=0;}
       else if((pm==0)) {{if(zbc<490)
            {if(jpp) {if(zbc>395) {ret=1;}
                     else {if(zbc>360) {ret=2;}
                           else {if(zbc>300) {ret=3;}
                                  else {if(zbc>200) {ret=4;}}}}} }   else  jpp=1;}   }
 //write(0,0x8c);write(1,sz[ret]);
if(ret>0) {pm=2;jpp=0;} 
jg=!jg;pp=0;}

if(ret>0)  {if(p12==1) {p12=0;ret=0;} lds=0;}
}


void main(void)
{TMOD=0x11;
TH1=-6000/256;TL1=-6000%256;
EA=1;
//ET0=1;
TR1=1;ET1=1;

lcdinit();
kjxs();
ADC_CONTR=0xe0;P1M0=P1M1=0x60;
for(ret=0;ret<8;ret++) {dya=0x2800+ret;cs[ret]=bread(dya);}
if(cs[0]>249) cs[0]=0;
if(cs[1]>99) cs[1]=0;
if(cs[2]>249) cs[2]=0;
if((cs[7]>30)||(cs[7]<10))  cs[7]=20;
if(cs[3]>9) cs[3]=0;
if(cs[5]>249) cs[5]=0;
if(cs[6]>249) cs[6]=0;
if(cs[4]>249) cs[4]=0;

 while(1)
{key();
if(ret==4) goz();;
if(ret==3) {ret=wz=0;fy=0;tz();}
ret=0;}
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -