开 始 单片机初始化 测身高 测体重 测体重入口 参数初始化 转换存储 参数初始化 单片机初始化 返回 结束
图4.2 主程序流程图 图4.3 称重主程序流程图
4.3 测量身高部分软件设计
测量身高采用超声波测量,单片机的P2.7口为超声波的发射提供计数脉冲,使产生200ms的40KHZ的方波脉冲,当时间到达后假如仍没有收到反射回来的超声波,则重新发射超声波,直到收到反射波为止。在这里有一点值得注意,在开机的时候先不要急于测量,让机器先测量超声波源于人要所站的平面地的距离,并存入单片机的内存单元50H和51H,当有人测量时,测出的距离为波源于人头顶的距离,并存入内存单元30H和31H,这时,通过单片机软件设计将50H和51H单元的内容减去30H和31H的内容即得出人的身高,这样可以保证测量的准确性。身高数据传入单片机是通过INT0口的中断,一旦数据传入将直接处理显示,它可能会中断体重测量的数据处理和显示,但不会影响数据的准确性,它与体重测量结果的显示不存在先后问题。测量身高的主程序流程图如图12,定时服务子程序及中断子程序流程图分别如图13((a)、(b))。
14
测身高入口
定时中断子程序 有回波吗? Y N 外部中断子程序 返回 图12 测量身高的主程序流程图
外部中断入口
定时中断入口 关外部中断 定时器初始化 读取时间值 发出超声波 计算距离 时间到停止发射 结果输出 返回 关外部中断 返回 (a)定时子程序 (b)中断子程序
图4.4 服务子程序
15
4.4 A/D转换部分程序流图
首先写单片机初始化,单片机信号通道设置和数据转换模数式子程序,读取数据通道入口由主程序定, A/D转换子程序返回转换后的二进制结果。主程序对获取的二进制结果数据进行处理转换为体重值。如图14所示A/D转换部分程序流图:
开始 初始化 否 判断通道是否由数据输入 是 开始转换 返回转换结果
图4.5 A/D转换部分程序流图
4.5 LCD显示部分程序
显示部分包括字符串显示和单字符显示。无论是字符串显示还是单字符显示在LCD写数据指令前后都应有延时程序,否则第一个字符会丢失或是显示会不正常,因为程序处理需要时间没有延时,数据读取太快,就好使得显示不正常。获
16
取到的数值需要单字符显示需要写入循环指令中标志需要显示的值的字符应写也外部。对于读取的体重值要根据传感器量程写报警程序和显示程序。也需要对于在没有体重输入的情况下写显示程序。
BMI值和身体质量指数测试结果的显示需要根据BMI标准,对获得的值进行判断用户是否正常,BMID的计算公式如公式5所示,成人的BMI数值标准如表2所示:
(BMI)=体重(kg)/身高(m)^2 (4-1)
表1成人的BMI数值标准
体重指数(最理想的体重指数:22) \\ 过轻 适中 过重 肥胖 非常肥胖 男性 低于20 20-25 25-30 30-35 高于35 女性 低于19 19-24 24-29 29-34 高于34 由于LCD本身存在缺陷——不可显示中文字符,也为了减少设计成本故而本设计根基标准BMI值的范围设定了五个健康质量测试结果result输出范围:A,B,C,D,E(以女性的参考范围定义)如表3成人的BMI测试结果所示:
表2成人的BMI测试结果
BMI(以女性的BMI值为标准) 22 19-22,22-24 24-29,<19 29-34 >34 软件流程图如图15所示:
Result A B C D E 17
开始 否 初始化 判断是否输入身高 是 显示升高 否 判断获取体重值范围 是 显示BMI和输出测量结果 显示字符串
图15 LCD程序流图
第五章 总结
学贵以致用,通过几天的智能秤设计过程,将从书本上学到的知识应用于实践,学会了初步的电子电路仿真设计,虽然过程中遇到了一些困难,但是在解决这些问题的过程无疑也是对自己自身专业知识的一种提高。当最终调试成功的时候也是对自己的一种肯定。此次的设计作业不仅增强了自己在专业设计方面的信心,鼓舞了自己,更是一次兴趣的培养,为自己以后的学习方向的明确了重点。
另外在这次实验中我们遇到了不少的问题针对不同的问题我们采取不同的解决方法,遇到不懂的问题时,利用网上的资源,搜索查找得到需要的信息。
最终一一解决设计中遇到的问题。通过错误排除最终确认是传感器的问题。我觉得我们能够顺利完成此设计的关键是团队合作,当然知识储备也不能忽略。
18