历史上的今天
返回首页

历史上的今天

今天是:2024年11月28日(星期四)

正在发生

2019年11月28日 | 单片机智能热水器设计方案

2019-11-28 来源:51hei

这是我设计的智能热水器的控制方案基本功能:将水温控制在一个0到99摄氏度的温度上,同时还具有无水自动加水,水满停止加水以及延时和红外控制的功能。
里面包含:
1源代码
2器件清单
3系统仿真
单片机智能热水器仿真原理图如下
0.png?imageView2/2/w/550

单片机源程序如下:

//程序头函数

#include

//显示函数

#include

//宏定义

#define uint unsigned int 

#define uchar unsigned char


//管脚声明

sbit jdq= P1^0;        //加热继电器

sbit shui=P1^3;//加水继电器

sbit Feng = P2^6; //蜂鸣器

//按键

sbit Key1=P1^4;         //设置

sbit Key2=P1^5;         //加

sbit Key3=P1^6;         //减

sbit Key4=P1^7;         //确定          

sbit shang=P3^7;//上限

sbit xia=P3^6;//下限


sbit DQ=P2^2;                             //定义DS18B20总线I/O

signed char w,bj,bjx,bjd;                                     //温度值全局变量

uchar c;                                //温度值全局变量

bit bdata flag=0,flag_BJ,flag_off=1,que;

//时间计算

#define Imax 14000    //此处为晶振为11.0592时的取值, 

#define Imin 8000    //如用其它频率的晶振时,

#define Inum1 145    //要改变相应的取值。

#define Inum2 700 

#define Inum3 3000 

//解码变量

unsigned char Im[4]={0x00,0x00,0x00,0x00};


//全局变量

uchar f;

unsigned char m,Tc;

unsigned char IrOK;


//设置变量


uchar xx=29;

//下限

uchar sx=35;

//上限

int ds=0;

uchar Mode=0;


void delay(uint z)

