SHT10 C语言程序与LCD1602显示实例及精度校准

需积分: 10 6 下载量 142 浏览量 更新于2024-09-10 收藏 1.08MB DOC 举报
本文档提供了一个针对SHT10温湿度传感器的C语言编程实例,适用于SHT1X系列传感器。作者将程序分解为几个核心模块,包括SHT10通信、LCD1602液晶屏显示、主函数以及相关的头文件。SHT10传感器在25℃和3.3V条件下进行了标定,并考虑到了实际应用中的5V工作电压,因此选择5V时的精度参数。程序采用了14位湿度和12位温度的默认设置。 在代码实现中,作者提供了以下关键功能: 1. 头文件(TOU.H): 包含了宏定义和类型声明,如uchar(无符号字符)、数据和控制寄存器地址定义,以及LCD1602液晶屏的初始化、光标移动、打印字符串和写入字符等函数声明。同时,还包括了SHT10模块的数据连接复位函数`s_connectionreset()`和测量数据获取函数`chars_measure()`。 2. SHT10模块: 该模块负责与SHT10传感器进行通信,包括数据发送和接收,以及连接状态的重置。这部分代码可能涉及到SHT10的I2C接口控制,如时钟信号(SCK)和数据线(DATA)的管理。 3. LCD1602模块: 提供了用于与液晶屏交互的函数,通过设置RS、RW和EN引脚来控制数据的读写。这些函数使得能够向LCD1602显示温度和湿度读数。 4. 主函数: 应该包含了程序的入口点,调用上述模块并处理数据的获取、处理和显示。可能还包括中断处理,尽管文档中没有明确提及,但提到了这一可能性,意味着可能利用中断机制提高程序的响应速度。 5. 仿真支持: 代码已经配备了仿真图,这有助于开发者理解和调试程序在实际硬件上的运行情况。 这份代码适合想要学习或实践SHT10传感器通信和LCD显示的程序员,可以作为基本模板进行修改和扩展,例如添加中断功能以优化实时性。整个程序设计注重了代码的可读性和注释,使得初学者能够逐步理解其工作原理。

class Path(object): def __init__(self,path,distancecost,timecost): self.__path = path self.__distancecost = distancecost self.__timecost = timecost #路径上最后一个节点 def getLastNode(self): return self.__path[-1] #获取路径路径 @property def path(self): return self.__path #判断node是否为路径上最后一个节点 def isLastNode(self, node): return node == self.getLastNode() #增加加点和成本产生一个新的path对象 def addNode(self, node, dprice, tprice): return Path(self.__path+[node],self.__distancecost + dprice,self.__timecost + tprice) #输出当前路径 def printPath(self): for n in self.__path: if self.isLastNode(node=n): print(n) else: print(n, end="->") print(f"最短路径距离(self.__distancecost:.0f)m") print(f"红绿路灯个数(self.__timecost:.0f)个") #获取路径总成本的只读属性 @property def dCost(self): return self.__distancecost @property def tCost(self): return self.__timecost class DirectedGraph(object): def __init__(self, d): if isinstance(d, dict): self.__graph = d else: self.__graph = dict() print('Sth error') #通过递归生成所有可能的路径 def __generatePath(self, graph, path, end, results, distancecostIndex, timecostIndex): current = path.getLastNode() if current == end: results.append(path) else: for n in graph[current]: if n not in path.path: self.__generatePath(graph, path.addNode(n,self.__graph[path.getLastNode()][n][distancecostIndex][timecostIndex]), end, results, distancecostIndex, timecostIndex) #搜索start到end之间时间或空间最短的路径,并输出 def __searchPath(self, start, end, distancecostIndex, timecostIndex): results = [] self.__generatePath(self.__graph, Path([start],0,0), end, results,distancecostIndex,timecostIndex) results.sort(key=lambda p: p.distanceCost) results.sort(key=lambda p: p.timeCost) print('The {} shortest path from '.format("spatially" if distancecostIndex==0 else "temporally"), start, ' to ', end, ' is:', end="") print('The {} shortest path from '.format("spatially" if timecostIndex==0 else "temporally"), start, ' to ', end, ' is:', end="") results[0].printPath() #调用__searchPath搜索start到end之间的空间最短的路径,并输出 def searchSpatialMinPath(self,start, end): self.__searchPath(start,end,0,0) #调用__searc 优化这个代码

2023-06-07 上传

class Path(object): def __init__(self,path,cost1,cost2): self.__path = path self.__cost1 = cost1 self.__cost2 = cost2 #路径上最后一个节点 def getLastNode(self): return self.__path[-1] #获取路径路径 @property def path(self): return self.__path #判断node是否为路径上最后一个节点 def isLastNode(self, node): return node == self.getLastNode() #增加加点和成本产生一个新的path对象 def addNode(self, node, price1,price2): return Path(self.__path+[node],self.__cost1+ price1,self.__cost2+ price2) #输出当前路径 def printPath(self): global num #将num作为循环次数,即红绿灯数量 global distance num = 0 for n in self.__path: if self.isLastNode(node=n): print(n) else: print(n, end="->") num += 1 print("全程约为 {:.4}公里".format(str(self.__cost1))) print("时间大约为 {}分钟".format(str(self.__cost2))) print("需要经过{}个红绿灯".format(num)) distance = self.__cost1 #获取路径总成本的只读属性 @property def travelCost1(self): return self.__cost1 @property def travelCost2(self): return self.__cost2 class DirectedGraph(object): def __init__(self, d): if isinstance(d, dict): self.__graph = d else: self.__graph = dict() print('Sth error') def __generatePath(self, graph, path, end, results): #current = path[-1] current = path.getLastNode() if current == end: results.append(path) else: for n in graph[current]: #if n not in path: if n not in path.path: #self.__generatePath(graph, path + [n], end, results) self.__generatePath(graph, path.addNode(n,self.__graph[path.getLastNode()][n][0],self.__graph[path.getLastNode()][n][1]),end, results) #self.__gener给该代码加一个可以保存输入记录并且能够查询显示的功能

2023-06-13 上传