2022年基于热敏电阻数字温度计课程设计.doc
《2022年基于热敏电阻数字温度计课程设计.doc》由会员分享,可在线阅读,更多相关《2022年基于热敏电阻数字温度计课程设计.doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于热敏电阻数字温度计课程设计 单片机应用系统(三级)项目 设计说明书 (2020/2020学年第二学期) 题 目 : 基于热敏电阻的数字温度计 _ 专业班级 : 电子信息工程 学生姓名 : 指导教师 : 设计周数 : 两周 设计成绩 : 2020年X月X日 目录 1实验设计目的 2 2系统软件设计 2 2.1软件总体流程设计 2 2.2系统设计及主要程序 3 2.2.1系统主函数 3 2.2.2汉显lcd12864 4 2.2.3时钟芯片DS1302 6 2.2.4ADC0832 11 2.3上位机设计及主要代码 14 2.3.1SerialPort 组件 14 2.3.2串口操作 15 2
2、.3.3数据的接收 15 2.3.4保存数据与清空数据 17 3系统硬件电路设计 17 3.1恒温桥电路 17 3.2信号放大电路 18 3.3A/D转换电路 18 3.4控制电路 19 3.5显示电路 20 4总结与展望 20 参考文献 21 1实验设计目的 随着以知识经济为特征的信息化时代的到来人们对仪器仪表的认识更加深入,温度作为一个重要的物理量,是工业生产过程中最普遍,最重要的工艺参数之一。随着工业的不断发展,对温度的测量的要求也越来越高,而且测量的范围也越来越广,对温度的检测技术的要求也越来越高,因此,温度测量及其测量技术的研究也是一个很重要的课题。 本系统的温度测量采用的就是热阻效
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模数转换。主要代码实现如下: #include “reg52.h“ #include “intrins.h“ #include “lcd12864.h“ #include “D
5、S1302.h“ #include “ADC0832.h“ #define uchar unsigned char #define uint unsigned int void main( 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,
6、1, “分“) ; v_Lcd12864PutString_f( 5,1, “秒“) ; v_Lcd12864PutString_f( 5,2, “); while(1) Run_DS1302(); displayADC (); send(); _nop_; 2.2.2汉显lcd12864 主要实现汉显lcd12864接收时钟芯片DS1302与A/D转换模块传递来的温度与时间,并显示在液晶屏上。主要代码实现如下: #include“lcd12864.h“ #include “intrins.h“ #define uchar unsigned char #define uint unsigned
7、 int void v_Lcd12864CheckBusy_f( void ) /忙检测函数 unsigned int nTimeOut = 0 ; SET_INC SET_READ CLR_EN SET_EN while( ( io_LCD12864_DATAPORT & 0x80 ) & ( +nTimeOut != 0 ) ) ; CLR_EN SET_INC SET_READ void v_Lcd12864SendCmd_f( unsigned char byCmd ) /发送命令 v_Lcd12864CheckBusy_f() ; SET_INC SET_WRITE CLR_EN i
8、o_LCD12864_DATAPORT = byCmd ; _nop_(); _nop_(); SET_EN _nop_(); _nop_(); CLR_EN SET_READ SET_INC void v_Lcd12864SendData_f( unsigned char byData ) /发送数据 v_Lcd12864CheckBusy_f() ; SET_DATA SET_WRITE CLR_EN io_LCD12864_DATAPORT = byData ; _nop_(); _nop_(); SET_EN _nop_(); _nop_(); CLR_EN SET_READ SET_
9、INC void v_DelayMs_f( unsigned int nDelay ) /延时 unsigned int i ; for( ; nDelay 0 ; nDelay- ) for( i = 125 ; i 0 ; i- ) ; void v_Lcd12864Init_f( void ) /初始化 v_Lcd12864SendCmd_f( 0x30 ) ; /基本指令集 v_DelayMs_f( 50 ) ; v_Lcd12864SendCmd_f( 0x01 ) ; /清屏 v_DelayMs_f( 50 ) ; v_Lcd12864SendCmd_f( 0x06 ) ; /光标
10、右移 v_DelayMs_f( 50 ) ; v_Lcd12864SendCmd_f( 0x0c ) ; /开显示 void v_Lcd12864SetAddress_f( unsigned char x, y ) /地址转换 unsigned char byAddress ; switch( y ) case 0 : byAddress = 0x80 + x ; break; case 1 : byAddress = 0x90 + x ; break ; case 2 : byAddress = 0x88 + x ; break ; case 3 : byAddress = 0x98 + x
11、 ; break ; default : break ; v_Lcd12864SendCmd_f( byAddress ) ; void v_Lcd12864PutString_f( uchar x, uchar y, uchar *pData ) v_Lcd12864SetAddress_f( x, y ) ; while( *pData != 0 ) v_Lcd12864SendData_f( *pData+ ) ; 2.2.3时钟芯片DS1302 主要为汉显12864提供时间输出。主要代码实现如下: #include“DS1302.h“ #include“intrins.h“ #incl
12、ude“lcd12864.h“ #define uchar unsigned char #define uint unsigned int void v_RTInputByte(uchar ucDa) / 功能 : 往DS1302写入1Byte数据 uchar i; ACC = ucDa; T_RST = 1; for(i=8; i0; i-) T_IO = ACC0; T_CLK = 1; T_CLK = 0; ACC = ACC 1; uchar uc_RTOutputByte(void)/从DS1302读取1Byte数据 uchar i; T_RST = 1; for(i=8; i0;
13、i-) ACC = ACC 1; T_IO=1; ACC7 = T_IO; T_CLK = 1; T_CLK = 0; return(ACC); void v_W1302(uchar ucAddr, uchar ucDa) /往DS1302写入数据 ucAddr: DS1302地址, ucDa: 要写的数据 T_RST = 0; T_CLK = 0; T_RST = 1; v_RTInputByte(ucAddr); / 写地址 _nop_(); _nop_(); v_RTInputByte(ucDa); / 写1Byte数据 T_CLK = 1; T_RST = 0; uchar uc_R1
14、302(uchar ucAddr) /读取DS1302某地址的数据 ucAddr: DS1302地址 uchar ucDa; 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); /ucDa :读取的数据 void v_BurstW1302T(uchar *pSecDa) /往DS1302写入时钟数据 uchar i; v_W1302(0x8e
15、, 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; void v_BurstR1302T(uchar *pSecDa) /读取DS1302时钟数据 uchar i; T_RST = 0; T_CLK = 0; T_RST = 1; v_RT
16、InputByte(0xbf); /0xbf:时钟多字节读命令 for(i=8; i0; i-) *pSecDa = uc_RTOutputByte(); /读1Byte数据 pSecDa+; T_CLK = 1; T_RST = 0; void v_BurstW1302R(uchar *pReDa) /往DS1302寄存器数写入数据 pReDa: 寄存器数据地址 uchar i; v_W1302(0x8e,0x00); /控制命令,WP=0,写操作 T_RST = 0; T_CLK = 0; T_RST = 1; v_RTInputByte(0xfe); /0xbe:时钟多字节写命令 for
17、(i=31; i0; i-) /31Byte 寄存器数据 v_RTInputByte(*pReDa); /写1Byte数据 pReDa+; T_CLK = 1; T_RST = 0; void v_BurstR1302R(uchar *pReDa) /读取DS1302寄存器数据 pReDa: 寄存器数据地址 uchar i; T_RST = 0; T_CLK = 0; T_RST = 1; v_RTInputByte(0xff); /0xbf:时钟多字节读命令 for(i=31; i0; i-) /31Byte 寄存器数据 *pReDa = uc_RTOutputByte(); /读1Byte
18、数据 pReDa+; T_CLK = 1; T_RST = 0; /* * 输入 : pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B */ void v_Set1302(uchar *pSecDa) /设置初始时间 uchar i; uchar ucAddr = 0x80; v_W1302(0x8e, 0x00); /控制命令,WP=0,写操作 for(i=7; i0; i-) v_W1302(ucAddr, *pSecDa); / 秒 分 时 日 月 星期 年 pSecDa+; ucAddr
19、 += 2; v_W1302(0x8e, 0x80); /控制命令,WP=1,写保护 void v_Get1302(uchar ucCurtime) /读取DS1302当前时间 ucCurtime: 保存当前时间地址。 BCD码 uchar i; uchar ucAddr = 0x81; for(i=0; i= 10) dec -= 10; bcd+; bcd data1 += bcd 1; data1 += bcd 3; /用位移代替乘法运算 return data1; void Write_DS1302Init(void) /写入数据 初始化 v_W1302(0x8e,0); v_W130
20、2(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,0x06); /写入月 v_W1302(0x8e,0); v_W1302(0x8a,0x05); /写入星期 v_W1302(0x8e,0); v_W1302(0x8c,0x13); /写入年 void Run_DS1302() uchar sec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 基于 热敏电阻 数字 温度计 课程设计
限制150内