{

        uint i,j;

        for(i=0;i        for(j=0;j<121;j++);

}

/**************************************************************************************************

**************************温度工作程序*************************************************************

**************************************************************************************************/

/*****延时子程序*****/

void Delay_DS18B20(int num)

{

  while(num--) ;

}

/*****初始化DS18B20*****/

void Init_DS18B20(void)

{

  unsigned char x=0;

  DQ = 1;         //DQ复位

  Delay_DS18B20(8);    //稍做延时

  DQ = 0;         //单片机将DQ拉低

  Delay_DS18B20(8);   //精确延时,大于480us

  DQ = 1;         //拉高总线

  Delay_DS18B20(14);

  x = DQ;           //稍做延时后,如果x=0则初始化成功,x=1则初始化失败

  Delay_DS18B20(20);

}

/*****读一个字节*****/

unsigned char ReadOneChar(void)

{

  unsigned char i=0;

  unsigned char dat = 0;

  for (i=8;i>0;i--)

  {

    DQ = 0;     // 给脉冲信号

    dat>>=1;

    DQ = 1;     // 给脉冲信号

    if(DQ)

    dat|=0x80;

    Delay_DS18B20(4);

  }

  return(dat);

}

/*****写一个字节*****/

void WriteOneChar(unsigned char dat)

{

  unsigned char i=0;

  for (i=8; i>0; i--)

  {

    DQ = 1;

    DQ = dat&0x10;

    Delay_DS18B20(5);

    DQ = 0;

    dat>>=1;

  }

}

/*****读取温度*****/

unsigned int ReadTemperature(void)

{

  unsigned char a=0;

  unsigned char b=0;

  unsigned int t=0;

  float tt=0;

  Init_DS18B20();

  WriteOneChar(0xC1);  //跳过读序号列号的操作

  WriteOneChar(0x44);  //启动温度转换

  Init_DS18B20();

  WriteOneChar(0xC1);  //跳过读序号列号的操作

  WriteOneChar(0xBE);  //读取温度寄存器

  a=ReadOneChar();     //读低8位

  b=ReadOneChar();    //读高8位

  t=b;

  t<<=8;

  t=t|a;

  tt=t*0.00625;

  t= tt*10+0.5;     //放大10倍输出并四舍五入

  return(t);

}



/*****读取温度*****/

void check_wendu(void)

{

        c=ReadTemperature()-5;                          //获取温度值并减去DS18B20的温漂误差

        w=c/10;                                                      //计算得到整数位

        if(w<0){w=0;}                                   //设置温度显示上限

        if(w>99){w=99;}                                   //设置温度显示上限    

}

/**************************************************************************************************

***************************************************************************************************

**************************************************************************************************/



/**************************************************************************************************

************************************按键工作程序***************************************************

**************************************************************************************************/

void Key()

{

        //模式选择

        if(Key1==0)

        {

                while(Key1==0);

                Feng=0;

                Mode++;

                Display_wd();

                if(Mode==4)

                {

                        Mode=1;

                        Feng=1;

                }

                   write_com(0x38);//屏幕初始化

                   write_com(0x0d);//打开显示 无光标 光标闪烁

                   write_com(0x06);//当读或写一个字符是指针后一一位

                switch(Mode)

                {

                        case 1:

                        {

                                write_com(0x80+15);//位置

                                Feng=1;

                                break;

                        }

                        case 2:

                        {

                                write_com(0x80+0x40+5);//位置

                                Feng=1;

                                break;

                        }

                        case 3:

                        {

                                write_com(0x80+0x40+14);//位置

                                Feng=1;

                                break;

                        }

                }

        }

        if(Key2==0&&Mode!=0)

        {

                while(Key2==0);

                Feng=0;

                switch(Mode)

                {

                        case 1:

                        {

                                if(ds<999)

                                {

                                        ds++;

                                        write_com(0x80+13);

                                        write_data('0'+ds/100);

                                        write_data('0'+ds/10%10);

                                        write_data('0'+ds%10);

                                        write_com(0x80+15);//位置

                                }

                                Feng=1;

推荐阅读

史海拾趣

Gennum ( Semtech )公司的发展小趣事
观察LED等输出设备的工作状态,判断电路是否按预期工作。
Electric Imp Inc.公司的发展小趣事

随着第一款产品的成功,Electric Imp Inc.公司开始积极拓展市场。公司与多家知名厂商建立了合作关系,将物联网设备管理平台应用于智能家居、工业自动化、智慧城市等领域。同时,公司还加强了与高校、科研机构的合作,共同研发新技术、新产品。这些努力使得公司在物联网领域的影响力逐渐扩大。

Cogent_Computer_Systems公司的发展小趣事

在电子行业的发展过程中,Cogent_Computer_Systems公司深知合作共赢的重要性。公司积极与上下游企业建立紧密的合作关系,共同推动产业升级。通过与供应商的深度合作,公司确保了原材料的稳定供应和质量保障;同时,与客户的紧密沟通也帮助公司更好地把握市场需求,推出更符合消费者期望的产品。这种合作共赢的模式不仅提升了公司的竞争力,也为整个电子行业的发展注入了新的活力。

CANOPUS公司的发展小趣事

CANOPUS的产品逐渐赢得了全球音乐爱好者的喜爱。为了更好地满足市场需求,公司开始积极拓展海外市场。通过与当地经销商合作、参加国际展览等方式,CANOPUS的产品逐渐打入国际市场,并在全球范围内建立了良好的声誉。

Cystech公司的发展小趣事

C-TECH Co., Ltd非常重视产品质量管理。公司自成立之初就引入了ISO 9001质量管理体系,并严格按照体系要求进行生产和管理。此外,公司还不断投入资源提升产品质量检测水平,确保每一款产品都能满足客户的需求和期望。正是凭借对品质的严格把控和持续改进,C-TECH Co., Ltd赢得了客户的广泛信任和好评。

CUI Devices公司的发展小趣事

在压电警报器领域,CUI Devices凭借其卓越的技术和产品质量,赢得了全球市场的广泛认可。根据最新的行业报告,CUI Devices在全球压电警报器市场中位列第一梯队,与SATEP、Adafruit Industries LLC和Challenge Electronics等核心厂商共同占据了可观的市场份额。这一成绩的取得,离不开公司多年来的技术创新和市场拓展。

问答坊 | AI 解惑

游逛车展心得

2008北京国际汽车展,这个世界级的汽车盛宴上,各种新车型、新能源、新技术、新概念集中亮相,展现在民众面前的必将是一个新的“竞”界。值得一看; 最便宜的路线: 坐地铁到天通苑站下车。出战有专车开往车展。 不过票价100,很难找到卖50 ...…

查看全部问答>

如何准备2011年的全国大学生电子设计竞赛

本帖最后由 paulhyde 于 2014-9-15 09:26 编辑 1,先确定好,你到底决心参加吗?你还有其它的事会阻绕你参加吗?人嘛!总得遇到几个岔路口,既然选择不错的路,就应该走到底!假如你实在无法确定,就掷硬币决定,正面参加,反面不参加(我替你决定, ...…

查看全部问答>

无线通信技术在起重机中的应用

摘 要:简要介绍无线通信技术的特点。根据实际应用中存在的不同问题,提出了相应的改进策略。…

查看全部问答>

问个休眠唤醒的问题???

休眠后使用外部中断唤醒,那唤醒后是继续执行休眠后面的代码还是跳到系统reset的地址执行? 比如一般Nboot/stepldr + Eboot + NK的形式,只使用Nboot + NK.nb0可以正常唤醒吗?…

查看全部问答>

51串口通信不准?!!!!

我用两个51单片机,直接互连TXD,RXT;想做一个51通信的实验 通信的距离在20cm左右,用普通的排线链接,周围环境及其不复杂 ! 一个单片机负责采集温度,用的是ds18b20,采集后发送给主机 另一个单片机(主机)接收数据并显示 协议很简单,奇偶校 ...…

查看全部问答>

关于CE5.0静态中断处理方式过程的一个疑惑

   最近在折腾DM9000移植上CE5.0上,使用的是S3C2440的CE5.0官方BSP。打算使用静态中断处理的方法: 系统启动:ARMInit->OEMInit->OALIntrInit->OALIntrMapInit->(#ifdef OAL_BSP_CALLBACKS--BSPIntrInit->OALIntrStaticTranslate) ; ...…

查看全部问答>

承接各种通信软件、模块的设计

承接 1、各种通信软件、模块的设计现,Linux/Vxworks底层驱动设计实现。 3、行业软件[银行/电信/电力/其他]及模块开发。 2、网站设计推广。 本团队拥有多名资深通信行业软件工程师、硬件工程师,拥有丰富的项目开发管理经验,大部分拥有5年以上 ...…

查看全部问答>

在it.c中引用main中函数的问题

在main中我写了一个delay函数,在it.c中我引用了delay函数,却编译出错,请问该怎么解决啊…

查看全部问答>

LABVIEW FOR ARM嵌入式开发

共享下这些资料,有兴趣的朋友可以看看,留言可以交流交流。…

查看全部问答>