基于DS18B20的51单片机控制恒温箱.docxVIP

  • 3
  • 0
  • 约3.18千字
  • 约 10页
  • 2021-04-03 发布于天津
  • 举报
#in cludereg51.h sbit DQ =P1A4; 〃定义通信端口 sbit add」e=PMO;/显示地址锁存 sbit data_le=P1Al;/显示数据锁存 sbit led_key =卩1八3;//指示当前显示温度状态 亮表示为 按键灭表示为当前sbit light_ctrl = PM5; //AC 灯控制 un sig ned char in rup=0x00; char dis[6]; code un sig ned char table[16] = {0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0xff,0x00, 0xff,0x00,0xff,0xbf}; char key_data = 25; char temp_ now ; 〃延时函数 void delay (un sig ned int i) { while(i--); } 〃初始化函数 In it_DS18B20(void) { un sig ned char x=0; DQ = 1; //DQ 复位 delay(8); 〃稍做延时 DQ = 0; //单片机将DQ拉低 delay(80); 〃精确延时大于480us DQ = 1; //拉高总线 delay(14); x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay(20); } 〃读一个字节 ReadO neChar(void) { un sig ned char i=0; un sig ned char dat = 0; for (i=8;i0;i--) { DQ = 0; //给脉冲信号 dat=1; DQ = 1; //给脉冲信号 if(DQ) dat|=0x80; delay(4); } return(dat); } 〃写一个字节 Write On eChar( un sig ned char dat) { un sig ned char i=0; for (i=8; i0; i--) { DQ = 0; DQ = dat0x01; delay(5); DQ = 1; dat=1; } } 〃读取温度 ReadTemperature(void) { un sig ned char a=0; un sig ned char b=0; un sig ned int t=0; float tt=0.0; In it_DS18B20(); Write On eChar(0xCC); //跳过读序号列号的操作 WriteO neChar(0x44); // 启动温度转换 In it_DS18B20(); 前两个就是温度Write On eChar(0xCC); //跳过读序号列号的操作 前两个就是温度 WriteO neChar(0xBE); //读取温度寄存器等(共可读9个寄存器) a=Read On eChar(); b=Read On eChar(); t=b; t=8; t=t|a; tt=t*0.0625; 〃t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用 return(t); } void in t_it0(void) in terrupt 0 { delay(1500); light_ctrl = 0; key_data++; if(key_data125) key_data = 125; led_key = 1; in rup=0xff; } void in t_it1(void) in terrupt 2 { delay(1500); light_ctrl = 0; key_data--; if(key_data -50) key_data = -50; led_key = 1; in rup=0xff; } void display(void ) { un sig ned char n; un sig ned char m; m = 0x10; for(n=0;n4;n++) { P3 = P30x0f; P3 = P3|m; delay(1); P2 = table[dis[ n]]; m=m1; delay(500); } } void mai n() { un sig ned int a; int temp0; EX0 = 1; //允许外部中断0中断IT0 = 1; EX1 = 1; IT1 = 1; EA =1; //开总中断 led_key = 0; light_ctrl = 0; add_le = 0; data_le = 0; DQ = 0; while(1) { tempO=ReadTemperature();读温度 temp_now

文档评论(0)

1亿VIP精品文档

相关文档