📄 plj.c
字号:
#include<intrins.h>
#include<absacc.h>
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define state 0
#define dataa 1
sfr T2CON = 0xc8;
sfr RAP2H = 0xcb;
sfr RAP2L = 0xca;
sbit e = P3^0; sbit wr = P3^1; sbit rs = P3^2;
sbit clr = P2^3; sbit gate = P2^4;
sbit sw = P3^3;
bit f;
bit fhl;
uchar res[8],distp[8];
uchar code dish[8] = {'z',' ','f','>','2','0','H','z'};
uchar code disl[8] = {'z',' ','f','<','2','0','H','z'};
void delay()
{
uchar di;
for(di=0;di<255;di++)
_nop_();
}
void senddata(uchar cdata)
{
SBUF = cdata;
while(TI==0);
TI = 0;
}
/////led/////
//rs = 1 data; rs = 0 comm
//wr = 1 read; wr = 0 write
//e
//bf = 1 busy
//A8 第二行起始址
void writecomm(uchar comm)
{
e = 1;
delay();
P1 = comm;
rs = 0;
wr = 0;
e = 0;
_nop_();
}
void writedata(uchar dat)
{
//uchar sta;
e = 1;
//do
//{
// sta = readsd(state);
// sta = sta&0x80;
//}
//while(sta!=0x00);
delay();
P1 = dat;
rs = 1;
wr = 0;
e = 0;
_nop_();
delay();
}
void initializelcd()
{
writecomm(0x38);//2 line
delay();
writecomm(0x38);//2 line
delay();
writecomm(0x0c);
delay();
writecomm(0x06);
delay();
writecomm(0x80);
}
uchar readdata(uchar adr)
{
uchar cc;
P2 = adr;
_nop_();
_nop_();
cc = P0;
return cc;
}
void display()//h = 1;l = 0;
{
uchar i;
writecomm(0x80);
for(i=0;i<8;i++)
writedata(distp[i]);
}
void calc()
{
float bzq,tsq;
uchar calct;
writecomm(0xa8);
writedata('z');
bzq = res[3]*16777216+res[2]*65536+res[1]*256+res[0];
tsq = res[7]*16777216+res[6]*65536+res[5]*256+res[4];
if(bzq==0)
{
for(calct=0;calct<6;calct++)
distp[calct] = 0x20;
distp[6] = 0x30;
display();
return;
}
tsq = 20000000*tsq/bzq;
//tsq = 19;
bzq = tsq;
calct = tsq/1000000;
if(calct!=0)
{
tsq = tsq - calct*1000000;
distp[0] = calct+48;
}
else
distp[0] = 0x20;
/////////////////0
calct = tsq/100000;
distp[1] = calct+48;
if(calct!=0)
tsq = tsq - calct*100000;
else
if(distp[0]==0x20)
distp[1] = 0x20;
////////////////1
calct = tsq/10000;
distp[2] = calct+48;
if(calct!=0)
tsq = tsq - calct*10000;
else
if(distp[1]==0x20)
distp[2] = 0x20;
/////////////////2
calct = tsq/1000;
distp[3] = calct+48;
if(calct!=0)
tsq = tsq - calct*1000;
else
if(distp[2]==0x20)
distp[3] = 0x20;
/////////////////3
calct = tsq/100;
distp[4] = calct+48;
if(calct!=0)
tsq = tsq - calct*100;
else
if(distp[3]==0x20)
distp[4] = 0x20;
//////////////////4
calct = tsq/10;
distp[5] = calct+48;
if(calct!=0)
tsq = tsq - calct*10;
else
if(distp[4]==0x20)
distp[5] = 0x20;
//////////////////5
distp[6] = tsq/1+48;
tsq = tsq - (distp[6]-48);
if(bzq<=20)
{
for(calct=0;calct<3;calct++)
distp[calct] = 0x20;
distp[3] = distp[5];
distp[4] = distp[6];
distp[5] = '.';
distp[6] = (tsq*10)/1+48;
}
display();
}
void count()
{
uchar i,t1,t2;
f = 1;
TH0 = 0x3c;
TL0 = 0xb0;
clr = 1;
_nop_();
clr = 0;///clear
TR0 = 1;
gate = 1;
while(f);
gate = 0;
P2 = 0x04;
do
{
t1 = P0;
_nop_();
t2 = P0;
}
while(t1!=t2);
for(i=0;i<8;i++)
res[i] = readdata(i);
for(i=0;i<8;i++)
senddata(res[i]);
TH0 = 0x3c;
TL0 = 0xB0;
i = 0;
while(i<10)
{
TR0 = 1;
while(f);
i++;
f = 1;
TH0 = 0x3c;
TL0 = 0xb0;
}
calc();
}
void delay10s()
{
uint ds,tt1,tt2;
EX0 = 0;
writecomm(0xa8);
writedata(0x20);
writecomm(0x80);
for(ds=0;ds<8;ds++)
writedata(0x20);
writecomm(0x80);
writedata('W');
writedata('a');
writedata('i');
writedata('t');
ds = 0;
TH0 = 0x3c;
TL0 = 0xb0;
clr = 1;
_nop_();
clr = 0;///clear
gate = 1;
while(ds<282)
{
TR0 = 1;
while(f);
ds++;
f = 1;
TH0 = 0x3c;
TL0 = 0xb0;
}
gate = 0;
P2 = 0x04;
do
{
tt1 = P0;
_nop_();
tt2 = P0;
}
while(tt1!=tt2);
for(ds=0;ds<8;ds++)
res[ds] = readdata(ds);
for(ds=0;ds<8;ds++)
senddata(res[ds]);
calc();
ds = 0;
TH0 = 0x3c;
TL0 = 0xb0;
EX0 = 1;
while(ds<60)
{
TR0 = 1;
while(f);
ds++;
f = 1;
TH0 = 0x3c;
TL0 = 0xb0;
}
}
void t0pro(void) interrupt 1
{
TR0 = 0;
f = 0;
}
void keyb(void) interrupt 0
{
uchar *dp,i;
while(sw==0);
fhl = !fhl;
writecomm(0xa8);
if(fhl)
dp = dish;
else
{
dp = disl;
}
for(i=0;i<8;i++)
writedata(*(dp+i));
}
main()
{
uchar mi = 0x30;
e = 0;
SCON = 0x50;
RAP2H = 0xff;
RAP2L = 0xd9;
T2CON = 0x34;
TMOD = 0x01;
clr = 0;
gate = 0;
EA = 1;
ET0 = 1;
IT0 = 1;
EX0 = 1;
delay();
initializelcd();
distp[0] = 0x20;
distp[1] = 0x20;
distp[2] = 0x20;
distp[3] = 0x20;
distp[4] = 0x20;
distp[5] = 0x20;
distp[6] = 0x30;
distp[7] = 'H';
fhl = 1;
display();
writecomm(0xa8);
for(mi=0;mi<8;mi++)
writedata(dish[mi]);
while(1)
{
//while(RI==0);
//RI = 0;
if(fhl)
count();
else
delay10s();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -