clockinput(dat); crst=0;cclk=1;
}
//初始化ds18b20 void rst18b20(void) { dq=1; delay(8); dq=0; delay(80); dq=1; delay(35);
}
//read one char from ds18b20 uchar read18b20(void) { uchar i,dat=0; for(i=0;i<=7;i++) { dq=0; dat>>=1; dq=1; if(dq==1) dat|=0x80; delay(4);
}
return(dat);
}
//write one char to ds18b20 void write18b20(uchar dat)
31
31
{ uchar i; for(i=0;i<8;i++) { dq=0; dq=dat&0x01; delay(5); dq=1; dat>>=1;
}
}
//read temperature from ds18b20 unsigned int readtemperature(void) { unsigned int t=0;//16 bit uchar t0=0,t1=0; float temp=0;//32 bit rst18b20(); write18b20(0xcc); write18b20(0x44); rst18b20(); write18b20(0xcc); write18b20(0xbe); t0=read18b20(); t1=read18b20(); t=t1; t<<=8;
t=t|t0; // temp=t*0.0625; // t=temp*10+0.5;
32
32
return(t);
}
/*******************************************************/ /* 液晶程序*/
/*******************************************************/
/*************************串行发送一字节数据 ************************/ void SendByte(unsigned char dat) { unsigned char i;
for(i=0;i<8;i++)
{
CLK=0; if(dat&0x80) SID=1;
else
SID=0;
delay(10); CLK=1;
delay(10);
dat=dat<<1; } }
/*****************************写控制命令*********************************/ void SendCMD(unsigned char dat) { CS = 1;
SendByte(0xF8);//1111,1000 RW=0,RS=0同步标志 SendByte(dat&0xF0);//高四位
33
33
34
SendByte((dat&0x0F)<<4);//低四位 CS = 0;
delay(10);
}
/****************************
写
显
示
数
据
或
单
字
节
字
符
****************************/ void SendDat(unsigned char dat) { CS = 1;
SendByte(0xFA);//1111,1010 RW=0,RS=1 SendByte(dat&0xF0);//高四位 SendByte((dat&0x0F)<<4);//低四位 CS=0;
delay(10);
}
/***************写汉字到LCD指定的位置;x_add显示RAM的地址;dat1/dat2显示汉字编码**********/
void display(unsigned char add,unsigned char dat1,unsigned char dat2) {
SendCMD(add);//1xxx,xxxx 设定DDRAM 7位地址xxx,xxxx到地址计数器AC SendDat(dat1); SendDat(dat2); }
/*********************初始化************************/ void init_lcd(void) { delay(10);
SendCMD(0x30);//功能设置, 一次送8位数据,基本指令集
SendCMD(0x0C);//0000,1100 整体显示,游标off,游标位置off SendCMD(0x01);//0000,0001 清DDRAM
34
35
SendCMD(0x02);//0000,0010 DDRAM地址归位
SendCMD(0x80);//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC //SendCMD(0x04);//点设定,显示字符/光标从左到右移位,DDRAM地址加一 //SendCMD(0x0F);//显示设定,开显示,显示光标,当前显示位反白闪动 // SendCMD(0x34);//功能设置,扩充指令集 // SendCMD(0x08);//进入睡眠模式 // SendCMD(0x0c);//脱离睡眠模式
SendCMD(0x81);//1000,0001 设定DDRAM 7位地址000,0001到地址计数器AC SendDat(0x33); SendDat(0x42); SendDat(0x43); SendDat(0x44); SendCMD(0x00);//while(1);
/*******************初始化显示*****************/
{
delay(10);
display(0x82,0xc4,0xea);//年 display(0x84,0xd4,0xc2);//月 display(0x86,0xc8,0xd5);//日 display(0x93,0xca,0xb1);//时 display(0x95,0xb7,0xd6);//分 display(0x97,0xc3,0xeb);//秒 display(0x90,0xd6,0xdc);//周 /* */
delay(10);
} }
void clear_screen(void) {
35