基于热敏电阻的数字温度计_毕业设计论文(编辑修改稿)内容摘要:

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(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 寄存器数据 基于热敏电阻的数字温度计 第 9 页 共 22 页 { *pReDa = uc_RTOutputByte()。 //读 1Byte数据 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 += 2。 } v_W1302(0x8e, 0x80)。 //控制命令 ,WP=1,写保护 } void v_Get1302(uchar ucCurtime[]) //读取 DS1302当前时间 ucCurtime: 保存当前时间地址。 BCD码 { uchar i。 uchar ucAddr = 0x81。 for(i=0。 i7。 i++) { ucCurtime[i] = uc_R1302(ucAddr)。 //格式为 : 秒 分 时 日 月 星期 年 ucAddr += 2。 } } uchar dectobcd(uchar dec) //DEC码转换为 BCD码 { uchar bcd。 bcd = 0。 while(dec = 10) { dec = 10。 bcd++。 } bcd = 4。 bcd |= dec。 基于热敏电阻的数字温度计 第 10 页 共 22 页 return bcd。 } uchar bcdtodec(uchar bcd) //BCD码转换为 DEC码 { uchar data1。 data1 = bcd amp。 0x0f。 //取 BCD低 4位 bcd = bcd amp。 0x70。 //剔除 BCD的最高位和低 4位。 data1 += bcd 1。 data1 += bcd 3。 //用位移代替乘法运算 return data1。 } void Write_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,0x06)。 //写入月 v_W1302(0x8e,0)。 v_W1302(0x8a,0x05)。 //写入星期 v_W1302(0x8e,0)。 v_W1302(0x8c,0x13)。 //写入年 } void Run_DS1302() { uchar sec, 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))。 //读出 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)。 基于热敏电阻的数字温度计 第 11 页 共 22 页 v_Lcd12864SendData_f( year /10 % 10 + 48 )。 v_Lcd12864SendData_f( year% 10 + 48 )。 v_Lcd12864SetAddress_f(2,0)。 v_Lcd12864SendData_f( month / 10 % 10 + 48 )。 v_Lcd12864SendData_f( month % 10 + 48 )。 v_Lcd12864SetAddress_f(4,0)。 v_Lcd12864SendData_f( day / 10 % 10 + 48 )。 v_Lcd12864SendData_f( day % 10 + 48 )。 v_Lcd12864SetAddress_f(6,0)。 v_Lcd12864SendData_f( week + 48)。 v_Lcd12864SetAddress_f(0,1)。 v_Lcd12864SendData_f( hour /10 % 10 + 48 )。 v_Lcd12864SendData_f( hour % 10 + 48 )。 v_Lcd12864SetAddress_f(2,1)。 v_Lcd12864SendData_f( min /10 % 10 + 48 )。 v_Lcd12864SendData_f( min % 10 + 48 )。 v_Lcd12864SetAddress_f(4,1)。 v_Lcd12864SendData_f( sec /10 % 10 + 48 )。 v_Lcd12864SendData_f( sec % 10 + 48 )。 } 本系统最重要的模块,是实现本项目 —— 数字温度计系统基本功能的核心模块,在本模块中传递出 0~255共 256个数字,然后通过分段计算得出温度。 本模块代码中还加入了串口。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。