基于热敏电阻的数字温度计说课讲解.doc
《基于热敏电阻的数字温度计说课讲解.doc》由会员分享,可在线阅读,更多相关《基于热敏电阻的数字温度计说课讲解.doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Good is good, but better carries it.精益求精,善益求善。基于热敏电阻的数字温度计-科信学院单片机应用系统(三级)项目设计说明书(2012/2013学年第二学期)题目:基于热敏电阻的数字温度计_专业班级:电子信息工程1021学生姓名:指导教师:马永强吴开兴刘会军马小进设计周数:两周设计成绩:2013年6月28日-目录1实验设计目的22系统软件设计22.1软件总体流程设计22.2系统设计及主要程序32.2.1系统主函数32.2.2汉显lcd1286442.2.3时钟芯片DS130262.2.4ADC0832112.3上位机设计及主要代码142.3.1Serial
2、Port组件142.3.2串口操作152.3.3数据的接收152.3.4保存数据与清空数据173系统硬件电路设计173.1恒温桥电路173.2信号放大电路183.3A/D转换电路183.4控制电路193.5显示电路204总结与展望20参考文献211实验设计目的随着以知识经济为特征的信息化时代的到来人们对仪器仪表的认识更加深入,温度作为一个重要的物理量,是工业生产过程中最普遍,最重要的工艺参数之一。随着工业的不断发展,对温度的测量的要求也越来越高,而且测量的范围也越来越广,对温度的检测技术的要求也越来越高,因此,温度测量及其测量技术的研究也是一个很重要的课题。本系统的温度测量采用的就是热阻效应。
3、温度测量模块主要为温度测量电桥,当温度发生变化时,电桥失去平衡,从而在电桥输出端有电压输出,但该电压很小。将输出的微弱电压信号通过OP07放大,将放大后的信号输入AD转换芯片,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。单片机显示模块电源模块测温模块信号放大模块AD转换模块图1-1系统框图2系统软件设计2.1软件总体流程设计软件设计采用c语言编程,运用模块化程序设计思想,对不同功能模块的程序进行分别编程,以便移植或调用,这样使软件层次结构清晰,有利于软件的调试修改。数字温度计系统软件部分采用模块化设计思想,将系统分为主程序、初始化处理模块、中断检测模
4、块、延时处理模块、数据处理模块、显示模块,其软件系统的主程序实现流程如下图所示:开始DS1302时钟信息采集数据处理12864显示结束系统初始化PT100温度采集图2-1系统软件流程2.2系统设计及主要程序2.2.1系统主函数程序的入口,分别调用了其他头文件,实现了lcd12864汉显的显示,DS1302时钟芯片时间的运行,ADC0832模数转换。主要代码实现如下:#includereg52.h#includeintrins.h#includelcd12864.h#includeDS1302.h#includeADC0832.h#defineucharunsignedchar#defineui
5、ntunsignedintvoidmain(void)Com_Init();v_Lcd12864Init_f();v_Lcd12864PutString_f(1,0,年);v_Lcd12864PutString_f(3,0,月);v_Lcd12864PutString_f(5,0,日);v_Lcd12864PutString_f(1,1,时);v_Lcd12864PutString_f(3,1,分);v_Lcd12864PutString_f(5,1,秒);v_Lcd12864PutString_f(5,2,);while(1)Run_DS1302();displayADC();send();
6、_nop_;2.2.2汉显lcd12864主要实现汉显lcd12864接收时钟芯片DS1302与A/D转换模块传递来的温度与时间,并显示在液晶屏上。主要代码实现如下:#includelcd12864.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintvoidv_Lcd12864CheckBusy_f(void)/忙检测函数unsignedintnTimeOut=0;SET_INCSET_READCLR_ENSET_ENwhile(io_LCD12864_DATAPORT&0x80)&(+nTimeOut!=0);CL
7、R_ENSET_INCSET_READvoidv_Lcd12864SendCmd_f(unsignedcharbyCmd)/发送命令v_Lcd12864CheckBusy_f();SET_INCSET_WRITECLR_ENio_LCD12864_DATAPORT=byCmd;_nop_();_nop_();SET_EN_nop_();_nop_();CLR_ENSET_READSET_INCvoidv_Lcd12864SendData_f(unsignedcharbyData)/发送数据v_Lcd12864CheckBusy_f();SET_DATASET_WRITECLR_ENio_LCD
8、12864_DATAPORT=byData;_nop_();_nop_();SET_EN_nop_();_nop_();CLR_ENSET_READSET_INCvoidv_DelayMs_f(unsignedintnDelay)/延时unsignedinti;for(;nDelay0;nDelay-)for(i=125;i0;i-);voidv_Lcd12864Init_f(void)/初始化v_Lcd12864SendCmd_f(0x30);/基本指令集v_DelayMs_f(50);v_Lcd12864SendCmd_f(0x01);/清屏v_DelayMs_f(50);v_Lcd128
9、64SendCmd_f(0x06);/光标右移v_DelayMs_f(50);v_Lcd12864SendCmd_f(0x0c);/开显示voidv_Lcd12864SetAddress_f(unsignedcharx,y)/地址转换unsignedcharbyAddress;switch(y)case0:byAddress=0x80+x;break;case1:byAddress=0x90+x;break;case2:byAddress=0x88+x;break;case3:byAddress=0x98+x;break;default:break;v_Lcd12864SendCmd_f(by
10、Address);voidv_Lcd12864PutString_f(ucharx,uchary,uchar*pData)v_Lcd12864SetAddress_f(x,y);while(*pData!=0)v_Lcd12864SendData_f(*pData+);2.2.3时钟芯片DS1302主要为汉显12864提供时间输出。主要代码实现如下:#includeDS1302.h#includeintrins.h#includelcd12864.h#defineucharunsignedchar#defineuintunsignedintvoidv_RTInputByte(ucharucDa
11、)/功能:往DS1302写入1Byte数据uchari;ACC=ucDa;T_RST=1;for(i=8;i0;i-)T_IO=ACC0;T_CLK=1;T_CLK=0;ACC=ACC1;ucharuc_RTOutputByte(void)/从DS1302读取1Byte数据uchari;T_RST=1;for(i=8;i0;i-)ACC=ACC1;T_IO=1;ACC7=T_IO;T_CLK=1;T_CLK=0;return(ACC);voidv_W1302(ucharucAddr,ucharucDa)/往DS1302写入数据ucAddr:DS1302地址,ucDa:要写的数据T_RST=0;
12、T_CLK=0;T_RST=1;v_RTInputByte(ucAddr);/写地址_nop_();_nop_();v_RTInputByte(ucDa);/写1Byte数据T_CLK=1;T_RST=0;ucharuc_R1302(ucharucAddr)/读取DS1302某地址的数据ucAddr:DS1302地址ucharucDa;T_RST=0;T_CLK=0;T_RST=1;v_RTInputByte(ucAddr);/写地址,命令_nop_();_nop_();ucDa=uc_RTOutputByte();/读1Byte数据T_CLK=1;T_RST=0;return(ucDa);/
13、ucDa:读取的数据voidv_BurstW1302T(uchar*pSecDa)/往DS1302写入时钟数据uchari;v_W1302(0x8e,0x00);/控制命令,WP=0,写操作T_RST=0;T_CLK=0;T_RST=1;v_RTInputByte(0xbe);/0xbe:时钟多字节写命令for(i=8;i0;i-)/8Byte=7Byte时钟数据+1Byte控制v_RTInputByte(*pSecDa);/写1Byte数据pSecDa+;T_CLK=1;T_RST=0;voidv_BurstR1302T(uchar*pSecDa)/读取DS1302时钟数据uchari;T_
14、RST=0;T_CLK=0;T_RST=1;v_RTInputByte(0xbf);/0xbf:时钟多字节读命令for(i=8;i0;i-)*pSecDa=uc_RTOutputByte();/读1Byte数据pSecDa+;T_CLK=1;T_RST=0;voidv_BurstW1302R(uchar*pReDa)/往DS1302寄存器数写入数据pReDa:寄存器数据地址uchari;v_W1302(0x8e,0x00);/控制命令,WP=0,写操作T_RST=0;T_CLK=0;T_RST=1;v_RTInputByte(0xfe);/0xbe:时钟多字节写命令for(i=31;i0;i-
15、)/31Byte寄存器数据v_RTInputByte(*pReDa);/写1Byte数据pReDa+;T_CLK=1;T_RST=0;voidv_BurstR1302R(uchar*pReDa)/读取DS1302寄存器数据pReDa:寄存器数据地址uchari;T_RST=0;T_CLK=0;T_RST=1;v_RTInputByte(0xff);/0xbf:时钟多字节读命令for(i=31;i0;i-)/31Byte寄存器数据*pReDa=uc_RTOutputByte();/读1Byte数据pReDa+;T_CLK=1;T_RST=0;/*输入:pSecDa:初始时间地址。初始时间格式为:
16、秒分时日月星期年*7Byte(BCD码)1B1B1B1B1B1B1B*/voidv_Set1302(uchar*pSecDa)/设置初始时间uchari;ucharucAddr=0x80;v_W1302(0x8e,0x00);/控制命令,WP=0,写操作for(i=7;i0;i-)v_W1302(ucAddr,*pSecDa);/秒分时日月星期年pSecDa+;ucAddr+=2;v_W1302(0x8e,0x80);/控制命令,WP=1,写保护voidv_Get1302(ucharucCurtime)/读取DS1302当前时间ucCurtime:保存当前时间地址。BCD码uchari;uch
17、arucAddr=0x81;for(i=0;i=10)dec-=10;bcd+;bcd1;data1+=bcd3;/用位移代替乘法运算returndata1;voidWrite_DS1302Init(void)/写入数据初始化v_W1302(0x8e,0);v_W1302(0x80,0x50);/写入秒v_W1302(0x8e,0);v_W1302(0x82,0x59);/写入分v_W1302(0x8e,0);v_W1302(0x84,0x07);/写入小时v_W1302(0x8e,0);v_W1302(0x86,0x08);/写入日v_W1302(0x8e,0);v_W1302(0x88,0
18、x06);/写入月v_W1302(0x8e,0);v_W1302(0x8a,0x05);/写入星期v_W1302(0x8e,0);v_W1302(0x8c,0x13);/写入年voidRun_DS1302()ucharsec,min,hour,day,month,year,week;v_W1302(0x8f,0);sec=bcdtodec(uc_R1302(0x81);/读出DS1302中的秒v_W1302(0x8f,0);min=bcdtodec(uc_R1302(0x83);/读出DS1302中的分v_W1302(0x8f,0);hour=bcdtodec(uc_R1302(0x85);/
19、读出DS1302中的小时v_W1302(0x8f,0);day=bcdtodec(uc_R1302(0x87);/读出DS1302中的日v_W1302(0x8f,0);month=bcdtodec(uc_R1302(0x89);/读出DS1302中的月v_W1302(0x8f,0);year=bcdtodec(uc_R1302(0x8d);/读出DS1302中的年v_W1302(0x8f,0);week=bcdtodec(uc_R1302(0x8b);/读出星期v_Lcd12864SetAddress_f(0,0);v_Lcd12864SendData_f(year/10%10+48);v_L
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 热敏电阻 数字 温度计 讲解
限制150内