烟台大学毕业论文(设计)
#define jump_ROM 0xCC #define start 0x44
#define read_EEROM 0xBE
sbit DQ = P2^3; //DS18B20数据口
unsigned char TMPH,TMPL;
/******************************************************************** * 名称 : delay()
* 功能 : 延时,延时时间大概为140US。 * 输入 : 无 * 输出 : 无
***********************************************************************/
void delay_1() {
int i,j;
for(i=0; i<=10; i++) for(j=0; j<=2; j++) ; }
/******************************************************************** * 名称 : delay() * 功能 : 延时函数 * 输入 : 无 * 输出 : 无
***********************************************************************/
void delay(uint N) {
int i;
for(i=0; i /******************************************************************** * 名称 : Delay_1ms() * 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无 ********************************************************************* 21 烟台大学毕业论文(设计) **/ void Delay_1ms(uint i)//1ms延时 { uchar x,j; for(j=0;j for(x=0;x<=148;x++); } /******************************************************************** * 名称 : Reset() * 功能 : 复位DS18B20 * 输入 : 无 * 输出 : 无 ***********************************************************************/ uchar Reset(void) { uchar deceive_ready; DQ = 0; delay(29); DQ = 1; delay(3); deceive_ready = DQ; delay(25); return(deceive_ready); } /******************************************************************** * 名称 : read_bit() * 功能 : 从DS18B20读一个位值 * 输入 : 无 * 输出 : 从DS18B20读出的一个位值 ***********************************************************************/ uchar read_bit(void) { uchar i; DQ = 0; DQ = 1; for(i=0; i<3; i++); return(DQ); } /******************************************************************** * 名称 : write_bit() 22 烟台大学毕业论文(设计) * 功能 : 向DS18B20写一位 * 输入 : bitval(要对DS18B20写入的位值) * 输出 : 无 ***********************************************************************/ void write_bit(uchar bitval) { DQ=0;if(bitval==1) DQ=1; delay(5); DQ=1; } /******************************************************************** * 名称 : read_byte() * 功能 : 从DS18B20读一个字节 * 输入 : 无 * 输出 : 从DS18B20读到的值 ***********************************************************************/ uchar read_byte(void) { uchar i,m,receive_data; m = 1; receive_data = 0; for(i=0; i<8; i++) { if(read_bit()) { receive_data = receive_data + (m << i); } delay(6); } return(receive_data); } /******************************************************************** * 名称 : write_byte() * 功能 : 向DS18B20写一个字节 * 输入 : val(要对DS18B20写入的命令值) * 输出 : 无 ***********************************************************************/ void write_byte(uchar val) 23 烟台大学毕业论文(设计) { uchar i,temp; for(i=0; i<8; i++) { temp = val >> i; temp = temp & 0x01; write_bit(temp); delay(5); } } /******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void main() { uchar lcd_string[2][33]={0}; uint temp,tmep1; long delay_time = 5; init_adc(); L1602_init(); while(1) { Reset(); write_byte(jump_ROM); write_byte(start); Reset(); write_byte(jump_ROM); write_byte(read_EEROM); TMPL = read_byte(); TMPH = read_byte(); temp = TMPL / 16 + TMPH * 16; lcd_string[0][0] = temp/10 + 0x30; //if (lcd_string[0][0]>=1) //L1602_string(1,1,\ lcd_string[0][1] = temp + 0x30; if (temp > 30) P3 &= ~(0x01 << 2); else P3 |= (0x01 << 2); if (temp < 27) P3 &= ~(0x01 << 3); 24