单片机/MCUwilliam hill官网
登录
直播中
小小冰
12年用户
10经验值
私信
关注
[问答]
大神们,有没有人做过温度控制PID系统的,小弟跪求帮忙啊
开启该帖子的消息推送
小弟毕业设计是温度控制PID系统,以前从来都没有用过AD7705,
现在1602上显示的就是乱跳的温度啊,还有PID算法怎么编写,求指导,求帮助啊,
小弟跪谢大家啦
回帖
(5)
小小冰
2013-3-14 09:09:15
威廉希尔官方网站 图如下,求个好心人帮忙啊
威廉希尔官方网站 图如下,求个好心人帮忙啊
举报
小小冰
2013-3-14 09:23:12
#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
//AD控制端口
***it AdDin = P2^0; /*AD7705数据输入脉冲*/
***it AdDout = P2^1; /*AD7705数据输出的反相脉冲*/
***it AdClk = P2^2; /*AD7705时钟脉冲*/
***it AdDrdy = P3^2;
//1602控制端口
***it lcdrs=P1^0; //液晶数据命令选择
***it lcdrw=P1^1;
***it lcden=P1^2; //液晶使能
#define lcd_data P0
uchar code table0[]="WENDU ";
uchar code table2[]=" C";
uint ADC=0;
/*******************************************************************/
/* */
/* 延时函数 */
/* */
/*******************************************************************/
void delay(int ms)
{
while(ms--)
{
uchar i;
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
//LCD1602
void write_state(uchar com)
{
lcdrs=0; //低电平读状态
lcdrw=0;
lcd_data=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)
{
lcdrs=1; //高电平读状态
lcdrw=0;
lcd_data=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void lcdinit()
{
uchar num;
lcden=0;
write_state(0x38); // 设置16*12显示,5*7点阵, 8位数据口
write_state(0x0c); // 设置开显示,不显示光标
write_state(0x06); // 写一个字符后地址指针加1
write_state(0x01); // 显示清零,数据指针清零
write_state(0x80);
for(num=0;num<13;num++)
{
write_date(table0[num]);
delay(5);
}
}
//ADC程序
/* 向AD7705写入一个字节 */
void WriteByte7705(unsigned char x)
{
unsigned char a;
AdClk = 1;
_nop_();
for (a=0; a<8; a++)
{
AdClk=0;
_nop_();
AdDin = (bit) (x & 0x80);
x<<=1;
AdClk=1;
_nop_();
}
//AdClk=1; //后添加
//AdDin=1; //后添加
}
/* 从AD7705读一个字 */
unsigned int ReadWord7705(void)
{
unsigned char b;
unsigned long y=0;
AdClk = 1 ;
for(b=0;b<16;b++)
{
AdClk=0;
_nop_();
//y<<=1;
if(AdDout == 1)
{
y = y | 0x01;
}
y<<=1;
AdClk=1;
_nop_();
}
//AdClk=1; //后添加
//AdDin=1; //后添加
return y;
}
/* AD7705通信端口复位 */
void Reset7705(void)
{
unsigned char c;
for(c=0;c<35;c++)
{ /* 多于连续32个 DIN=1 使串口复位 */
AdClk = 0;
_nop_();
AdDin = 1;
_nop_();
AdClk = 1;
_nop_();
}
}
void Init7705(void)
{
Reset7705();
WriteByte7705(0x20);//0010 0000选中时钟寄存器 写 通道1寄存器0
WriteByte7705(0x05);//对时钟寄存器 时钟分频禁止 时钟位0 50Hz刷新
WriteByte7705(0x10);//0001 0000选中设置寄存器 写 通道1寄存器0
WriteByte7705(0x78);//设置寄存器自校准 增益128 双极性工作
delay(30);
}
void int0 (void) interrupt 0 //AD7705中断0读取AD
{
WriteByte7705(0x38);//选中数据寄存器 读操作
ADC = ReadWord7705();
Reset7705();
WriteByte7705(0x10);//设置寄存器 写 通道1
WriteByte7705(0x78);//设置寄存器自校准 增益128 双极性工作
AdDrdy = 1;
}
//显示ADC
void display(uint ad_date)
{
write_state(0x80+0x40);
write_date(0x30+ad_date/10000);
write_date(0x30+ad_date%10000/1000);
write_date(0x30+ad_date%1000/100);
write_date(0x30+ad_date%100/10);
write_date(0x30+ad_date%10);
}
/*****************************************************************/
void main(void)
{
IT0 = 1; //外部中断触发方式为下降沿触发
EX0 = 1; //外部中断允许
EA = 1; //开中断
Init7705();
lcdinit();
while(1)
{
display(ADC);
}
}
#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
//AD控制端口
***it AdDin = P2^0; /*AD7705数据输入脉冲*/
***it AdDout = P2^1; /*AD7705数据输出的反相脉冲*/
***it AdClk = P2^2; /*AD7705时钟脉冲*/
***it AdDrdy = P3^2;
//1602控制端口
***it lcdrs=P1^0; //液晶数据命令选择
***it lcdrw=P1^1;
***it lcden=P1^2; //液晶使能
#define lcd_data P0
uchar code table0[]="WENDU ";
uchar code table2[]=" C";
uint ADC=0;
/*******************************************************************/
/* */
/* 延时函数 */
/* */
/*******************************************************************/
void delay(int ms)
{
while(ms--)
{
uchar i;
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
//LCD1602
void write_state(uchar com)
{
lcdrs=0; //低电平读状态
lcdrw=0;
lcd_data=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)
{
lcdrs=1; //高电平读状态
lcdrw=0;
lcd_data=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void lcdinit()
{
uchar num;
lcden=0;
write_state(0x38); // 设置16*12显示,5*7点阵, 8位数据口
write_state(0x0c); // 设置开显示,不显示光标
write_state(0x06); // 写一个字符后地址指针加1
write_state(0x01); // 显示清零,数据指针清零
write_state(0x80);
for(num=0;num<13;num++)
{
write_date(table0[num]);
delay(5);
}
}
//ADC程序
/* 向AD7705写入一个字节 */
void WriteByte7705(unsigned char x)
{
unsigned char a;
AdClk = 1;
_nop_();
for (a=0; a<8; a++)
{
AdClk=0;
_nop_();
AdDin = (bit) (x & 0x80);
x<<=1;
AdClk=1;
_nop_();
}
//AdClk=1; //后添加
//AdDin=1; //后添加
}
/* 从AD7705读一个字 */
unsigned int ReadWord7705(void)
{
unsigned char b;
unsigned long y=0;
AdClk = 1 ;
for(b=0;b<16;b++)
{
AdClk=0;
_nop_();
//y<<=1;
if(AdDout == 1)
{
y = y | 0x01;
}
y<<=1;
AdClk=1;
_nop_();
}
//AdClk=1; //后添加
//AdDin=1; //后添加
return y;
}
/* AD7705通信端口复位 */
void Reset7705(void)
{
unsigned char c;
for(c=0;c<35;c++)
{ /* 多于连续32个 DIN=1 使串口复位 */
AdClk = 0;
_nop_();
AdDin = 1;
_nop_();
AdClk = 1;
_nop_();
}
}
void Init7705(void)
{
Reset7705();
WriteByte7705(0x20);//0010 0000选中时钟寄存器 写 通道1寄存器0
WriteByte7705(0x05);//对时钟寄存器 时钟分频禁止 时钟位0 50Hz刷新
WriteByte7705(0x10);//0001 0000选中设置寄存器 写 通道1寄存器0
WriteByte7705(0x78);//设置寄存器自校准 增益128 双极性工作
delay(30);
}
void int0 (void) interrupt 0 //AD7705中断0读取AD
{
WriteByte7705(0x38);//选中数据寄存器 读操作
ADC = ReadWord7705();
Reset7705();
WriteByte7705(0x10);//设置寄存器 写 通道1
WriteByte7705(0x78);//设置寄存器自校准 增益128 双极性工作
AdDrdy = 1;
}
//显示ADC
void display(uint ad_date)
{
write_state(0x80+0x40);
write_date(0x30+ad_date/10000);
write_date(0x30+ad_date%10000/1000);
write_date(0x30+ad_date%1000/100);
write_date(0x30+ad_date%100/10);
write_date(0x30+ad_date%10);
}
/*****************************************************************/
void main(void)
{
IT0 = 1; //外部中断触发方式为下降沿触发
EX0 = 1; //外部中断允许
EA = 1; //开中断
Init7705();
lcdinit();
while(1)
{
display(ADC);
}
}
举报
小小冰
2013-3-14 09:24:20
求指导啊,程序如上
求指导啊,程序如上
举报
小小冰
2013-3-14 09:25:44
跪求大神指导
跪求大神指导
举报
小小冰
2013-3-15 08:22:54
跪求好心人帮忙看看
跪求好心人帮忙看看
举报
更多回帖
rotate(-90deg);
回复
相关问答
本人学生,谁有电热水器的仿真威廉希尔官方网站 图
啊
?用
PID
控制
算法来
控制
温度
的。
大神
们
帮
帮忙
啊
!
2016-05-04
4507
跪求
PID
温度
控制系统
vi 新手谢谢
2015-12-15
2834
有没有
用SHT11
做过
温湿度
控制
威廉希尔官方网站 的人
啊
2012-05-19
3553
有没有人
利用555定时器
做过
数字电容计的设计?
跪求
程序和仿真图!!
2017-05-12
3554
有没有
做过
pi/4 dqpsk 中频差分解调的
大神
啊
2014-05-12
1801
求
帮忙
--
PID
温度
控制系统
设计
2013-05-10
3418
有没有人
用DSP和fy56-3224-65k
做过
显示
啊
2014-12-26
6249
有没人
做过
基于stm32的人体问对传感器判断
有没有人
通过
啊
?
2015-10-28
2973
帮忙
!!基于LABVIEW的超市管理
系统
2018-04-30
5290
湿敏电阻的阻值会根据
温度
变化的,我需要吧
温度
和湿度分别做补偿吗?
2015-06-09
4786
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分