湖北文理学院理工学院 附录1:程序
{ } }
void tempchange(void) //DS18B20开始获取温度并转换 {
dsreset(); delay(1);
tempwritebyte(0xcc); tempwritebyte(0x44); }
uint get_temp() //获取温度 {
uchar a,b; dsreset();
testb=dat&0x01; dat=dat>>1; if(testb)//写1 { } else { }
ds=0; //写0 i=8;while(i>0)i--; ds=1; i++;i++; ds=0; i++;i++; ds=1;
i=8;while(i>0)i--;
湖北文理学院理工学院 附录1:程序
delay(1);
tempwritebyte(0xcc); tempwritebyte(0xbe);
a=tempread(); //读高8位 b=tempread(); //读低8位 temp=b;
temp<<=8; //两个字节组合成1个字节 temp=temp|a; f_temp=temp*0.0625; temp=f_temp*10+0.5;
f_temp=f_temp+0.05; //温度在寄存器中为12位,分辨率为0.0625^ return temp; }
void display(uchar addr,uchar dat) {
write_com(0x80+0x40+addr); write_data(0x30+dat); delay(5); }
void dis_temp(uint t) {
uchar i; i=t/100; display(10,i); i=t0/10; display(11,i); i=t0; display(13,i); }
void init()//初始化程序
湖北文理学院理工学院 附录1:程序
{
uchar num; flag=1; lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); for(num=0;num<15;num++)
{ }
write_data(table[num]); delay(5);
write_com(0x80+0x40); for(num=0;num<8;num++)
{ }
write_data(table1[num]); delay(5);
write_com(0x80+0x40+10); for(num=0;num<6;num++) { } }
//地址、数据发送子程序
void write_1302( uchar addr,uchar dat ) {
write_data(table2[num]); delay(10);
湖北文理学院理工学院 附录1:程序
uchar i,temp;
CE=0; //CE 引脚为低, 数据传送中止 SCLK=0; //清零时钟总线
CE = 1; //CE 引脚为高,逻辑控制有效 //发送地址
for ( i=8; i>0; i-- ) //循环8次移位 {
SCLK = 0; temp = addr;
DIO = (bit)(temp&0x01); // addr >>= 1; // SCLK = 1; }
//发送数据
for ( i=8; i>0; i-- ) {
SCLK = 0; temp = dat;
DIO = (bit)(temp&0x01); dat >>= 1; SCLK = 1; }
CE = 0; }
//数据读取子程序
uchar Read1302 ( uchar addr ) {
unsigned char i,temp,dat1,dat2; CE=0; SCLK=0;
每次传输低字节 右移一位