王勇毕业论文毕业设计(论文)-基于单片机的热水控制器设计(5)

2019-05-17 15:30

}

void write_byte(char val) //向 1-WIRE 总线上写一个字节 {

byte i;

for (i=8; i>0; i--) // 写一个字节,每次写一位 {

DQ = 0; DQ = val&0x01; delay(5); DQ = 1;

val=val/2; //用除法实现移位 } delay(5); }

char Read_Temperature(void) //读取温度 {

byte temp[2]; float x;

ow_reset(); //复位DS18B20 write_byte(0xCC); //跳过 ROM

write_byte(0xBE); //写入读存储器指令 temp[1]=read_byte(); //读入数据 temp[0]=read_byte();

x= temp[1]*0x112 + temp[0];

x= x*0.0625; //将数值转换为摄氏温度

return x; }

4.2.4 系统的程序源代码

系统的C51 源程序如下:

#include #include

sbit DQ =P1^0; //DS18B20端口

sbit HUP=P1^1; //最高温度增键 sbit HDOWN=P1^2; //最高温度减键 sbit LUP=P1^3; //最低温度增建 sbit LDOWN=P1^4; //最低温度减键

sbit BAOJING=P1^5; //报警输出 sbit OUT=P1^6; //控制加热棒

sbit LED1=P2^5; //第一位数码管位控制端

sbit LED2=P2^4; //第二位数码管位控制端 sbit LED3=P2^3; //第三位数码管位控制端 sbit LED4=P2^2; //第四位数码管位控制端 sbit LED5=P2^1; //第五位数码管位控制端 sbit LED6=P2^0; //第六位数码管位控制端

unsigned char code tab_LED[10]={0x0C0,0x0F9,0x0A4,0x0B0,0x99,0x92,0x82,0xF8,0x80,0x90};

//显示的段码,分别代表0-9

typedef unsigned char byte; typedef unsigned int word;

//****************************18b20驱动程序*********************************

void delay(word useconds) //延时子函数 {

for(;useconds>0;useconds--); }

byte ow_reset(void) //复位DS18B20 {

byte presence;

DQ = 0; //送出低电平 delay(29); // 延时 480us DQ = 1; // 送出高电平

delay(3); // 等到DS18B20存在脉冲 presence = DQ; // 读存在脉冲(低电平有效) delay(25); //延时 return(presence); }

byte read_byte(void) //从 1-wire 总线上读取一个字节 {

byte i;

byte value = 0; for (i=8;i>0;i--) {

value>>=1;

DQ = 0; // 输出一脉冲 DQ = 1; delay(1); if(DQ)

value|=0x80; delay(6); }

return(value); }

void write_byte(char val) //向 1-WIRE 总线上写一个字节 {

byte i;

for (i=8; i>0; i--) // 写一个字节,每次写一位 {

DQ = 0; DQ = val&0x01; delay(5); DQ = 1;

val=val/2; //用除法实现移位 }

delay(5); }

//************** Read_Temperature完成一次采样过程,返回温度值*****************

char Read_Temperature(void) //读取温度 {

byte temp[2]; float x;

ow_reset(); //复位DS18B20 write_byte(0xCC); //跳过 ROM

write_byte(0xBE); //写入读存储器指令 temp[1]=read_byte(); //读入数据 temp[0]=read_byte();

x= temp[1]*0x112 + temp[0];

x= x*0.0625; //将数值转换为摄氏温度

return x; }

//****************************主函数****************************************** main() {

byte n=20,h=50,l=30; //定义温度值、高低限,并置初值 byte i;

BAOJING=0; //初始化 OUT=0; LED1=1; LED2=1; LED3=1; LED4=1; LED5=1; LED6=1;

while(1) {

if(HUP==0) //如果温度高限增加键按下 {

delay(10000); //按键消抖 if(HUP==0) h++; }

else if(HDOWN==0) //如果温度高限减小键按下 {

delay(10000); //按键消抖 if(HDOWN==0) h--; }

else if(LUP==0) //如果温度低限增加键按下 {

delay(10000); //按键消抖 if(LUP==0) l++; }

else if(LDOWN==0) //如果温度低限减小键按下 {

delay(10000); // if(LDOWN==0) l--; }

else //

{ n=Read_Temperature(); // if (n>h+3)

{BAOJING=1; // OUT=0;} else if(n

OUT=1; // }

i=h/10; // P0=tab_LED[i]; // LED1=0; // delay(1000); // LED1=1;

i=h; // P0=tab_LED[i]; // LED2=0; // delay(1000); // LED2=1;

i=l/10; // P0=tab_LED[i]; // LED3=0; // delay(1000); // LED3=1;

i=l; // P0=tab_LED[i]; // LED4=0; // delay(1000); // LED4=1;

i=n/10; //按键消抖 如果没有按键按下 读取温度值 报警并停止加热 启动加热 取第一位显示数据

查显示段码表,将第一位段码送P0口选中第一位 调用延时 取第二位显示数据

查显示段码表,将第二位段码送P0口选中第二位 调用延时 取第三位显示数据

查显示段码表,将第三位段码送P0口选中第三位 调用延时 取第四位显示数据

查显示段码表,将第四位段码送P0口 选中第四位 调用延时 取第五位显示数据

P0=tab_LED[i]; //查显示段码表,将第五位段码送P0口 LED5=0; //选中第五位 delay(1000); //调用延时 LED5=1;

i=n; //取第六位显示数据

P0=tab_LED[i]; //查显示段码表,将第六位段码送P0口 LED6=0; //选中第六位 delay(1000); //调用延时 LED6=1; } }

//************************主程序结束********************************


王勇毕业论文毕业设计(论文)-基于单片机的热水控制器设计(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:国内地下物流系统的研究及其进展

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: