资源简介
这笔者的一个课程设计,该作品是基于51单片机的PID调温系统,使用热得快作为加热器,采用防水18B20作为水温检测器,移植了PID算法。压缩包是完整的工程,包括源代码、论文、原理图(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-temper\code\header\lcd.h
文件 687 2016-01-07 02:13 pid-temper\code\header\PID.H
文件 314 2016-01-06 23:24 pid-temper\code\header\temp.h
文件 11458 2016-01-07 02:41 pid-temper\code\output\lcd.obj
文件 9204 2016-01-07 02:41 pid-temper\code\output\main.obj
文件 10786 2016-01-07 02:41 pid-temper\code\output\pid.obj
文件 33876 2016-01-07 02:41 pid-temper\code\output\pro
文件 11866 2016-01-07 02:41 pid-temper\code\output\pro.hex
文件 155 2016-01-07 02:41 pid-temper\code\output\pro.lnp
文件 185 2016-01-08 12:00 pid-temper\code\output\pro.plg
文件 789 2016-01-07 02:41 pid-temper\code\output\STARTUP.obj
文件 5751 2016-01-07 02:41 pid-temper\code\output\temp.obj
文件 6027 2016-01-07 02:31 pid-temper\code\prj\lcd.c
文件 11430 2016-01-07 02:41 pid-temper\code\prj\lcd.LST
文件 11422 2016-01-07 02:41 pid-temper\code\prj\lcd.OBJ
文件 3130 2016-01-08 02:43 pid-temper\code\prj\main.c
文件 7488 2016-01-07 02:41 pid-temper\code\prj\main.LST
文件 9167 2016-01-07 02:41 pid-temper\code\prj\main.OBJ
文件 2870 2016-01-07 02:39 pid-temper\code\prj\pid.c
文件 5975 2016-01-07 02:41 pid-temper\code\prj\pid.LST
文件 10750 2016-01-07 02:41 pid-temper\code\prj\pid.OBJ
文件 33610 2016-01-07 02:41 pid-temper\code\prj\pro
文件 11866 2016-01-07 02:41 pid-temper\code\prj\pro.hex
文件 77 2016-01-07 02:41 pid-temper\code\prj\pro.lnp
文件 32607 2016-01-07 02:41 pid-temper\code\prj\pro.M51
文件 917 2016-01-07 02:44 pid-temper\code\prj\pro.plg
文件 72899 2016-01-06 02:45 pid-temper\code\prj\pro.uvgui.Administrator
文件 72899 2016-01-06 02:00 pid-temper\code\prj\pro.uvgui_Administrator.bak
....... 58714 2016-01-08 12:04 pid-temper\code\prj\pro.uvopt
....... 13893 2016-01-07 02:44 pid-temper\code\prj\pro.uvproj
............此处省略46个文件信息
相关资源
- 基于51单片机设计的简易电子琴.
- 阿里妈妈订单同步助手带创建pid功能
- 51单片机遥控器控制步进电机程序+论
- 基于AD1674的模数转换电路及程序
- 实验四具有纯滞后系统的大林控制.
- 基于51单片机室内环境检测仪.zip
- 各种51单片机烧录程序软件
- STM32平衡车代码.rar
- STM32F103RCT语音模块LD3320 STM32与51单片
- 智能电热水器的控制系统设计Proteus仿
- 基于51单片机的智能晾衣架设计.docx
- 基于单片机控制的智能窗帘控制系统
- 51单片机简易电子琴设计
- 基于51单片机的电机转速监测
- 基于51单片机&GPS;的导航系统设计论文
- 51单片机时钟设计.rar
- STM32单片机程序+原理图.rar
- 最新RapidIO Specification 4.1
- PID控制算法大全经典
- PID神经元网络及其控制系统
- 基于STM32F103的无感和有感无刷直流电
- verilog写的MCU8051单片机系统
- 51单片机出租车计价器
- 基于51单片机的出租车计价器硬件原理
- 基于51单片机的温度控制系统设计课程
- PID controllers:theory design and tuning.rar
- 基于PID电加热炉温度控制系统设计
- 交流伺服电机PID速度智能控制
- PADS_VX Xpidition 通用3D模型
- 基于51单片机最小系统 AD 原理图+PCB
评论
共有 条评论