?? yj1264yli.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 + -