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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(STC15F204EA单片机旋转编码器版白光T12控制器代码开发固件by金向维.docx)为本站会员(b****7)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

STC15F204EA单片机旋转编码器版白光T12控制器代码开发固件by金向维.docx

1、STC15F204EA单片机旋转编码器版白光T12控制器代码开发固件by金向维STC15F204EA单片机旋转编码器版白光T12控制器代码(开发固件)(by金向维)Dbit huancunkaiguan=0; /用于改变设定温度后延时显示设定温度(而不是立刻显示t12温度)signed int huancun; /显示函数直接显示huancun,要显示一个数据将必须这个数据赋值给缓存(由于数 码管只有三位,为了在显示三位数同时保持四位数的精度,所以实际显示的是数 据除以10,并支持显示负数)signed int shiwen; /10倍实际室温,即实际室温乘以10(为了精确)(允许的室温范围为

2、-11度至50度)signed int t12wendu; /T12烙铁头的实际温度(非热电偶的温差)(同样为10倍温度)signed int shedingwendu; /设定温度(范围200450度)signed int wencha; /T12两个周期间的温差signed int jiareshu; /每200ms加热周期内需要加热的次数(一次等于1ms,相当于加热占空比)unsigned char zhouqijishu; /加热周期200ms计数unsigned int huancunjishu; /用于改变设定温度后延时显示设定温度(而不是立刻显示t12温度)unsigned lo

3、ng cankaodianya0, t12dianya, ntcdianya, dianyuandianya;/*1ms延时函数*/void delay_ms (unsigned int a) /24MHz时钟时的1毫秒延时函数 unsigned int b; while(a-) for(b=0;b1200;b+); /*10us延时函数*/void delay_10us (unsigned int a) /24MHz时钟时的10微秒延时函数 unsigned int b; while(a-) for(b=0;b12;b+); /*数码管延时关断函数*/void guanduan (void)

4、 /用于关断数码管的位选 delay_ms(1); /延时 bw=1; /关断百位 sw=1; /关断十位 gw=1; /关断个位/*公共函数10(显示)*/void gonggonghanshu10(unsigned char a) a7=a&0x80; /小数点 a6=a&0x40; /g a5=a&0x20; /f a4=a&0x10; /e a3=a&0x08; /d a2=a&0x04; /c a1=a&0x02; /b tihuan=a&0x01; /a/*显示函数*/void display(signed int a) /显示函数(显示实际数据除以10,支持显示负数) unsig

5、ned char baiwei, shiwei, gewei, d; /定义百位,十位,个位,每次显示帧数 signed int c; /用于处理数字a if(a0) /如果a是负数 c=-a; /取a的相反数 else /否则 c=a; /就直接取a c=c/10; baiwei=c/100; /计算百位 c=c%100; shiwei=c/10; /计算十位 c=c%10; gewei=c; /计算个位 for(d=0;d20;d+) /显示部分,每次显示20个循环(20帧) if(a0) /如果a是负数,则百位显示负号 gonggonghanshu10(duanma10); else /

6、否则直接显示百位 gonggonghanshu10(duanmabaiwei); /显示百位 bw=0; /打开百位 guanduan(); /延时关断百位 gonggonghanshu10(duanmashiwei); /显示十位 sw=0; /打开十位 guanduan(); /延时关断十位 gonggonghanshu10(duanmagewei); /显示个位 gw=0; /打开个位 guanduan(); /延时关断个位 /*ADC公共函数*/void gonggonghanshu2(void) /此函数测量单片机电源电压 ADC_CONTR=0x88; /ADC_POWER, SP

7、EED1, SPEED0, ADC_FLAG-ADC_START, CHS2, CHS1, CHS0 delay_10us(2); /延时等待转换结束 ADC_RESL=ADC_RESL&0x03; /取转换结果低八位中的低二位 cankaodianya0=(ADC_RES*4+ADC_RESL); /把结果转换成十进制数据(10位ADC,最大值1024) dianyuandianya=2549760/cankaodianya0; /计算电源电压,单位mV/*ADC测电压函数*/void adc (void) /ADC函数,用于测量和计算各种电压 signed char a; /查NTC表用

