基于stm32f107的智能电子秤的设计内容摘要:

可选择 10Hz 或 80Hz 的 输出数据速率 • 同步抑制 50Hz 和 60Hz 的电源干扰 • 耗电量(含稳压电源电路):典型工作电流: , 断电电流: 1181。 A • 工作电压范围: ~ • 工作温度范围: 40 ~ +85℃ • 16 管脚的 SOP16 封装 图 7 3 系统软件设计 stm32 的介绍 STM32F107 是意法半导体推出全新 STM32 互连型( Connectivity)系列微控制器中的一款性能较强产品,此 芯片集成了各种高性能工业标准接口,且 STM32不同型号产品在引脚和软件上具有完美的兼容性,可以轻松适应更多的应用。 新 STM32 的标准外设包括 10 个定时器、两个 12 位 1Msample/s AD(模数转换器 ) (快速交替模式下 2M sample/s)、两个 12 位 DA(数模转换器 )、两个 I2C 接 9 口、五个 USART 接口和三个 SPI 端口和高质量数字音频接口 IIS,另外STM32F107 拥有全速 USB( OTG)接口,两路 接口,以及以太网 10/100 MAC 模块。 此芯片可以满足工业、医疗、楼宇自动 化、家庭音响和家电市场多种产品需求。 主程序设计 电子秤的最基本功能为称重功能,程序设计的出发点必须是保证称重的准确性。 但是由于没有用压力传感器无法测出物体实重,因此在本设计中设定了一个重量初始值,再通过按键调整它的大小,并设定了一个上限值当重量到达上限值时蜂鸣器就会发出响声。 通过 k5按键可以实现其加减 的功能,同样单价也是这样调整的。 通过切换键 k8 可以使显示结果在单价、重量、总价钱之间切换,切换键的使用减少了按键的使用,节省了资源。 显示模块采用的是 12864LCD液晶显示器,这种显示器自 带字符发生器,因此可直接写要显示的字符如“ dj”、“ zl”、“ jq”,或者写它们的 ASCII 值都会有正确的显示,大大的简化了程序的编写。 在编程时,只需把字符(数据)写进 12864 液晶,在指定的位置将结果显示出来即可,再通过按键实现调整切换等功能。 如下图 所示: 10 开始 系统初始化 while 大循环 采集传感器数据 量程判断 蜂鸣器报警 按键值 LCD 显示 11 按键处理程序 在 stm32F107 系统中,键盘按连接形式可分为独立连接键盘、矩阵式键盘和薄膜开关。 本设计中用的是独立连 接式键盘。 当键没有按下时,所有的数据输入线都为高电平;当有一按键被按下时,与之相连的数据输入线将变为低电平;通过相应指令,可以判断是否有按键按下。 按键要正确发挥作用必须消除抖动。 所谓抖动,是一种由于按键是机械式的弹性开关,通常在按键按下和抬起的时候会出现多次闭合或者断开的现象,如图 33 所示。 通常抖动时间为 5ms~10ms,稳定闭合区的时间由按键动作决定, CPU 往往会在闭合抖动时检测到多次电平的变化。 消除硬件抖动有硬件和软件两种方式。 硬件消抖方法是在按键输入通道上添加去抖动电路,从根本上避免电压抖动的产生。 软件消抖方法则采用延迟5~10ms 时间,待电压稳定后,再进行状态输入。 在本设计中用延时的方法就足够了。 图 8 按键时波 形 当抖动的问题消除以后,还必须判断按键者是否将按键释放。 通常按键的稳定闭合区的时间最少也有上百毫秒,是抖动时间的数十倍,如果按键者持续按下按键不松手,那么按键一直处于闭合状态。 这种状态会导致 CPU 误以为按键被按多次,为了避免这种错误,程序需要判断按键被松开,这样才是一个完整的按键动作。 用等待查询的方法就可以判断了。 12864 液晶简介 12 液晶显示模块是 128 64 点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置 8192 个中文汉字( 16X16 点阵)、 128 个字符( 8X16 点阵)及 64X256点阵显示 RAM( GDRAM)。 可与 CPU 直接接口,提供两种界面来连接微处理机:8位并行及串行两种连接方式。 具有多种功能:光标显示、画面移位、睡眠模式等。 压力传感器介绍 将压力转换为电信号输出的传感器。 通常把压力测量仪表中的电测式仪表称为压力传感器。 压力传感器一般由弹性敏感元件和位移敏感元件(或应变计)组成。 弹性敏感元件的作用是使被测压力作用于某个面积上并转换为位移或应变,然后由位移敏感元件(见位移传感器)或应变计(见电阻应变计、半导体应变计)转换为与压力成一定关系的电信号。 有时把这两种 元件的功能集于一体,如压阻式传感器中的固态压力传感器。 压力是生产过程和航天、航空、国防工业中的重要过程参数,不仅需要对它进行快速动态测量,而且还要将测量结果作数字化显示和记录。 13 结 论 本设计的研究课题为智能电子秤的设计,要求在学习并掌握单片机的工作原理、编程方法及系统设计的前提下分析电子秤的工作原理、基本功能,最后编写软件程序连接硬件电路来实现功能。 电子秤基本功能包括显示和调节,需要单价、质量、总价的正确显示和单价大小调整功能。 系统以 stm32 单片机 为控制芯片,显示模块用12864LCD 液晶显示器显示实现,调节单价模块和显示切换模块采用13 个独立按键的方式。 设计以结构性、可读性、功能性强的 C 语言作为编程语言,在 Keil uVision 开发环境下编写应用程序,采用模块化编程思想,结合硬件电路作整体调试,最终实现电子秤的基本功能。 作为单片机初学者,通过这次实践,了解了电子秤的用途及工作原理,熟悉了用 KEIL 编程、 ISP 下载总线验证程序编写是否正确的步骤、 PROTEL 软件的使用等,不仅锻炼了工程设计实践能力,也培养了独立设计能力。 巩固了所学知识,掌握单片机工 作原理,熟习硬件、软件系统设计的过程,锻炼动手能力、查阅资料能力、综合运用知识的能力,以及培养团队合作的精神,为今后工作打下了一定的基础。 但是此次毕业设计也暴露出自己专业基础的很多不足之处,比如缺乏综合应用专业知识的能力,对材料的不了解,缺乏对与专业相关知识的了解,遇困难容易烦躁,没耐心实际动手能力差等。 14 参考文献 [1] 赵茂泰 .智能仪器原理及应用 [M].北京:电子工业出版社 .. [2] 马忠梅等. stm32F107 的 C语言应用程序设计 [M].北京:北 京航空航天大学出版社,2020. [3] 刘瑞新 .stm32F107 原理及应用教程 [M].机械工业出版社, . [4] 王东峰等. stm32F107C 语言应用 100例 [M].北京:电子工业出版社, 2020. [5] 李平等. stm32F107入门与开发 [M].北京:机械工业出版社, 2020. [6] 张毅刚等. MCS51stm32F107应用设计 [M].哈尔滨:哈尔滨工业大学出版社, 1997. [7] 沙占友等 .智能传感器系统设计与应用 [M].北京:电子工业 出版社, . [8] 王伟,刘晓平 .高精度数字电压表方案设计 [J].仪表技术 ,2020,(4): 3639. [9] 江思敏等. Altium Designer(Protel)原理图与 PCB设计教程 [M].北京:机械工业出版社, 2020. [10] 刘守义等. stm32F107 技术基础 [M].西安:西安电子科技大学出版社, 2020. [11] 陈海宴等. 51stm32F107 原理及应用 [M].北京:北京航空航天大学出版社, 2020. [12] TINSHARP. TC1602B01 Specification For Approval[EB/OL]. ,2020. [13] Dallas Semiconductor Corp. Programmable Resolution 1Wire Digital Thermometer [EB/OL]. , 2020. [14] Atmel Corporation. AT24C02A/04A/08A/16A[EB/OL]. , 2020. [15] Lance Hammond, Basem , Kunle Olukotun. A SingleChip Multiprocessor[J]. Stanford University, 1997. [16] 钟富昭等. 8051stm32F107典型模块设计与应用 [M].北京:人民邮电出版社, 2020. 15 致 谢 非常感谢王焕友老师在我大学的最后学习阶段 毕业设计阶段给我的指导,从最初的定题,到资料收集,到写作、修改,到论文定稿,他都给 了我耐心的指导和无私的帮助。 为了指导我的毕业论文,他花费了大量的时间和精力,这种无私奉献的敬业精神令人钦佩,在此我向他表示我诚挚的谢意。 同时,感谢所有任课老师和所有同学在这四年来给自己的指导和帮助,是他们教会了我专业知识,教会了我如何学习,教会了我如何做人。 正是由于他们,我才能在各方面取得显著的进步,在此向他们表示我由衷的谢意,并祝所有的老师培养出越来越多的优秀人才,桃李满天下 ! 通过这一阶段的努力,我的毕业论文《 基于 stm32F107 的智能电子秤的设计 》终于完成了,这意味着大学生活即将结束。 在大学 阶段,我在学习上和思想上都受益非浅,这除了自身的努力外,与各位老师、同学和朋友的关心、支持和鼓励也是分不开的。 再次表示十分感谢。 16 附录 源代码 主程序 include include include include char weight[10]。 unsigned int index=0,x_flag=0,x_i=0。 float price=0。 unsigned int key_in_value[10]。 char send_message[10]。 float temp=0。 int wht=0。 extern unsigned long HX711_Read(void)。 extern void int_to_str(int n,unsigned char ch[])。 void Dout_IO_configuration(int flag) { GPIO_InitTypeDef GPIO_InitStructure。 if(flag ==1) { = HX711_DOUT。 = GPIO_Mode_IN_FLOATING。 = GPIO_Speed_50MHz。 GPIO_Init(GPIOA, amp。 GPIO_InitStructure)。 }。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。