【精品】粮仓多点温度控制系统的设计与实现毕业论文 下载本文

附录3 程序

#include

unsigned char time_flag = 0; unsigned char fuhao = 0;

*************************************************************************************** void delays(int us) { int s;

for ( s=0; s

void rst(void) { DQ = 1; delays(2); DQ = 0;

delays(30); 精确延时 480~960us DQ = 1; delays(8); }

void write(unsigned char ku) { int i=0;

for (i=0;i<8;i++) {

DQ=0;

DS18B20写函数

DS18B20初始化

用于DS18B20的延时函数

DQ =ku&0x01; delays(3); DQ=1; ku>>=1;

} }

void match_rom(unsigned char *rom) DS18B20匹配ROM函数 {

unsigned char i; rst();

初始化

write(0x55); for(i=8;i>0;i--) {

匹配ROM

write(*(rom+i-1)); } }

unsigned int read(void) {

int i=0;

unsigned int u=0;

DS18B20读函数,每次读16位

for (i=0;i<16;i++) {

DQ=0; u>>=1; DQ=1;

if(DQ) u|=0x8000; delays(4);

}

return (u); }

unsigned char read_temp(unsigned char *seria) {

unsigned char temperature ; unsigned int tp; unsigned int lsb; rst();

初始化 跳过RAM

读取对应温度值并转换函数

write(0xCC);

}

match_rom(seria); write(0x44); rst();

温度转换 再次初始化

write(0xCC);

match_rom(seria); 匹配ROM函数调用 write(0xBE); 读取存储器指令 tp=read();

读取温度值

判断正负数

if((tp&0xf800)==0xf800) {

fushu=1 ;

tp=~tp+1 ;

temperature=lsb100; lsb=(unsigned int)(tp*6.25); dian=lsb0;

取小数部分

else

{

fushu=0;

lsb=(unsigned int)(tp*6.25);

temperature=lsb100; dian=lsb0;

}

return(temperature); }

void display_temp(unsigned char dat) {

P2 = 0x8f; P0 = ~table[ch]; delay1ms(5); P2 = 0x4f; if(fuhao == 0) { } else { }

delay1ms(5); P2 = 0x1f; P0 = ~table[dat10]; delay1ms(5); P2 = 0x2f;

P0 = ~table[dat];

P0 = ~0x40; P0 = ~0x00;