基于51单片机的PID调温系统热得快


这笔​者​的​一​个​课​程​设​计​,​该​作​品​是​基​于​5​1​单​片​机​的​P​I​D​调​温​系​统​,​使​用​热​得​快​作​为​加​热​器​,​采​用​防​水​1​8​B​2​0​作​为​水​温​检​测​器​,​移​植​了​P​I​D​算​法​。压缩包是完整的工程,包括源代码、论文、原理图(AD14)。
资源截图
代码片段和文件信息
#include“lcd.h“
/*******************************************************************************
* 函数名         : Delay1us
* 函数功能    : 延时函数,延时1us
* 输入           : a
* 输出           : 无
*******************************************************************************/
float realtmp=0;

void Delay1us(unsigned int a)
{
unsigned int bc;
for(c=a;c>0;c--)
for(b=110;b>0;b--);
}
/*******************************************************************************
* 函数名         : LcdWriteCom
* 函数功能    : 向LCD写入一个字节的命令
* 输入           : com
* 输出           : 无
*******************************************************************************/

void LcdWriteCom(unsigned char com)   //写入命令
{
RS=0;
RW=0;
GPIO_LCD=com;
Delay1us(10);
LCDE=1;
Delay1us(10);
LCDE=0;
}
/*******************************************************************************
* 函数名         : LcdWriteData
* 函数功能    : 向LCD写入一个字节的数据
* 输入           : dat
* 输出           : 无
*******************************************************************************/    
   
void LcdWriteData(unsigned char dat) //写入数据
{
RS=1;
RW=0;
GPIO_LCD=dat;
Delay1us(10);
LCDE=1;
Delay1us(10);
LCDE=0;
}
/*******************************************************************************
* 函数名         : LcdInit()
* 函数功能    : 初始化LCD屏
* 输入           : 无
* 输出           : 无
*******************************************************************************/    

void LcdInit()   //LCD初始化子程序
{
  LcdWriteCom(0x38);  //开显示
LcdWriteCom(0x0c);  //开显示不显示光标
LcdWriteCom(0x06);  //写一个指针加1
LcdWriteCom(0x01);  //清屏
LcdWriteCom(0x80);  //设置数据指针起点
}

void LcdDisplay(int temp)   //lcd显示
{
    
  unsigned char datas[] = {0 0 0 0 0}; //定义数组
float tp;
 //初始化LCD
if(temp< 0) //当温度值为负数
  {
   LcdWriteCom(0x80); //写地址 80表示初始地址
    LcdWriteData(‘-‘);   //显示负
//因为读取的温度是实际温度的补码,所以减1,再取反求出原码
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
//算加上0.5,还是在小数点后面。
 
  }
  else
  {
   LcdWriteCom(0x80); //写地址 80表示初始地址
    LcdWriteData(‘+‘);  //显示正
tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
//如果温度是正的那么,那么正数的原码就是补码它本身
temp=tp*0.0625*100+0.5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
//算加上0.5,还是在小数点后面。
realtmp=(float)temp/100;
  }
datas[0] = temp / 10000;
  datas[1] = temp % 10000 / 1000;
  datas[2] = temp % 1000 / 100;
  datas[3] = temp % 100 / 10;
  datas[4] = temp % 10;
 
LcdWriteCom(0x82);   //写地址 80表示初始地址
  LcdWriteData(‘0‘+datas[0]); //百位 


  LcdWriteCom(0x83);  //写地址 80表示初始地址
  LcdWriteData(‘0‘+datas[1]); //十位

LcdWriteCom(0x84); //写地址 80表示初始地址
  LcdWriteData(‘0‘+datas[2]); //个位 

LcdWriteCom(0x85); //写地址 80表示初始地址
  LcdWriteData(‘.‘);  //显示 ‘.’

LcdWriteCom(0x86);  //写地址 80表示初始地址
  LcdWriteData(‘0‘+datas[3]); //显示小数点  


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        402  2016-01-07 02:30  pid-tempercodeheaderlcd.h

     文件        687  2016-01-07 02:13  pid-tempercodeheaderPID.H

     文件        314  2016-01-06 23:24  pid-tempercodeheader emp.h

     文件      11458  2016-01-07 02:41  pid-tempercodeoutputlcd.obj

     文件       9204  2016-01-07 02:41  pid-tempercodeoutputmain.obj

     文件      10786  2016-01-07 02:41  pid-tempercodeoutputpid.obj

     文件      33876  2016-01-07 02:41  pid-tempercodeoutputpro

     文件      11866  2016-01-07 02:41  pid-tempercodeoutputpro.hex

     文件        155  2016-01-07 02:41  pid-tempercodeoutputpro.lnp

     文件        185  2016-01-08 12:00  pid-tempercodeoutputpro.plg

     文件        789  2016-01-07 02:41  pid-tempercodeoutputSTARTUP.obj

     文件       5751  2016-01-07 02:41  pid-tempercodeoutput emp.obj

     文件       6027  2016-01-07 02:31  pid-tempercodeprjlcd.c

     文件      11430  2016-01-07 02:41  pid-tempercodeprjlcd.LST

     文件      11422  2016-01-07 02:41  pid-tempercodeprjlcd.OBJ

     文件       3130  2016-01-08 02:43  pid-tempercodeprjmain.c

     文件       7488  2016-01-07 02:41  pid-tempercodeprjmain.LST

     文件       9167  2016-01-07 02:41  pid-tempercodeprjmain.OBJ

     文件       2870  2016-01-07 02:39  pid-tempercodeprjpid.c

     文件       5975  2016-01-07 02:41  pid-tempercodeprjpid.LST

     文件      10750  2016-01-07 02:41  pid-tempercodeprjpid.OBJ

     文件      33610  2016-01-07 02:41  pid-tempercodeprjpro

     文件      11866  2016-01-07 02:41  pid-tempercodeprjpro.hex

     文件         77  2016-01-07 02:41  pid-tempercodeprjpro.lnp

     文件      32607  2016-01-07 02:41  pid-tempercodeprjpro.M51

     文件        917  2016-01-07 02:44  pid-tempercodeprjpro.plg

     文件      72899  2016-01-06 02:45  pid-tempercodeprjpro.uvgui.Administrator

     文件      72899  2016-01-06 02:00  pid-tempercodeprjpro.uvgui_Administrator.bak

    .......     58714  2016-01-08 12:04  pid-tempercodeprjpro.uvopt

    .......     13893  2016-01-07 02:44  pid-tempercodeprjpro.uvproj

............此处省略46个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)