ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:17.24KB ,
资源ID:23099319      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23099319.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于stc单片机温度控制的程序.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于stc单片机温度控制的程序.docx

1、基于stc单片机温度控制的程序#include #include #include #include unsigned int pp1;unsigned int j=0;unsigned int ReceiveData; /计算机向单片机发送的数据unsigned int ADdat2;unsigned char cH;unsigned char cL;unsigned char INPUT_ZH;unsigned char INPUT_X;unsigned int GivenTemper,measure,Error; float pp;sbit DS=P24;sbit ss1=P20;sbi

2、t ss2=P21;#define uchar unsigned char #define uint unsigned int uchar Temp_Value=0x00,0x00; void delay(unsigned int i);uchar a,b,c; float tt;unsigned int temp; /*此部分为18B20的驱动程序*/bit ds18b20isok=1;/=void Delay(uint x) /延时程序unsigned i;x=x*5/4; for(i=0;ix;i+);/=uchar InitDS18B20() /初始化 uchar status; DS

3、=1;Delay(8);DS=0;Delay(500);DS=1;Delay(100); status=DS;Delay(100); DS=1; return status;/=void WriteByte (uint dat) /单字节写入 uchar i; for (i=0;i= 1; /=uchar ReadByte (void) /读取单字节uchar dat=0,i; DS=1; _nop_(); for(i=0;i= 1; DS = 1; _nop_(); _nop_(); if(DS) dat |= 0x80; Delay (45); DS=1; return dat;uchar

4、 readtemperature()if (InitDS18B20()=1) ds18b20isok=0; else WriteByte(0xCC); WriteByte(0x44); InitDS18B20(); WriteByte(0xCC); WriteByte(0xBE);Temp_Value0=ReadByte();Temp_Value1=ReadByte();a =Temp_Value0 ; /读取到的第一个字节为温度LSBb = Temp_Value1; ds18b20isok=1; /*函数功能:延时1ms(3j+2)*i=(333+2)10=1010(微秒),可以认为是1毫秒

5、*/void delay1ms() unsigned int i,j; for(i=0;i10;i+) for(j=0;j33;j+); /*函数功能:延时若干毫秒入口参数:n*/void delaynms(unsigned int n) unsigned int i; for(i=0;in;i+) delay1ms();/*函数功能:单片机向计算机发送数据*/void send(unsigned int send_data) SBUF=send_data; while(TI=0); TI=0; /*函数功能:串口中断函数 单片机通过中断接收计算机发送数据 */void UART_SER (v

6、oid) interrupt 4 /串行中断服务程序 if(RI) /判断是接收中断产生 RI=0; /标志位清零 ReceiveData=SBUF; /读入缓冲区的值 void main(void) IE = 0x90; /Enable ADC interrupt and Open master interrupt switch,允许T1,T0中断 TMOD=0x22; /定时器T1工作于方式2,带自动重装功能的8位计数器,最大计数值为256 SCON=0x50; /SCON=0101 0000B,串口工作方式1,允许接收(REN=1) PCON=0x00; /PCON=0000 0000B

7、,波特率9600 TH1=0xfa; /根据规定给定时器T1赋初值 TL1=0xfa; /根据规定给定时器T1赋初值 TR1=1; /启动定时器T1 TH0=0xF5; /根据规定给定时器T1赋初值 TL0=0x78; /根据规定给定时器T1赋初值 TR0=1; /启动定时器T0 readtemperature();/Delay (9000); while(1) /unsigned char i; readtemperature(); /得到AD的输入温度值 /ADget_Z=ADget/10;十位 /ADget_X=ADget%10;个位 /ADget_Z=ADget_Z*1000;/if

8、( ds18b20isok )/pp=100;/else/pp=200;/;temp = b; /先把高八位有效数据赋于temptemp measure) /给定值高 ccap0加热 Error=GivenTemper-measure; / CCAP1L=0; /CCAP1H=0; /if (Error 0) if(Error 300) ss1=1; ss2=0; else if (Error100&Error50&Error10&Error5&Error=10) ss1=1; ss2=0; Delay (100); ss1=0; ss2=0; Delay (100); else ss1=0;

9、 ss2=0; else if(GivenTemper0) if(Error 300) ss1=0; ss2=1; else if (Error100&Error50&Error10&Error5&Errormeasure) /给定值高 ccap0加热 Error=GivenTemper-measure; / 给定值小于测量值时 else if(GivenTempermeasure) /给定值低 ccap1制冷 Error=measure-GivenTemper; delaynms(10000); /增量式PID算法(需要控制的不是控制量的绝对值,而是控制量的增量)/*函数功能:AD采样 /*

10、/unsigned int ADCRESULT()/ADC_RES=500;/ ADdat2=(ADC_RES2)+ADC_RESL;/10位转换结果/ pp=(ADdat2/1024)*5; / pp1=(long)ADdat2*1500)/358; /得到温度/ ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START;/ return pp;/*函数功能:完成函数的初始化功能(A/D采样会用到) */void InitADC()/ P1ASF = 0xf7;/Set all P1 as analog input port将所有的P1口定义为模拟输入端

11、口/ ADC_RES = 0;/Clear previous result清除上一个结果. ADC_RES 为A/D转换结果寄存器 / ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START;/PWM初始化 /void InitPWM()/CMOD=0x84 ;/CPS1 CPS0=00,FOSC/12是 PCA/PWM CLOCK 94/CCON=0x00;/CL=0x00; /PCA计数器 /CH=0x00; /PCA计数器 /CCAP0L=0x80; /Set the initial value same as CCAPOH 预置初值 加热/CCAP0H=0x80; /50%的占空比 /CCAPM0=0x42; /01000010 Setup PCA module 0 in 8bit pwm, P1.3输出/另一路pwm/CCAP1L=0x80; /Set the initial value same as CCAPOH 预置初值 制冷/CCAP1H=0x80; /50%的占空比 /CCAPM1=0x42; /p1.4输出/CR=1;/启动PCA/PWM 定时器 /

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1