#include <reg51.h>
#include <intrins.h>
#include <math.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P3^5; /*êy¾Y\Ö¸áî Ñ¡Ôñ*/
sbit rw=P3^6; /*¶á\D′ Ñ¡Ôñ*/
sbit e=P3^4; /*¶á\D′ê1Äü*/
sbit ds=P2^2; //18B20DÅoŽÅ
sbit PSB = P3^7;
sbit WE = P2^6;
sbit DU = P2^7;
uint temp;
float ftemp;
uchar code table[]="0123456789.¶è";
void writecom(uchar com);
void writedat(uchar dat);
void initinal(void);
//12MHZ¾§Õñ Ñóê±50΢Ãë
void delay50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
void dsreset() // ds18b203õê¼»ˉoˉêy
{
uint i;
ds=0; //à-μí×üÏß¿a꼸′λ
i=103;
while(i>0)i--;
ds=1;//êí·Å×üÏß
i=4;
while(i>0)i--;
// ê¡è¥áËμè′yD¾Æ¬·μ»Øó|′eμÄ1y3ì ¡£¡£¡£¡£¡£¡£
}
bit readbit(void) //ds18b20¶áè¡ò»¸ö¶t½øÖÆÎ»£¬2ÎÕÕê±Dòí¼
{
uint i;
bit dat;
ds=0;i++;
ds=1;i++,i++;
dat=ds;
i=8;while(i>0)i--;
return(dat);
}
uchar tempread(void) //ds18b20¶áè¡ò»¸ö×Ö½úμÄêy¾Y
{
uchar i,j,dat;
dat=0;
for(i=0;i<8;i++)
{
j=readbit();
dat=(j<<7)|(dat>>1); //
}
return(dat);
}
void tempwrite(uchar dat) //ds18b20D′èë×Ö½úêy¾Y
{
uint i;uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb==1) // D′1
{
ds=0; // à-μí×üÏßòÔ¿aê¼ò»¸öD′ê±Dò
i++;i++;
ds=1; // êí·Å×üÏß
i=8;while(i>0)i--;
}
else // D′0
{
ds=0;
i=8;while(i>0)i--;
ds=1;
i++;i++;
}
}
}
void tempchang(void) //ζè×a»»
{
dsreset();
delay50us(20);
tempwrite(0xcc); //
tempwrite(0x44); //
}
uint gettemp() // »ñè¡Î¶è
{
uchar a,b;
dsreset();
delay50us(2000); //Ñóê±100oáÃëÏû3y¿Ö2à85¶è
tempwrite(0xcc); //
tempwrite(0xbe); //
a=tempread(); //
b=tempread(); //
temp=b;
temp<<=8; //////
temp=temp|a;
ftemp=temp*0.0625; //
temp=ftemp*10+0.5; //
ftemp=ftemp+0.05; //
return temp; //
}
/*------------------¼ì2éÃ|λ-----------------------------*/
void chkbusy()
{
rs=0;
rw=1;
e=1;
P0=0xff ;
while((P0&0x80)==0x80);
e=0;
}
/*************¶áêy¾Y************/
uchar read()
{
uchar shuju;
chkbusy();
P0=0xff;
rs=1;
rw=1;
e=0;
delay50us(1);
e=1;
shuju=P0;
// delay(5);
e=0;
return(shuju);
}
//Ôö¼ó»-μã×ó3ìDò
void DrawPoint(uchar X,uchar Y,uchar Color)
{
uchar Row,Tier,Tier_bit ;
uchar ReadOldH,ReadOldL ;
//writecom(0x34); //à©Õ1Ö¸áî¿a
writecom(0x36); //à©Õ1Ö¸áî¼ó»æí¼Ä£¿é
Tier=X>>4 ;
Tier_bit=X&0x0f ;
if(Y<32)
{
Row=Y ;
}
else
{
Row=Y-32 ;
Tier+=8 ;
}
writecom(Row+0x80);
writecom(Tier+0x80);
read();
ReadOldH=read();
ReadOldL=read();
writecom(Row+0x80);
writecom(Tier+0x80);
if(Tier_bit<8)
{
switch(Color)
{
case 0 :
ReadOldH&=(~(0x01<<(7-Tier_bit)));
break ;
case 1 :
ReadOldH|=(0x01<<(7-Tier_bit));
break ;
case 2 :
ReadOldH^=(0x01<<(7-Tier_bit));
break ;
default :
break ;
}
writedat(ReadOldH);
writedat(ReadOldL);
}
else
{
switch(Color)
{
case 0 :
ReadOldL&=(~(0x01<<(15-Tier_bit)));
break ;
case 1 :
ReadOldL|=(0x01<<(15-Tier_bit));
break ;
case 2 :
ReadOldL^=(0x01<<(15-Tier_bit));
break ;
default :
break ;
}
writedat(ReadOldH);
writedat(ReadOldL);
}
writecom(0x30);
}
//D′Ãüáî
void writecom(uchar com)
{
chkbusy();
rw=0;
rs=0;
delay50us(1);
P0=com;
e=1;
delay50us(10);
e=0;
delay50us(10);
}
//D′êy¾Y
void writedat(uchar dat)
{
chkbusy();
rw=0;
rs=1;
delay50us(1);
P0=dat;
e=1;
delay50us(10);
e=0;
delay50us(10);
}
//3õê¼»ˉ
void initinal(void)
{
delay50us(2);
writecom(0x30);
delay50us(4);
writecom(0x30);
delay50us(4);
writecom(0x0e);
delay50us(4);
writecom(0x01);
delay50us(240);
writecom(0x06);
delay50us(10);
}
void clrscreen()
{
writecom(0x01);
delay50us(10);
}
//------------------ÇåÕû¸öGDRAM¿Õ¼ä----------------------------
void clrgdram()
{
unsigned char x,y ;
for(y=0;y<64;y++)
for(x=0;x<16;x++)
{
writecom(0x34);
writecom(y+0x80);
//DDμØÖ·
writecom(x+0x80);
//áDμØÖ·
writecom(0x30);
writedat(0x00);
writedat(0x00);
}
}
//------------------------------------------------------------
//Ö÷oˉêy
void main()
{
uchar i,j,e,colour=1;
// uint a ;
rw=0;
WE = DU = 0;
initinal();
clrgdram();
// delay50us(2);
clrscreen();
// writecom(0x34);
while(1)
{
uint a,b,c,d;
DrawPoint(18,6,colour);
DrawPoint(18,22,colour);
DrawPoint(18,38,colour);
DrawPoint(18,54,colour);
for(j=17;j<128;j++)
{
DrawPoint(17,j-17,colour);
DrawPoint(j,63,colour);
writecom(0x80);
writedat(table[6]);
writedat(table[7]);
writecom(0x90);
writedat(table[5]);
writedat(table[1]);
writecom(0x88);
writedat(table[3]);
writedat(table[5]);
writecom(0x98);
writedat(table[1]);
writedat(table[9]);
}
for(i=17;i<128;i++)
{
tempchang();
a=gettemp();
delay50us(1000);
e=73-a/10;
DrawPoint(i,e,colour);
b=a/100;
c=a%100/10;
d=a%100%10;
writecom(0x83);
writedat(table[b]);
delay50us(1);
writedat(table[c]);
delay50us(1);
writedat(table[10]);
delay50us(1);
writedat(table[d]);
delay50us(1);
writedat(table[11]);
writedat(table[12]);
delay50us(4);
writecom(0x83);
}
clrgdram();
/* writecom(0x36);
delay50us(5);
clrgdram();
clrscreen();
tempchang();
a=gettemp();
*/
}
}
|