完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
小弟毕业设计是温度控制PID系统,以前从来都没有用过AD7705,
现在1602上显示的就是乱跳的温度啊,还有PID算法怎么编写,求指导,求帮助啊, 小弟跪谢大家啦
|
|
相关推荐
5个回答
|
|
电路图如下,求个好心人帮忙啊
|
|
|
|
#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); } } |
|
|
|
求指导啊,程序如上
|
|
|
|
跪求大神指导
|
|
|
|
跪求好心人帮忙看看
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
464 浏览 0 评论
478 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
439 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
994 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1056 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11780 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 10:37 , Processed in 0.687073 second(s), Total 82, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号