您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > T12白光烙铁控制器源码
#includeSTC15F204EA.h//单片机头文件,24MHz时钟频率#includeINTRINS.hunsignedcharcodeduanma[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x73};//共阴数码管段码数据(0,1,2,3,4,5,6,7,8,9),倒数第二个是显示负号-的数据,倒数第一个是显示字母P的数据unsignedintcodewendubiao[62]={924,959,996,1033,1071,1110,1150,1190,1232,1273,1315,1358,1401,1443,1487,1501,1574,1619,1663,1706,1751,1756,1776,1810,1853,1903,1958,2017,2078,2141,2204,2266,2327,2387,2444,2500,2554,2607,2657,2706,2738,2800,2844,2889,2931,2974,3016,3056,3098,3139,3179,3218,3257,3296,3333,3372,3408,3446,3484,3519,3554,3590};//根据NTC电阻随温度变化进而引起电压变化得出的数据,用来查表计算室温(进而对热电偶冷端补偿)unsignedcharcodemoren[9]={0,230,100,41,10,3,10,0,0};//白光控制器的默认参数sbitdot=P2^7;//数码管的小数点接P2.7sbitt12=P2^0;//T12通过P2.0控制sbitbw=P3^4;//数码管百位位选为P3.4sbitsw=P3^5;//数码管十位位选为P3.5sbitgw=P3^6;//数码管个位位选为P3.6sbittihuan=P3^7;//数码管的a段本应该用P1.0控制,由于P1.0被用来控制T12,所以要用P3.7替代P1.0sbitencoderb=P1^4;//编码器的b脚接P1.4sbitencodera=P3^2;//编码器的a脚接P3.2sbitzhendongkaiguan=P0^1;//震动开关接P0.1sbitbianmaanniu=P3^3;//编码器的按键接P3.3bite=1,f=1,g;//e,f用来在interrupt1中保存上一次的编码器状态,用于和现在的状态比较,从而得出左旋还是右旋bithuancunkaiguan=0;//用于改变设定温度后显示设定温度一段时间再显示t12温度(而不是立刻显示t12温度)bitxiumiankaiguan=0;//定义休眠开关bitxiumianjishukaiguan=0;//定义休眠计数开关bitganggangkaiji=1;//定义刚刚开机(用于确保刚开机未震动手柄能进入休眠状态,因为每次休眠计时是通过震动传感器状态改变触发的,而刚开机手柄没有震动所以要特殊处理)bitguanjikaiguan=0;//定义关机开关bitguanjijishukaiguan;//定义关机计数开关bithuifumoren=0;//是否恢复默认参数bithuanxingfangshi=0;//如何从关机模式唤醒bitshezhimoshi=0;//设置模式还是正常工作模式bitshezhixianshijishukaiguan;//用于设置模式延时显示P01,P02等等菜单bitjinzhicaozuo=1;//用于设置模式下某时刻禁止编码器操作bitxianship;//用于设置模式下显示菜单P01,P02等的字母Psignedcharwenduxiuzheng;//温度修正参数signedinthuancun;//显示函数直接显示huancun,要显示一个数据将必须这个数据赋值给缓存(由于数码管只有三位,为了在显示三位数同时保持四位数的精度,所以实际显示的是数据除以10,支持显示负数.但是在参数设置模式下显示的是实际值,不除以10)signedintshiwen;//10倍实际室温,即实际室温乘以10(为了精确)(允许的室温范围为-11度至50度)signedintt12wendu;//T12烙铁头的实际温度(非热电偶的温差)(同样为10倍温度)signedintshedingwendu;//设定温度(范围200~450度)signedintleijiwencha;unsignedcharshedingwenduh,shedingwendul;//设定温度高八位,第低八位,只在掉电存储,上电恢复时用到(因为温度值是两个字节,所以保存到EEPROM需要两个char数字)unsignedcharzhouqijishu;//加热周期200ms计数unsignedcharzengyih;//运算放大器增益高八位unsignedcharzengyil;//运算放大器增益低八位unsignedcharshitiaodianya;//运算放大器失调电压修正(指将放大器的输入接地,放大器输出的电压,单位mV)unsignedcharredianou;//热电偶的℃/mV数据(指热电偶电压每升高1mV需要温升多少度,本人测定的t12原装二手头的数据为41,供大家参考,不懂勿乱调)unsignedcharwendubujin;//温度步进(范围0,1,2,5,10其中步进设为0可以锁定烙铁温度,防止熊孩子或者不懂的人乱调高温度烧坏t12头子)unsignedcharxiumianshijian;//多长时间无动作进入休眠,单位min(分钟)unsignedcharjinduzhi;//设置模式中设置到了P几(P00,P01,P02等等)unsignedcharguanjishijian;//进入休眠模式后多长时间进入关机模式,单位min(分钟)unsignedintjiareshu;//每200ms加热周期内需要加热的次数(一次等于1ms,相当于加热占空比)unsignedinthuancunjishu;//用于改变设定温度后保持显示设定温度一段时间再显示t12温度(而不是立刻显示t12温度)unsignedintbaocunwendu;//用于进入休眠时保存退出休眠时恢复原来的设定温度unsignedintzengyi;//运算放大器增益unsignedintshezhixianshijishu;//设置模式中用于延时显示菜单项unsignedlongcankaodianya0,t12dianya,ntcdianya,dianyuandianya;//用于参考电压(ADC后的直接数据,未转换为mV),计算电源电压,热电偶经放大器放大后的电压和NTC电阻确定的室温电压(单位均为mV)unsignedlongxiumianjishu,xiumianjishu2;//等待多长时间进入休眠状态(单位ms)unsignedlongguanjijishu;//等待多长时间进入关机状态(单位ms)/**************************EEPROM公共代码*********************************/voidgonggongdaima(void)//所有的公共代码都是因为多次使用到了,而把它们整理起来再调用可以减小编译后的文件大小(迫不得已的做法,因为单片机的FLASH太小了,否则装不下程序){IAP_TRIG=0x5a;//发送5ah到触发寄存器IAP_TRIG=0xa5;//发送a5h到触发寄存器_nop_();//延时IAP_CONTR=0;//关闭IAP功能IAP_CMD=0;//清空命令寄存器IAP_TRIG=0;//清空命令触发寄存器IAP_ADDRH=0;//清空地址高位IAP_ADDRL=0;//清空地址低位}/**************************字节读函数***************************************/unsignedcharByte_Read(unsignedintadd){IAP_DATA=0x00;//清空数据IAP_CONTR=0x81;//打开IAP,设置操作等待时间IAP_CMD=0x01;//字节读命令IAP_ADDRH=add8;//设置高8位地址IAP_ADDRL=add&0x00ff;//设置低8位地址gonggongdaima();return(IAP_DATA);//返回读到的数据}/*****************************字节编程函数*****************************/voidByte_Program(unsignedintadd,unsignedchardat){IAP_CONTR=0x81;//打开IAP,设置操作等待时间IAP_CMD=0x02;//字节编程命令IAP_ADDRH=add8;//设置高8位地址IAP_ADDRL=add&0x00ff;//设置低8位地址IAP_DATA=dat;//要编程的数据先送进IAP_DATA寄存器gonggongdaima();}/*****************************扇区擦除函数****************************/voidSector_Erase(unsignedintadd){IAP_CONTR=0x81;//打开IAP,设置操作等待时间IAP_CMD=0x03;//扇区擦除命令IAP_ADDRH=add8;//设置高8位地址IAP_ADDRL=add&0x00ff;//设置低8位地址gonggongdaima();}/****************************数码管关断函数*************************/voidguanduan(void)//用于关断数码管的位选{bw=1;//关断百位sw=1;//关断十位gw=1;//关断个位}/********************************1ms延时函数**********************************/voiddelay_ms(unsignedinta)//24MHz时钟时的1毫秒延时函数{unsignedintb;while(a--){for(b=0;b1200;b++);}}/*****************************10us延时函数****************************************/voiddelay_10us(unsignedinta)//24MHz时钟时的10微秒延时函数{unsignedintb;while(a--){for(b=0;b12;b++);}}/********************************显示函数*************************************/voiddisplay(signedinta)//显示函数(显示实际数据除以10,支持显示负数,负数显示方式为百位显示负号-十位和个位显示数据){unsignedcharbaiwei,shiwei,gewei,d;//定义百位,十位,个位等signedintc;//用于处理数字abite;//用于保存t12的当前状态(加热还是关闭)if(a0)//如果a是负数,取a的相反数c=-a;else//否则就直接取ac=a;if(guanjikaiguan==1)//如果是关机状态,就显示000c=0;if(shezhimoshi==0)//如果是正常模式就显示数据的十分之一,如果是设置模式直接显示数据c=c/10;baiwei=c/100;//计算百位c=c%100;shiwei=c/10;//计算十位c=c%10;gewei=c;//计算个位for(d=0;d30;d++)//显示部分,每次显
本文标题:T12白光烙铁控制器源码
链接地址:https://www.777doc.com/doc-5064151 .html