delayNOP();
i=(bit)(P0&0x80); en=0;
return(i); }
void writecmd(unsigned char cmd) writecmd(0x01); delay2(5); }
void lcdpos(uchar X,uchar Y) { uchar pos; if(X==0) {
{
while(busy()); rs=0; rw=0; en=0; _nop_(); _nop_(); P0=cmd; delayNOP(); en=1;
delayNOP(); en=0; }
void writedat(unsigned char dat) {
while(busy()); rs=1; rw=0; en=0; _nop_(); _nop_(); P0=dat; delayNOP(); en=1;
delayNOP(); en=0; }
void init() {
psb=1; delay2(3);
writecmd(0x34); delay2(10);
writecmd(0x30); delay2(10);
writecmd(0x0c); delay2(10);
X=0x80; }
if(X==1) {
X=0X90; }
if(X==2) {
X=0X88; }
if(X==3) {
X=0x98; }
pos=X+Y;
writecmd(pos); }
void disphoto(uchar *photo) //图片显示 {
unsigned char i,j;
writecmd(0x34); //关闭绘图
for(i=0;i<32;i++) {
writecmd(0x80+i); //垂直坐标
writecmd(0x80); //平坐标
for(j=0;j<16;j++) //一行可显示16个字符 {
writedat(*photo++); delay2(1); }
水8
} for(i=0;i<6;i++) //测值: 共 for(i=0;i<32;i++) { writecmd(0x80+i); writecmd(0x88); for(j=0;j<16;j++) { writedat(*photo++); delay2(1); } } writecmd(0x36); } void display_jiemian() { uchar i; lcdpos(0,0); for(i=0;i<17;i++) //量程: 共有6个字符 { writedat(dis1[i]); delay1(1); } lcdpos(1,0); for(i=0;i<14;i++) //量程: 共有6个字符 { writedat(dis2[i]); delay1(1); } lcdpos(2,0); for(i=0;i<10;i++) //所选量程:共有10个字符 { writedat(dis3[i]); delay1(1); } lcdpos(3,0);
有6个字符 { writedat(dis4[i]); delay1(1); } } void clear() { writecmd(0x34); delay1(5); writecmd(0x30); delay1(5); writecmd(0x01); delay1(5); } void displayB() { if(aaa<400) { aaa=0; } aaa=aaa*1.0146; aaa=aaa/4.0; aaa_h=aaa/100.00; writecmd(0x9B); writedat('U'); writedat(':'); writedat(table[(aaa_h/100)]); writedat('.'); writedat(table[(aaa_h/10)]); writedat(table[(aaa/100)]); writedat(table[(aaa/10)]); writedat(table[(aaa/1)]); writecmd(0xdf); writecmd(0x02); delay1(50); } void displayD() { if(aaa<400) { aaa=0;
9
}
aaa=aaa*1.1012; aaa=aaa/4.0;
aaa_h=aaa/100.00; writecmd(0x9B); writedat('U'); writedat(':'); writedat(' ' );
writedat(table[(aaa_h/10)]); writedat('.');
writedat(table[(aaa_h)]); writedat(table[(aaa/10)]); writedat(table[aaa]); writecmd(0xdf); writecmd(0x02); delay1(50); }
void displayA() {
if(aaa<400) {
aaa=0; }
aaa=aaa*1.02; aaa=aaa/4.0;
aaa_h=aaa/100.00; writecmd(0x9B); writedat('U'); writedat(':'); writedat(' ');
writedat(table[(aaa_h/10)]); writedat('.');
writedat(table[(aaa_h/1)]); writedat(table[(aaa/10)]); writedat(table[(aaa/1)]); writecmd(0xdf); writecmd(0x02); delay1(50); }
void displayC() {
if(aaa<1300) {
aaa=0;
}
aaa=aaa*1.0638; aaa=aaa/4; aaa_h=aaa/100; writecmd(0x9B); writedat('U'); writedat(':'); writedat(' ');
writedat(table[(aaa_h/10)]); writedat(table[(aaa_h)]); writedat('.');
writedat(table[(aaa/10)]); writedat(table[(aaa/1)]); writecmd(0xdf); writecmd(0x02); delay1(50); }
void display1() {
uchar a,b; a=0xA1; b=0xE6; ds_getT();
writecmd(0x01); lcdpos(0,0);
for(i=0;i<10;i++) {
writedat(dis5[i]); delay1(1); }
writecmd(0x90); writedat('T'); writedat(':'); writedat(' ' );
writedat(table[(TemH/10)]); writedat(table[TemH]); writedat('.');
writedat(table[(count/10)]); writedat(table[count]); writedat(a); writedat(b); if(TemH>=30) {
lcdpos(3,0);
10
for(i=0;i<17;i++) {
writedat(dis9[i]); delay1(1); } }
if(TemH<=30&&TemH>=20) {
lcdpos(3,0); for(i=0;i<17;i++) {
writedat(dis10[i]); delay1(1); } }
if(TemH<=20) {
lcdpos(3,0); for(i=0;i<17;i++) {
writedat(dis11[i]); delay1(1); } }
writecmd(0xdf); writecmd(0x02); delay1(500); }
void display() {
lcdpos(3,3);
for(i=0;i<8;i++) {
writedat(dis8[i]); delay1(1); } }
/*ds18b20.h*/
#define BUSY1 (DQ1==0) 义busy信号
//定
sbit DQ1=P2^5; //定义18B20单总线引脚
void ds_reset_1(void); //声明18B20复位函数
void wr_ds18_1(char dat); //声明18B20写入函数
void time_delay(unsigned char time);//声明延时函数
int get_temp_1(void); //声明18B20读入温度函数
void delay(unsigned int x); //声明延时函数
void read_ROM(void); //声明18B20读ROM函数
int get_temp_d(void); //声明获取温度函数
void ds_init(void); //声明18B20初始化函数
void ds_getT(void); //声明18B20获得温度显示值函数
/****************以下定义各种变量********************/
unsigned char ResultSignal; int
ResultTemperatureLH,ResultTemperatureLL,ResultTemperatureH; unsigned char ROM[8]; unsigned char idata TMP; unsigned char idata TMP_d; unsigned char f;
unsigned char rd_ds18_1();
unsigned int TemH,TemL; //温度的整数部分和小数部分
unsigned int count; //定义小数计算部分
/***********************延时程序=a*1ms**************************************/
void delay111(unsigned char a) {
unsigned char i; while(a-- !=0)
11
{
/* reset ds18b20 for(i=0;i<80;i++); } }
void ds_init(void) {
unsigned int k=0; ds_reset_1();
ds_reset_1(); //reset wr_ds18_1(0xcc); //skip rom
_nop_();
wr_ds18_1(0x7f); ds_reset_1(); wr_ds18_1(0xcc); _nop_();
wr_ds18_1(0x44);
for(k=0;k<11000;k++)
time_delay(255); ds_reset_1(); }
void ds_getT(void) {
wr_ds18_1(0xcc); wr_ds18_1(0xbe); TemH=get_temp_1(); TemL=get_temp_d(); TemH&=0x00ff; TemL&=0x00ff;
count=(TemH*256+TemL)*6.25; }
/***************延时程序,单位us,大于10us*************/
void time_delay(unsigned char time) {
time=time-10; time=time/6;
while(time!=0)time--; }
/*****************************************************/
*/
/*****************************************************/
void ds_reset_1(void) {
unsigned char idata count=0; DQ1=0;
time_delay(240); time_delay(240); DQ1=1; return; }
void check_pre_1(void) {
while(DQ1); while(~DQ1);
time_delay(30); }
void read_ROM(void) {
int n;
ds_reset_1(); check_pre_1(); wr_ds18_1(0x33);
for(n=0;n<8;n++){ROM[n]=rd_ds18_1();} }
/*****************************************************/
/* Read a bit from 1820 位读取*/
/*****************************************************/ bit tmrbit_1(void) {
idata char i=0;
12