单片机实例分享,温度记忆杯垫
“记忆杯垫”是我利用身边的材料制作的,杯垫材料是一张光盘,导热材料是硬币,用502胶水和加厚双面胶粘合,制作起来十分简单。
这个作品的设计初衷是源自个人的生活经验,希望和我有着一样烦恼的“技术宅”们会喜欢这个设计。笔者作为“职业码农”,常常遇到这样的困扰:早上冲好的咖啡,放着放着就凉了;同事胃不好,需要喝温水,可一忙就忘记了……想必每个人都有这样的经历,这次的设计,就是给大家解决这一问题——可以及时提醒人们饮用热饮。喜欢喝热饮的朋友,以后不必再因为冷却的热饮而苦皱眉头了!
功能描述
“记忆杯垫”能实现以下功能:当我们把装有温度较高液体的杯子放到杯垫上时,杯垫上安装的温度传感器开始测量杯子的底部温度,只要杯子不是隔热材料的,那么杯子的表层温度就会和里面的液体温度成正比,当杯子内的液体降到了适合人的饮用习惯时,此时按下“记忆键”,杯垫就将永久记录下此时的杯子底层温度;当使用者再次将装有热饮的杯子放在杯垫上时,液体在降温过程中,只要杯子的底层温度与之前记忆的温度接近,杯垫就可以根据设计者的要求提示主人饮用,比如通过闪烁灯提示或者通过音乐提示。
工作原理
这次设计的核心就是围绕温度传感器DS18B20和单片机EEPROM的应用。
DS18B20采集温度,单片机负责数据的处理,当有温度需要记录时,单片机将待记录温度存储到单片机EEPROM中;当EEPROM中有了温度记录后,单片机将采集到的数据与EEPROM中数据随时进行比较,当数据接近时,就会做出相应输出,开启提示功能。
当下次冲好了一杯咖啡,就可以把杯子放到杯垫上面了,温度传感器会将采集到的温度T值与EEPROM里的数值A做比较,当A-1 < T < A+1 时,杯垫侧面的8个发光二极管就会闪烁,以此来提示主人喝咖啡或水。
温度的差值也可以根据设计者的需要自行改变,比如在比较寒冷的地区,T与A的差值可以通过改变程序来实现。笔者在南方,实际测试的时候发现T与A的值在±1之间就可以了。
记忆键在向单片机记录温度数据的时候,也会擦除之前的数据,这样一个按钮就可以完成需要的操作。
国产的STC单片机大多数都自带了一定大小的EEPROM,这就给设计者带来了极大的方便。为了让电路更加简洁,这次选用的是STC11F04E的1T单片机,其具备4KB的程序存储空间和1KB的EEPROM空间,20引脚的封装设计大大减小了PCB面积。图15.1为电路原理图,制作说明见图15.2、图15.3。
图15.1 电路原理图
图15.2
图15.2 光盘中间的圆孔用来放置温度传感器,上面用金属片导热材料固定,并涂上硅脂,增加导热效果,因为大多数杯子底部是凹进去的,也可以用硬币这种有一定厚度的材料导热。
图15.3
图15.3 杯垫的背面,用双面胶(电工固定线盒那种)粘住电池盒、电路板、流水灯,温度传感器已经粘在电路板下面了
程序设计
这里要作出说明的是,大多数DS18B20程序代码都是为12T单片机设计的,而1T单片机指令速度要比12T单片机快很多,这就导致了通常的DS18B20程序不能直接拿来调用。笔者根据STC的官方资料,通过计算指令外加逻辑分析仪测试的方式,得出的结论是,11系列的1T单片机指令要比12T单片机快6.5倍左右,根据这个数据来修改原始DS18B20程序的延时程序和EEPROM程序,就能保证系统的稳定性。
STC绝大多数芯片都集成了EEPROM,不同型号的擦写程序也是大同小异,使用起来十分方便,无需额外EEPROM的IC,更不需要IC通信程序。因为是内部集成的,程序代码简单,很好理解,节约了设计成本的同时,也给应用者节约了程序设计时间。
STC的官方资料很明确地给出了EEPROM的原始程序,笔者根据自己的理解,为使程序更加简洁,对官方程序作了一些改动,应用了C语言的宏定义,自己也做了对应的库文件,方便实用。本程序是在Keil环境下编译的,使用时要添加我自己写的basic.h、STC11Fxx_IAP.h文件,同时要下载官方的单片机库文件,这样方可保证程序的正确编译。
C351和A351语言与长缨8 STC编译器简介
STCx51虚拟单片机与编译器(5):C351和A351语言与长缨8 STC编译器简介
“长缨8 STC编译器”是笔者为STC8系列单片机研制的C语言编译器。长缨8编译器是基于“STC 80351指令集”开发的,“A351”是80351指令集汇编语言的名称,C351是长缨8支持的C语言规范的名称。目前的长缨8编译器V3.x版支持STC 80351的L0和L1等级指令集 。
研制长缨8编译器的目的是为新的采用80351指令集的STC32位单片机的软件工具链进行先行研究,因此并没有计划支持C51语言的全部特征和规范。C351语言规范是Keil的C51的一个子集,子集的大小以能够用C351语言开发出一个8位单片机上的RTOS为标准。
目前这个目标已经实现。笔者的“泰山x51-RTOS”使用C351和A351语言在STC8H8K64U单片机上开发,具体的介绍在STC论坛上笔者的《长缨x51(1)STC单片机软件工具链》帖子里有(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=2490)。
本文将用5个范例程序来介绍C351与C51语言的兼容性,介绍A351与A51语言的兼容性,介绍A351中的80351汇编语言格式以及介绍C351编程方法。范例在文末的附件里。
一、C351语法是C51的一个子集
(1)本文的范例是连接在P2端口上的8个LED灯交替闪烁。下图是范例1的C51主程序:
(2)本文的范例是用Keil的IDE项目组织的,可以直接使用C51编译。长缨8是一个独立的EXE文件,需要用MakeFile的方法来编译Keil的项目。下图四本范例的子目录文件列表:
双击其中的“长缨8_MakeFile.bat”批处理文件就可以对项目进行编译。目录中的“DEMO_STC8H.uvproj.MSG”是长缨8编译器生成的“编译信息”文件,这是一个文本文件,包含编译过程中出现的提示、警告、出错等信息。如果使用的是STC的IDE,这些信息将同步地显示在IDE信息框中。下图是编译成功后的内容:
(3)长缨8作为研究版编译器,C351只支持C51中的简单数据结构、简单语句和简单表达式。对于范例1这样简单的C51程序,不需要做任何简化修改就使用长缨8编译器编译通过,生成正确运行的代码。
二、A351语法是A51的超集
(4)STC 80351-L0指令集是Intel 8051指令集全集。STC 80351-L1指令集则进一步包含了16位、32位的运算和内存操作。长缨8 STC编译器既支持STC 80351-L0指令集,也支持STC 80351-L1指令集。A351支持A51的全部汇编功能和部分宏语言功能。
(5)Intel 8051指令集共有111条指令,范例2以A51汇编的形式给出了这些指令的实例,下图是范例程序开头的部分:
分别用Keil和长缨8对范例进行编译,对生成的HEX文件进行比较可以看到所有指令对应的代码完全一致,A351实现了对A51的全兼容。
(6)范例3是用A51汇编语言实现的范例1的P2端口LED灯交替闪烁效果的程序。分别用Keil和长缨8对范例进行编译,对生成的HEX文件进行比较可以看到两者对应的代码完全一致,A351实现了对A51的全兼容。
(7)范例4是用A351汇编语言实现的范例1的P2端口LED灯交替闪烁效果的程序。下图是其中延时函数的部分:
其中“AX”和“BX”是两个16位的寄存器,利用两层循环实现软件延时。
(8)上面A351程序涉及到STC 80351-L1指令集的指令有:“MVR”指令将右操作数的内容传送给左寄存器,“DECS”指令可以对8/16/32位的寄存器做减1操作,“IS_TRUE”指令判断操作数是否为零。
(9)由于Keil的IDE是主流的STC单片机集成开发环境,而STC 80351指令集的A351汇编语言尚未被C51/C251编译器接受,因此A351/C351语言特别增加了语法元素“配对的忽略符”:第25行的“/*{”和第54行的“}*/” :
在A351/C351语言中,起始忽略符“/*{” 用在程序行的开头,C351/A351编译器将忽略该行程序 。第25行中的下一个“A351”指明下面的程序按照A351汇编语言语法来编译。在A351/C351语言中,结束忽略符“}*/” 用在程序行的开头,后面不要写其他内容,单独占一行程序。
(10)配对的“忽略符”在程序中的用途是“欺骗”C51/C251这样编译器,使得这些编译器认为配对的“忽略符”之间的程序是“块注释”的无关内容,就不会再进行语法检查。
三、C351编程的注意事项
(11)由于C351是C51的子集,因此C351的编程方法参考C51就行了。C351与C51最大的不同是C语言的复杂程度。C51语法是按专业人员的编程水平设计的,可以支持很复杂的语句结构。C351语法是按初学者的编程水平设计的,语法复杂程度控制在谭浩强C语言教材和大学生计算机等级C语言考试的水平上。
如果C351编译器出错而用户又看不出来错在哪里,那么往往是表达式太复杂造成的,用户可以试着引简单变量来简化程序。
(12)下图是范例5的主函数程序部分:
其中第23行和第45行是配对的“忽略符”程序。
(13)C351程序与C51/C251程序最大不同是允许将80351指令写在C语言程序中,就像上面的第29行、第36和37行程序一样。只不过在C351程序中这些指令仍然是C语言程序行,必须用分号结束。
相关问答
380伏电机遥控开关500 1000米距离哪里有卖的[回答]--------------------------------------------------------------------------------[下载]遥控家电定时控制器(原理图及源...