8、gonggonghanshu2(); /公共函数2(此函数功能是测量电源电压,单位mV) ADC_CONTR=0x89; /ADC控制寄存器设置,转换采用最低速度速,低速更精确(测量 t12电压务必使用最低速度AD转换,实测高速误差大) delay_10us(2); ADC_RESL=ADC_RESL&0x03; t12dianya=(ADC_RES*4+ADC_RESL); t12dianya=2490*t12dianya/cankaodianya0; /计算t12电压,单位mV ADC_CONTR=0x8a; /ADC控制寄存器设置 delay_10us(2); ADC_RESL=ADC_

9、RESL&0x03; ntcdianya=(ADC_RES*4+ADC_RESL); ntcdianya=2490*ntcdianya/cankaodianya0; /计算ntc电压,单位mV for(a=0;wendubiaoa=61) /如果超出表的范围就取允许的最高温度(50度) break; /并且退出查表 shiwen=(a-11)*10; /得出室温(实际室温乘以10) t12wendu=(t12dianya-100)*43*10/260+shiwen; /计算t12的实际温度,其中260为运放增益 if(t12wendu5000) /如果得出的温度超过500度,说明没有插入烙铁头

10、或参数 错误(因为烙铁头的温度不可能超过500度) t12wendu=5000; /显示500作为错误指示(注意显示函数显示的是1/10,所以 要显示500,需要赋值5000) if(huancunkaiguan=1) /如果缓存开关开,说明刚刚改变了设定温度 huancun=shedingwendu; /于是显示设定温度(而不是t12温度) else huancun=t12wendu; /否则直接显示t12温度/*定时器0初始化函数*/void timer0init (void) /定时器0初始化程序,24MHz频率下,每1ms中断一次 TMOD=0x00; /定时模式,16位自动重装 TH

11、0=0xf8; /计时1ms TL0=0x2f; ET0=1; /开启定时器0中断 TR0=1; /启动定时器0/*公共函数6(记录编码器状态)*/void gonggonghanshu6(void) e=encodera; /记录编码器a脚此次状态 f=encoderb; /记录编码器b脚此次状态/*编码器函数(正常加热模式调用)*/void bianmaqi(void) if(e=1&f=1&encodera=1&encoderb=0) /和前一次状态比较确定为右旋 shedingwendu=shedingwendu+100; /步进 if(shedingwendu4500) /最高允许4

12、50度 shedingwendu=4500; huancun=shedingwendu; /显示改变后的设定温度 huancunkaiguan=1; /打开缓存开关(用于延时显示设定温度1.5秒) huancunjishu=0; /重新开始缓存计数 if(e=1&f=1&encodera=0&encoderb=1) /和前一次状态比较确定为左旋 shedingwendu=shedingwendu-100; /步进 if(shedingwendu190) /最多加热190ms jiareshu=190; if(zhouqijishushedingwendu) if(t12wendu-shedin

13、gwendu=20) jiareshu=(shedingwendu-1500)/160; else jiareshu=0; if(t12wendu20) buchang+; if(buchang150) buchang=150; else buchang=0; if(shedingwendu-t12wendu=300) jiareshu=198; else if(shedingwendu-t12wendu=200) jiareshu=160; else if(shedingwendu-t12wendu=150) jiareshu=130; else if(shedingwendu-t12wen

14、du=100) jiareshu=90+wencha/2+buchang; else if(shedingwendu-t12wendu=50) jiareshu=50+buchang*2; else jiareshu=(shedingwendu-1000)/80+wencha*2/3+buchang; /*主函数*/void main (void) /主函数 P1M0=0x00; /P1除P1.0,P1.1,P1.2为输入模式外均为正常模式 P1M1=0x07; P1ASF=0x07; /设置P1相应ADC转换的I/O口为ADC输入模式 P2M0=0xff; /P2都是推挽模式 P2M1=0x00; P3M0=0xf0; /P3.4,P3.5,P3.6,P3.7为推挽模式,P3.2,P3.3为输入模式, P3M1=0x06; /其余正常模式 ADC_CONTR=0xe0; /打开ADC电源 shedingwendu=3000; /设为300度 IE=0x88; /打开定时器0中断,关闭定时器1中断 timer0init(); /初始化定时器0 while(1) display(huancun); /数码管显示数据

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2