📄 yanjing12864new.c
字号:
//proteus仿真论坛:http://proteus.5d6d.com
#include <at89x51.h>
#include <intrins.h>
#include<ds18b20.h>
#define uchar unsigned char
#define uint unsigned int
#define lcm P1
sbit p_csl=P2^2;
sbit p_csr=P2^1;
sbit p_di=P2^3;
sbit p_rw=P2^4;
sbit p_e=P2^5;
sbit p_rst=P2^0;
sbit xiayi=P3^5;
sbit sure=P3^6;
sbit fanhui=P3^7;
sbit alarm=P2^6;
uchar code t[];
uchar code tu[];
uchar code tu1[];
uchar code tu2[];
uchar code xzi[];
uchar code zuobiao[];
uchar ye,lie,shu,r,temp,tp[5]={0,0,0,0,0};
uint fanbai=0,shi=3,ge=5;
bit baojing=0,ss=0;
unsigned int i,h,aa=0,bb=0,dd,xuanzhe=0,ad,rr,q=0,lu=1;
unsigned char ye,lei,shu,yy,zan,zan1,zan2,zan3,zan4,d1=0x00,d2=0x00,d3=0x00,d4=0x00,d5=0x00,date1,ff,gg;
uchar code ds18b20_num2[8][8]={
{0xAE,0x00,0x00,0x01,0xBC,0x71,0xFD,0x28},
{0xEB,0x00,0x00,0x01,0xBC,0x4D,0x22,0x28},
{0x3A,0x00,0x00,0x01,0xBC,0x71,0xE7,0x28},
{0x77,0x00,0x00,0x01,0xBC,0x48,0x09,0x28},
{0x48,0x00,0x00,0x01,0xBC,0x58,0xCD,0x28},
{0xA6,0x00,0x00,0x01,0xBC,0x7E,0x36,0x28},
{0x72,0x00,0x00,0x01,0xBC,0x55,0x96,0x28},
{0x74,0x00,0x00,0x01,0xBC,0x6D,0xE9,0x28},
};
/*uchar code ds18b20_num2[8][8]={
{0x8e,0x00,0x00,0x00,0xb8,0xc5,0x30,0x28},
{0x16,0x00,0x00,0x00,0xb8,0xc5,0x40,0x28},
{0xB9,0x00,0x00,0x00,0xb8,0xc5,0x31,0x28},
{0xe0,0x00,0x00,0x00,0xb8,0xc5,0x32,0x28},
{0xd7,0x00,0x00,0x00,0xb8,0xc5,0x33,0x28},
{0x52,0x00,0x00,0x00,0xb8,0xc5,0x34,0x28},
{0x65,0x00,0x00,0x00,0xb8,0xc5,0x35,0x28},
{0x3c,0x00,0x00,0x00,0xb8,0xc5,0x36,0x28},
};*/
//uchar ds18b20_num2[8]={0x16,0x00,0x00,0x00,0xb8,0xc5,0x40,0x28};
/*****函数声明********/
void delay(uint k);
void wcode(uchar c,uchar csl,uchar csr);
void wdata(uchar c,uchar csl,uchar csr);
void set_statrline(uchar i);
void set_xy(uchar x,uchar y);
void dison_off(uchar o);
void reset();
void lcd_init(void);
void lw(uchar x,uchar y,uchar dd);//写数据函数
void disp_Hz(uchar xx,uchar yy,uchar n,uchar fb);//显示汉字
void disp_Ez(uchar xx,uchar yy,uchar n,uchar fb);
//延时
void delay(uint k)
{ uint i;
for(;k>0;k--)
{ for(i=0;i<124;i++)
{;}
}
}
//
//LCM忙判断
void lcd_busy(void)
{ p_di=0;
p_rw=1;
/*lcm=0xff;
while(1)
{ p_e=1;
if(lcm<0x80)
break;
p_e=0;
}
p_e=0;*/
}
//写指令到LCM
void wcode(uchar c,uchar csl,uchar csr)
{ p_csl=csl;
p_csr=csr;
lcd_busy();
p_di=0;
p_rw=0;
lcm=c;//将变量C赋予LCM
p_e=1;
p_e=0;
}
//写数据到LCM子函数
void wdata(uchar c,uchar csl,uchar csr)
{ p_csl=csl;
p_csr=csr;
lcd_busy();
p_di=1;
p_rw=0;
lcm=c;//将变量C赋予LCM
p_e=1;
p_e=0;
}
//设定起始行
void set_startline(uchar i)
{ i=0xc0+i;
wcode(i,1,1);
}
//定位X方向,Y方向
void set_xy(uchar x,uchar y)
{ x=x+0x40;
y=y+0xb8;
wcode(x,1,1);
wcode(y,1,1);
}
//屏幕开启、关闭
void dison_off(uchar o)
{ o=o+0x3e; //o为1为开,为0是关
wcode(o,1,1);
}
//复位子函数
void reset()
{//delay(1000);
p_rst=0;
delay(20);
p_rst=1;
delay(20);
}
//LCM初始化
void lcd_init(void)
{ uchar x,y;
reset();
dison_off(0);
for(y=0;y<8;y++)
{ for(x=0;x<128;x++)
lw(x,y,0);
}
dison_off(1);
set_startline(0);
}
//写数据到LCM
void lw(uchar x,uchar y,uchar dd)
{ if(x>=64)
{
set_xy(x-64,y);
wdata(dd,0,1);
}
else
{ set_xy(x,y);
wdata(dd,1,0);
}
}
void xieshuju(uint csl,uint csr)
{
wcode(ye,csl,csr);
wcode(lie,csl,csr);
wdata(shu,csl,csr);
}
void xianshi(uchar y1,uchar l1,uint k,uint csl,uint csr)
{
uchar j;
lie=l1;
for(j=0;j<8;j++,lie++)
{
ye=y1;
shu=t[2*j+16*k];
if (fanbai==1) shu=~shu;
xieshuju(csl,csr);
ye++;
shu=t[2*j+1+16*k];
if (fanbai==1) shu=~shu;
xieshuju(csl,csr);
}
ye--;
}
void caidanhanshu(uint b)
{
xianshi(r,0x60,b,1,0);
b++;
xianshi(r,0x68,b,1,0);
b++;
xianshi(r,0x70,b,1,0);
b++;
xianshi(r,0x78,b,1,0);
b++;
xianshi(r,0x40,b,0,1);
b++;
xianshi(r,0x48,b,0,1);
b++;
xianshi(r,0x50,b,0,1);
b++;
xianshi(r,0x58,b,0,1);
}
void qinglin()
{
xianshi(r,0x60,10,1,0);
xianshi(r,0x68,10,1,0);
xianshi(r,0x70,10,1,0);
xianshi(r,0x78,10,1,0);
xianshi(r,0x40,10,0,1);
xianshi(r,0x48,10,0,1);
xianshi(r,0x50,10,0,1);
xianshi(r,0x58,10,0,1);
}
void qingpin()
{
for(lie=0x40;lie<=0x7f;lie++)
{
for(ye=0xb8;ye<=0xbf;ye++)
{
shu=0x00;
xieshuju(1,1);
}
}
}
void xieyihangzi(uchar ye1,uint zi)
{
ye=ye1;
for(lie=0x50;lie<=0x78;zi++)
{
xianshi(ye,lie,zi,1,0);
}
for(lie=0x40;lie<=0x68;zi++)
{
xianshi(ye,lie,zi,0,1);
}
}
void wenduchuli()
{
if((gao>>4)==0)
{
temp=(gao<<4)|(di>>4);
tp[0]=temp/100;
tp[1]=(temp%100)/10;
tp[2]=temp%10;
tp[3]=(di&0x0f)*625/1000;
}
else
{
if(di==0)
{
di=~di+1;
gao=~gao+1;
}
else
{
di=~di+1;
gao=~gao;
}
tp[0]=191;
temp=(gao<<4)|(di>>4);
tp[1]=temp/10;
tp[2]=temp%10;
}
}
void xiexiaozi(uchar a,uchar b,uint c,uint csl,uint csr)
{
uchar i;
ye=a;
lie=b;
for(i=0;i<4;i++)
{
shu=xzi[i+4*c];
xieshuju(csl,csr);
lie++;
}
}
void tuxing(uchar a,uint b,uint c)
{
ad=(tp[0]*100*5+tp[1]*10*5+tp[2]*5+tp[3]/2)-125;
if(ad<=7) ye=0xbf,shu=(0x80>>ad);
else if(ad<=15) ye=0xbe,shu=(0x80>>(ad-8));
else if(ad<=23) ye=0xbd,shu=(0x80>>(ad-16));
else if(ad<=31) ye=0xbc,shu=(0x80>>(ad-24));
else if(ad<=39) ye=0xbb,shu=(0x80>>(ad-32));
else if(ad<=47) ye=0xba,shu=(0x80>>(ad-40));
else if(ad<=55) ye=0xb9,shu=(0x80>>(ad-48));
else if(ad<=63) ye=0xb8,shu=(0x80>>(ad-56));
if(lie==a)
{
d1=shu;
d2=ye;
}
if(lie!=a)
{
d3=shu;
d4=ye;
if(ye==d2)
{
if(shu>d1)
{
d5=shu;
d5=d5>>1;
while(d5!=d1)
{d5=d5>>1;
shu=shu|(shu>>1);}
}
if(shu<d1)
{
d5=shu;
d5=d5<<1;
while(d5!=d1)
{d5=d5<<1;shu=shu|(shu<<1);}
}
}
if(ye<d2)
{
for(q=0;q<7;q++)
{
shu=shu|(shu<<1);
}
xieshuju(b,c);
ye++;
while(ye<d2) {shu=0xff,xieshuju(b,c),ye++;}
if(ye==d2){
shu=0x01;
if(shu<d1)
{
d5=shu;
d5=d5<<1;
while(d5!=d1)
{d5=d5<<1;shu=shu|(shu<<1);}
}
}
}
if(ye>d2)
{
for(q=0;q<7;q++)
{
shu=shu|(shu>>1);
}
xieshuju(b,c);
ye--;
while(ye>d2) {shu=0xff,xieshuju(b,c),ye--;}
if(ye==d2){
shu=0x80;
if(shu>d1)
{
d5=shu;
d5=d5>>1;
while(d5!=d1)
{d5=d5>>1;shu=shu|(shu>>1);}
}
}
}
}
if(lie!=a)
{
d1=d3;
d2=d4;
}
xieshuju(b,c);
delay(200);
}
/*****主函数****/
void main()
{ bit k1;
uchar *ds18b20_rom;
uchar k,yy,ll,k2;
uint a=2,d=1,i,j,b,jisuan;
lcd_init();
delay(300);
/*while(1)
{
P2=0x00;
while(1);
delay(300);
}*/
r=0xbb;
goto abc;
goto bbb;
aaa:
while(sure==0)
{
if(a==1) goto wendu1;
if(a==2) goto donghua;
if(a==3) goto shige;
if(a==4) goto set;
}
eee:
r=0xb7;
r=0xbb;
while(xiayi==1)
{
goto aaa;
}
qinglin();
while(xiayi==0);
a++;
if(a==5) a=1;
if(a==1) goto bbb;
if(a==2) goto ccc;
if(a==3) goto fff;
if(a==4) goto mmm;
bbb:
r=0xb7;
while(r!=0xbb)
{
qinglin();
r++;
abc:
caidanhanshu(13);
delay(100);
}
goto aaa;
ccc:
r=0xb7;
while(r!=0xbb)
{
qinglin();
r++;
caidanhanshu(21);
delay(100);
}
goto aaa;
fff:
r=0xb7;
while(r!=0xbb)
{
qinglin();
r++;
caidanhanshu(39);
delay(100);
}
goto aaa;
mmm:
r=0xb7;
while(r!=0xbb)
{
qinglin();
r++;
xianshi(r,0x60,13,1,0);
xianshi(r,0x68,14,1,0);
xianshi(r,0x70,15,1,0);
xianshi(r,0x78,16,1,0);
xianshi(r,0x40,11,0,1);
xianshi(r,0x48,12,0,1);
xianshi(r,0x50,96,0,1);
xianshi(r,0x58,97,0,1);
delay(100);
}
goto aaa;
donghua:
qingpin();
xianshi(0xb9,0x58,21,0,1);
xianshi(0xb9,0x60,22,0,1);
xianshi(0xbc,0x58,23,0,1);
xianshi(0xbc,0x60,24,0,1);
for(j=0;j<=1;j++)
{
i=0;
for(lie=0x55;lie<=0x78;lie++)
{
for(ye=0xb9;ye<=0xbf;ye++)
{
if(j==0) shu=tu1[i];
if(j==1) shu=tu2[i];
xieshuju(1,0);
i++;
}
}
if(fanhui==0) goto hhh;
delay(300);
if(fanhui==0) goto hhh;
}
goto donghua;
hhh:
qingpin();
goto ccc;
wendu1:
qingpin();
goto bb;
/* r=0xb7;
while(r!=0xbb)
{
qinglin();
r++;
xianshi(r,0x60,98,1,0);
xianshi(r,0x68,99,1,0);
xianshi(r,0x70,100,1,0);
xianshi(r,0x78,101,1,0);
xianshi(r,0x40,13,0,1);
xianshi(r,0x48,14,0,1);
xianshi(r,0x50,15,0,1);
xianshi(r,0x58,16,0,1);
delay(100);
}*/
wendu:
if(fanhui==0) {qingpin();goto bbb;}
while(sure==0)
{
if(d==1) goto badianweudu;
if(d==2) goto tuxingxianshi;
}
ee:
r=0xb7;
r=0xbb;
while(xiayi==1)
{
goto wendu;
}
qinglin();
while(xiayi==0);
d++;
if(d==3) d=1;
if(d==1) goto bb;
if(d==2) goto cc;
bb:
r=0xb7;
while(r!=0xbb)
{
qinglin();
r++;
xianshi(r,0x60,98,1,0);
xianshi(r,0x68,99,1,0);
xianshi(r,0x70,100,1,0);
xianshi(r,0x78,101,1,0);
xianshi(r,0x40,13,0,1);
xianshi(r,0x48,14,0,1);
xianshi(r,0x50,15,0,1);
xianshi(r,0x58,16,0,1);
delay(100);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -