首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

温度测量电路板

温度测量电路板

—— 软件篇

现在在常州实习,目前参观了恒立液压,看了他们各个分公司……得出一个结论,一定要好好读书┭┮﹏┭┮。今天和室友吃了顿好的,happy之下在房间开启电视音响唱了唱歌,心情好把这篇补补完。

首先上一下软件的框图,使用visio画的。这个软件最开始用的时候,因为不熟悉用起来还是有点气的,后来用习惯了发现还不错。包括液压大作业路阀分析的框图也是用这个软件画的,老师说非常漂亮……

程序可以大概分成5个部分。这一节讲两个,主要是怎么用ADC0832

①温度读取功能(核心)

ADC0832是一款很老的8位模/数转换器,以前对数模或者模数转换有一种莫名的恐惧感,因为在学习数电的时候,被它的复杂程度吓到过。但真正用过之后,其实用户只需要按照要求读取数据即可。而要求,就是根据datasheet提供的时序图写代码,如上图。

主要的函数包括:

void initADC0832();

void startADC0832();

void chooseADC0832();

void stopADC0832();

int readADC0832();

由于还是比较多的所以这部分放在github中:

https://github.com/IMIMyzj/51/blob/master/software3.0/ADC0832.c

这里要说明几个关键点。initADC0832函数,主要准备好CLK和CS两根线,而实际的启动信号在startADC0832中实现,对应第一次上升沿。chooseADC0832是选择好模拟信号的通道,关于怎么选是要操控第二、三次上升沿信号时候DI高低电平的组合。由于我选择的CH0通道,所以对应为10信号。

最关键的是readADC0832中的读取代码,前面都是在上升沿进行模式选择的,而接下去的数据是在下降沿时候读取的哦~而且它数据是从高到低在从低到高,其中0位不重复,我最开始错就错在多读了个0位结果崩了。然后其实后面7位也可不去读取它。还有一点小细节,51的I/O口要去读取之前先要置1

②处理ADC数字信号

由于得到的ADC转换过程中数据存在舍位现象,所以对得到的数据先1处理。然后根据5V表示255将tp值转换为电压数值,除以AMPratio即运放放大倍数从而得到温度传感器实际上输出的电压值。根据10mV/℃的比例转换为temp值即温度值的100倍。temp数据在后面由浮点数转换成了整型数据,因为这个过程程序是直接舍去小数点后面的数字,所以在temp后面加上0.5来弥补这方面的误差。最后将每位数字截下来送到数码管显示数组里即完成了数据的处理过程。

这一节讲附加功能,即数码管显示,模式选择和温度上下限设定。

①数码管显示功能

void Display(){

u8 i;

for (i = 0; i

switch (i) {

case(0):

P2 = 0x0E;

break;

case(1):

P2 = 0x0D;

break;

case(2):

P2 = 0x0B;

break;

case(3):

P2 = 0x07;

break;

default:

break;

}

P0 = DisplayData[i];

delay(50);

P0 = 0x00;//消隐

}

}

数码管显示的方式为扫描的方式,持续的时间为50μs,这个数字是在调试中发现可以较亮较稳定显示的参数。一次使能数码管的一位,不同的模式会处理得到不同的数据,但都存在数组DisplayData[4]里,所以显示功能只需要Display()这一个函数即可。

④温度上下限设定功能

温度设定模式必须先经过keyScan()函数设定。处在该模式下的时候,就要用keySet()函数来检测按键的动作判断需要升高温度还是降低温度。并且函数中对温度进行一个限制,使得最高温度有上限,最低温度有下限,最高温度一定大于最低温度。同理,最低温度不会高于最高温度。而具体怎么操做设定其实就是用一个函数专门给DisplayData[4]数组来赋值。为了在实际操作中能够知道自己处于什么模式,把数码管的第一位作为标志位,如下图

⑤温度报警功能

温度报警功能只会在温度正常显示模式下起到作用,从而防止在设定温度过程中出现报警这种不好的现象。当温度不在设定的范围内时,蜂鸣器就会有1ms的发声从而做出短暂的提示。Time1Init()是定时器1的初始化函数,其主要功能是用来实现1ms定时器1定时功能的初始化,配合其中断函数实现1S的增量计时。当温度一旦不在设定范围内,数码管的四位分别显示“E”、“ ”、“计时十位”、“计时个位”。计时的总时长为10s,如果在10s内温度回到正常范围,就会重新正常显示温度而如果10s过去温度仍然处于设定范围外,这时数码就会显示“ERRO”字样,并且蜂鸣器一直响,直到温度回到正常范围才脱离这个现象,重新进入大的主循环。具体代码见github哦~

https://github.com/IMIMyzj/51/blob/master/software3.0/main.c

Author/MelonEater

长按二维码关注哦

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180725G209AB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券