一种基于单片机的车载日历时钟并温度测量系统

申请号 CN202111179742.1 申请日 2021-10-11 公开(公告)号 CN113984230A 公开(公告)日 2022-01-28
申请人 沈阳化工大学; 发明人 陈斌; 曹钧铭; 杨嘉妮; 刘阳; 谷文通; 孟祥来; 刘浩然;
摘要 一种基于 单片机 的车载日历时钟并 温度 测量系统,涉及一种车载 电子 显示系统,本 发明 以AT89S52单片机为核心,设计了一种智能车载日历时钟及温度测量系统。车载日历时钟及温度测量系统的核心功能是实现日历时钟的准确运行和温度测量的功能。发明主要依赖时钟芯片和温度 传感器 来传递参数。系统主要包括日历时钟、温度检测、按键、显示等部分。系统通过采用时钟 电路 芯片实现时钟的实时显示功能,并采用温度传感器实现 环境温度 的采集和A/D 信号 的转换,再通过单片机将其送入数码管进行显示。该系统能够快速检测并反映在数码管上,测量 精度 为±0.5℃,测量精度高且读数方便,给驾乘人员提供更多的日常参数,方便了生活中随时需要了解的多种信息。
权利要求

1.一种基于单片机的车载日历时钟并温度测量系统,其特征在于,所述系统包括日历时钟模、温度检测模块、按键模块、显示模块、传感器、数码管、定时器、芯片、按键;系统采用时钟电路芯片实现时钟的实时显示,并采用温度传感器实现环境温度的采集和A/D信号的转换,再通过单片机将其送入数码管进行显示;系统以AT89S52单片机为核心,采用DS18B20传感器采集温度数值进行处理和转换,该传感器直接与单片机交换数据,不再需要A/D信号处理电路,并采用外部车载电源供电的方式;采用DS1302芯片实现实时日历时钟,与主机串行通信,对年、月、日、周、时、分、秒进行计时,具有闰年补偿,通过三根线连接到单片机引脚上进行数据的传递,存储关键数据及相应的时间;VCC1连接备用电源,VCC2为主电源,备用电源使芯片在系统掉电情况下内部数据不丢失,DS1302由两电源中的较大者供电;
系统通过HD7279芯片控制按键和LED数码管进行人机交互,通过两片HD7279管理的16个共阴极LED数码管分别显示时钟日历和温度参数,三个按键分别实现进入/保存设置功能、选择要设置的LED位、修改需设置位的参数,HD7279芯片的RC引脚外接震荡元件,相应电阻值R为1.5kΩ,电容值C为15pF;第一片HD7279的片选端连接到单片机的P1.4引脚,第二片HD7279的片选端连接到单片机的P2.0引脚;X5045芯片实现看狗复位;键盘显示器管理芯片、时钟芯片和测温传感器器件与单片机之间串行通讯,使单片机可扩展连接更多的外围设备
2.根据权利要求1所述的一种基于单片机的车载日历时钟并温度测量系统,其特征在于,所述系统每个时间片通过T1定时器定时,共20个时间片。
3.根据权利要求1所述的一种基于单片机的车载日历时钟并温度测量系统,其特征在于,所述三个机械按键和16个共阴极LED数码管通过两片HD7279管理。

说明书全文

一种基于单片机的车载日历时钟并温度测量系统

技术领域

[0001] 本发明涉及一种车载电子显示系统,特别是涉及一种基于单片机的车载日历时钟并温度测量系统。

背景技术

[0002] 单片机电子产品已经走进了“寻常百姓家”,如今在电子信息的应用领域内,设计者能在很小的区域内实现更丰富的功能。
[0003] 在日常生活中,人们虽然对温度测量精度没有特别的要求,但对实时反映环境温度也提出了新的需要。
[0004] 如《基于单片机的温度报警器》(柳文静,电子测试,2020(03):5‑7)〔1〕。
[0005] 普通的测温设备没法满足人们对实时反映温度的要求,更加需要设计一款较为理想的温度测量系统。
[0006] 建立在单片机的基础上的日历时钟,是一种应用非常广泛的日常计时工具。这样的电子时钟计时准确,显示信息全备性价比高还可以夜视,扩展出很多功能。
[0007] 因此,以单片机为核心,设计了一种车载日历时钟及温度测量系统,是车载系统智能化发展的底层系统设计,对于整个车载系统的正常运行起着非常重要的作用。

发明内容

[0008] 本发明的目的在于提供一种基于单片机的车载日历时钟并温度测量系统,本发明通过多种模的组合连接实现了单片机车载日历时钟并温度测量等数据,给驾乘人员提供更多的日常参数,方便了生活中随时需要了解的多种信息。
[0009] 本发明的目的是通过以下技术方案实现的:一种基于单片机的车载日历时钟并温度测量系统,所述系统包括日历时钟模块、温度检测模块、按键模块、显示模块、传感器、数码管、定时器、芯片、按键;系统采用时钟电路芯片实现时钟的实时显示,并采用温度传感器实现环境温度的采集和A/D信号的转换,再通过单片机将其送入数码管进行显示;系统以AT89S52单片机为核心,采用DS18B20传感器采集温度数值进行处理和转换,该传感器直接与单片机交换数据,不再需要A/D信号处理电路,并采用外部车载电源供电的方式;采用DS1302芯片实现实时日历时钟,与主机串行通信,对年、月、日、周、时、分、秒进行计时,具有闰年补偿,通过三根线连接到单片机引脚上进行数据的传递,存储关键数据及相应的时间;VCC1连接备用电源,VCC2为主电源,备用电源使芯片在系统掉电情况下内部数据不丢失,DS1302由两电源中的较大者供电;系统通过HD7279芯片控制按键和LED数码管进行人机交互,通过两片HD7279管理的16个共阴极LED数码管分别显示时钟日历和温度参数,三个按键分别实现进入/保存设置功能、选择要设置的LED位、修改需设置位的参数,HD7279芯片的RC引脚外接震荡元件,相应电阻值R为1.5kΩ,电容值C为15pF;第一片HD7279的片选端连接到单片机的P1.4引脚,第二片HD7279的片选端连接到单片机的P2.0引脚;X5045芯片实现看狗复位;键盘显示器管理芯片、时钟芯片和测温传感器器件与单片机之间串行通讯,使单片机可扩展连接更多的外围设备
[0010] 所述的一种基于单片机的车载日历时钟并温度测量系统,所述系统每个时间片通过T1定时器定时,共20个时间片。
[0011] 所述的一种基于单片机的车载日历时钟并温度测量系统,所述三个机械按键和16个共阴极LED数码管通过两片HD7279管理。
[0012] 本发明的优点与效果是:本发明以单片机为核心,设计了一种车载日历时钟及温度测量系统,该发明是车载系统智能化发展的底层系统设计,对于整个车载系统的正常运行起着重要作用。
[0013] 1.本发明系统使用了时间片轮询调度的方式实现了对不同元器件的调度使用。特别是在DS18B20测温需要延时等待的情况下,使用该方法就不再需要单独设置延时程序,大大提高了主机芯片的运行效率,时间片轮询调度的优势是非常大的。
[0014] 2.本发明系统所使用的键盘显示器管理芯片、时钟芯片和测温传感器等器件与单片机之间都是串行通讯,串行通讯大大简化了单片机的硬件接口电路,使单片机可以扩展连接更多的外围设备,极大的提高了单片机的扩展性。附图说明
[0015] 图1为本发明系统总体结构框图;图2为本发明温度测量电路图;
图3为本发明时钟电路;
图4为本发明按键电路;
图5为本发明HD7279与单片机连接图;
图6为本发明HD7279与LED数码管连接图;
图7为本发明第二片HD7279与LED数码管连接图;
图8为本发明看门狗复位电路连接图;
图9为本发明主程序流程图
图10为本发明中断服务程序;
图11为本发明任务调度模块流;
图12为本发明按键识别程序流程图;
图13为本发明设置键程序流程图;
图14为本发明选择键程序流程图;
图15为本发明修改键程序流程图;
图16为本发明显示程序流程图;
图17为本发明初始化程序流程图;
图18为本发明读单字节数据程序流程图;
图19为本发明写单字节数据程序流程图;
图20为本发明温度数据处理程序流程图;
图21为本发明写入数据程序流程图;
图22为本发明写单字节数据程序流程图。

具体实施方式

[0016] 下面结合附图所示实施例对本发明进行详细说明。
[0017] 本发明发明主要参数取决于时钟芯片和温度传感器。本系统具体包含日历时钟模块、温度检测模块、按键模块、显示模块等。
[0018] 采用DS1302芯片实现实时日历时钟功能。该芯片提供包括秒、分、日、月、年等信息,闰年可以自行调整,通过三根线连接到单片机引脚上进行数据的传递。并采用DS18B20传感器采集温度数值进行处理和转换和A/D信号的转换。温度数据的获取通过DS18B20温度传感器获取,采用外部车载电源供电的方式。使用通过两片HD7279管理的16个共阴极LED数码管分别显示时钟日历和温度这些参数。使用三个按键分别实现进入/保存设置功能、选择要设置的LED位、修改需设置位的参数。通过HD7279芯片控制按键和LED数码管进行人机交互。
[0019] 使用X5045芯片实现看门狗复位功能。
[0020] 在检测温度传感器方面,经过查阅相关文献资料和比较实际测温的工作环境、及电路设计简单低功耗、可靠性高、传感器体积尽可能小等多方面要求,综合考虑后采用了DS18B20测温传感器。该传感器可直接与单片机交换数据,不再需要A/D等信号处理电路,大大简化了系统硬件设计的复杂程度,并且稳定性、可靠性更高。
[0021] 日历时钟功能主要通过DS1302芯片来实现,它与主机同样也是串行通信。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。完全能够满足系统的设计功能要求。DS1302还可以存储一些关键数据及相应的时间。这些数据对系统故障等原因的分析及查找十分有用。
[0022] VCC1用来连接备用电源,VCC2为主电源,备用电源可以使芯片在系统掉电情况下内部数据不丢失,DS1302由两电源中的较大者供电。
[0023] 系统通过HD7279芯片来实现按键电路的设计。HD7279芯片的RC引脚需要外接震荡元件,相应电阻值R为1.5kΩ,电容值C为15pF。
[0024] 通过两片HD7279来同时控制16个共阴极LED数码管,同时显示日历时钟和实时温度。第一片HD7279的片选端连接到单片机的P1.4引脚。第二片HD7279的片选端连接到单片机的P2.0引脚。
[0025] 本系统使用X5045芯片的看门狗复位功能。
[0026] 主程序在完成系统的初始化后单片机进入休眠状态,通过中断程序唤醒单片机,进行任务调度。在完成一次全部的任务调度后系统再次进入休眠状态。
[0027] 主程序在完成系统的初始化后单片机进入休眠状态,通过中断程序唤醒单片机,进行任务调度。在完成一次全部的任务调度后系统再次进入休眠状态,等待下一次中断唤醒。主程序的初始化主要是定时器T1的初始化、X5045的初始化、HD7279的初始化、DS1302的初始化。
[0028] 在单片机T1定时器计时到50ms时进入一次中断程序,进入中断程序后先进行定时器常数重装,时间片计数变量自加一,同时执行任务调度程序中对应时间片的任务,再对看门狗定时器“喂狗”。一次中断程序执行完毕。
[0029] 通过任务调度程序实现对各个功能的有序调度,实现系统的正常功能。系统不同功能在任务调度这一“总指挥”下有条不紊的执行。是系统功能实现的核心。本系统中,每个时间片通过T1定时器定时50ms,共20个时间片,系统执行完一次任务调度模块用时1s。时间片为0时向DS18B20发送温度转换指令,启动温度转换;时间片为1、6、11、17时,读取DS1302的日历时钟数据并刷新相行的显示缓冲区;时间片为18时,DS18B20已经完成温度测量,从DS18B20中读取温度数据。
[0030] 人机接口模块设计包括按键程序设计和显示程序设计两部分。三个机械按键和16个共阴极LED数码管通过两片HD7279管理,实现相应的功能。
[0031] 按键程序用来读取按下按键的键值,并根据读取的键值调用相应的按键功能子函数。按键程序包括一个按键识别程序和三个按键的功能程序,按键识别程序是按键程序的总体调用管理程序,将读取的键值保存在KEY_NUMBER变量中,通过按键识别程序调用三个具有不同功能的按键,从而实现系统所预设的相应功能。通过KEY标识位判断是否有按键按下,通过KB_FIG标识位实现按键只处理一次的功能。
[0032] (一) 设置键程序设计设置键用来系统从正常状态和设置状态之间切换。SET_STA值为1时系统进入设置状态,表示移位的标识值RIGHT=13,“年”的高位闪烁。SET_STA值为2时退出设置状态并且向DS1302保存修改后的数据。
[0033]  (二) 选择键程序设计选择按键用于系统在设置状态(SET_STA=1)下,选择要修改的日历时钟相应数据不同位的值,当选择相应的修改位时,该位处于闪烁状态。闪烁位的程序判断通过移位标识值RIGHT来识别。选择按键程序流程图如图15所示。
[0034] (三) 修改键程序设计修改键用于系统在设置状态下修改对应闪烁位的数值,每按修改键一次,相应的数值改变一次。
[0035] 显示程序每执行一次,都将刷新相应的显示缓冲区,HD7279通过扫描的方式循环对每个LED数码管送出相应的译码方式和显示内容。日历时钟的年、月、日、星期、时、分、秒和温度的数值部分都按照0译码方式显示,温度的单位部分用一个倒装的数码管采用不译码方式显示。显示程序的流程图如图17所示。
[0036] 温度检测程序包括温度传感器DS18B20的初始化程序、温度测量转换程序、温度数据读取程序三部分。
[0037] DS18B20传感器上电后温度分辨率默认为12位,本系统采用12位分辨率的温度数据。当需要温度转换时,需要发出温度转换指令[44h],等待时间大于750ms后,温度数据存入相应寄存器。DS18B20所有的操作都需要从初始化程序开始。本系统中,只有一个DS18B20传感器,ROM操作指令采用忽略ROM指令[CCh]。使用的功能指令有温度转换指令[44h],读暂存器指令[BEh]。
[0038] 初始化模块的器件初始化序列由单片机总线DQ发出复位脉冲和DS18B20在其后发出的应答脉冲组成,相应的返回值放在PRESENCE变量中,让单片机知道改温度传感器在总线上并且已经准就绪,主机可以进行下一步操作。
[0039] DS18B20的数据读/写通过相应的时序处理来确定的,读/写单字节数据子程序由总线DQ发起读/写时序。当DQ发出读时序时,该温度传感器仅用来向单片机传送数据,用于DQ在发出读暂存器指令[BEh]后,读取测得的温度数据。当DQ发出写时序后,DS18B20在时序窗口内对数据线传送相应的高低电平,从而实现数据的传输。
[0040] 温度数据的获取需要先向DS18B20发出温度转换指令,输出数据为12位精度的温度测量需等待750ms才能完成温度转换。在本次软件系统设计中,采用了时间片轮询调度的方法,在SYS_CLK为0时发出温度转换指令,在SYS_CLK为18时发出温度读取指令。
[0041] 无论是发温度转换指令还是发温度读取指令并读取温度都需要严格按照DS18B20的端口协议进行。
[0042] 向传感器发温度转换指令需要先执行初始化程序,再发送忽略ROM指令[CCh],最后发送温度转换指令[44h],这样DS18B20才会在750ms后得到温度数据。
[0043] 同样,向传感器发读取温度指令需要先执行初始化程序,再发送忽略ROM指令[CCh],最后发送读暂存器指令[BEh],这样单片机才能够得到温度数据。
[0044] 从DS18B20温度暂存器读取的温度数据低位保存在templ中,温度数据高位保存在temph中,templ中的低四位是小数位,本设计不需要显示小数位。
[0045] 进行数据处理时先要比较temph是否大于127,若大于127则温度是负值,所得到的温度数据是补码,要先将补码按位取反加一得到原码,并将负值标志位minus置1,再进行下一步数据处理。将temph的低四位放到temp的高四位,templ的高四位放到temp的低四位中,这样只将温度的整数部分存入了temp变量中。对变量temp分离出个位放入temp0, 分离出十位放入temp1。若温度为负值,十位显示负号。本系统用于测量车厢温度,因此可以正常显示的温度数值范围从‑9 99℃,完全能够满足测温显示的需求。~
[0046] 日历时钟程序包含日历时钟读取程序和日历时钟设置数据保存程序两部分。日历时钟程序是系统实现日历时钟功能的核心程序。单片机与DS1302之间交换的数据都是压缩BCD码的形式交换的。本系统采用24小时计时制对时钟芯片DS1302最基本的操作就是从DS1302读取数据和向DS1302写入数据。向DS1302写入数据时,将变量D的最低位通过IO口配合相应SCK时序传送给时钟芯片,将数据D依次右移七次,数据D向DS1302芯片传送完毕。从DS1302读取数据时,将待读取的数据通过IO口配合相应SCK时序传送给缓存变量的最高位,将缓存变量依次右移七次,把数据完全传输到缓存变量中。
[0047] 在系统初始化时先读取DS1302的秒存储单元,判断SECOND是否大于等于80,若SECOND大于等于80,说明该芯片时钟晶振没有起振,时钟停止,则对DS1302芯片的日历时钟数值初始化重置,重置时间为2019年05月01日,星期3,12时00分00秒。若SECOND小于80,说明该芯片时钟正常工作,无需对日历时钟数据初始化重置。
[0048] 当日历时钟的读取程序在系统正常的显示状态时(set_sta=0)调用。
[0049] 单片机从DS1302芯片读取数据通过函数void ds1302_read_time(void)来实现,在读取数据函数中,通过相应存储单元的地址实现对存储单元的读取。相关的读取指令为:读取秒的控制指令为81H、读取分的控制指令为83H、读取时的控制指令为85H、读取日的控制指令为87H、读取月的控制指令为89H、读取星期的控制指令为8BH、读取年的控制指令为
8DH。
[0050] 读取的数据为压缩BCD码,因此在ds1302_read_time(void)内直接将读取到的数据通过移位和逻辑运算转换成BCD码,存放到显示缓冲单元。
[0051] 当日历时钟的写入程序在系统退出设置状态时(set_sta=2)调用一次。
[0052] 单片机向DS1302芯片写数据,应先通过控制指令8EH写入00H数据,关闭写保护。再通过控制指令向时钟芯片相关单元写入要设置修改的数值。写入数值完毕后再通过控制指令8EH写入80H数据,开启写保护。一次完整的数据写入完成。
[0053] 向DS1302写入数据前先将显示缓冲区里的日历时钟数据BCD码通过移位和相应的逻辑运算转化成压缩BCD码,准备向芯片传送数据。
[0054] 单片机向时钟芯片写入数据通过函数void ds1302_write_time(void)来实现,在写入数据函数中,通过相应存储单元的地址实现对存储单元的写入。相关的写入指令为:写秒的控制指令为80H、写分的控制指令为82H、写时的控制指令为84H、写日的控制指令为86H、写月的控制指令为88H、写星期的控制指令为8AH、写年的控制指令为8CH。
[0055] 本发明的运行步骤如下:步骤1:设计单片机开发板。系统外观面板总体设计如图1所示,使用通过两片HD7279管理的16个共阴极LED数码管分别时钟电路参数和温度数值。使用三个按键分别实现进入/保存设置功能、选择要设置的LED位、修改需设置位的参数。
[0056] 步骤2:确定硬件选型。如图2所示为日历时钟及测温系统的总体结构框图,本发明以AT89S52单片机为核心,包括日历时钟模块、温度检测模块、按键模块、显示模块等。
[0057] 本发明采用DS18B20传感器采集温度数值进行处理和转换,采用DS1302芯片实现实时日历时钟功能。
[0058] 日历时钟功能主要通过DS1302芯片来实现,它与主机同样也是串行通信。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。完全能够满足系统的设计功能要求。DS1302还可以存储一些关键数据及相应的时间。VCC1用来连接备用电源,VCC2为主电源,备用电源可以使芯片在系统掉电情况下内部数据不丢失,DS1302由两电源中的较大者供电。
[0059] 通过两片HD7279来同时控制16个共阴极LED数码管,同时显示日历时钟和实时温度并通过与HD7279相连的LED数码管进行人机交互。第一片HD7279的片选端连接到单片机的P1.4引脚。第二片HD7279的片选端连接到单片机的P2.0引脚。HD7279芯片的RC引脚需要外接震荡元件,相应电阻值R为1.5kΩ,电容值C为15pF。使用X5045芯片实现看门狗复位功能。
[0060] 步骤3:对发明进行软件设计。在发明软件设计方面,使用了时间片轮询调度的方式实现了对不同元器件的调度使用。本发明所使用的键盘显示器管理芯片、时钟芯片和测温传感器等器件与单片机之间都是串行通讯。
[0061] 所述步骤3包括下述步骤:步骤3.1:主程序的初始化设计。主程序的初始化主要是定时器T1的初始化、X5045的初始化、HD7279的初始化、DS1302的初始化。主程序流程图如图10所示。主程序在完成系统的初始化后单片机进入休眠状态,通过中断程序唤醒单片机,进行任务调度。在完成一次全部的任务调度后系统再次进入休眠状态。
[0062] 步骤3.2:中断服务程序设计。在单片机T1定时器计时到50ms时进入一次中断程序,进入中断程序后先进行定时器常数重装,时间片计数变量自加一,同时执行任务调度程序中对应时间片的任务,再对看门狗定时器“喂狗”。一次中断程序执行完毕。
[0063] 步骤3.3:任务调度模块设计。本系统中,每个时间片通过T1定时器定时50ms,共20个时间片,系统执行完一次任务调度模块用时1s。时间片为0时向DS18B20发送温度转换指令,启动温度转换;时间片为1、6、11、17时,读取DS1302的日历时钟数据并刷新相行的显示缓冲区;时间片为18时,DS18B20已经完成温度测量,从DS18B20中读取温度数据。
[0064] 步骤3.4:按键识别程序。按键程序用来读取按下按键的键值,并根据读取的键值调用相应的按键功能子函数。按键程序包括一个按键识别程序和三个按键的功能程序,按键识别程序是按键程序的总体调用管理程序,将读取的键值保存在KEY_NUMBER变量中,通过按键识别程序调用三个具有不同功能的按键,从而实现系统所预设的相应功能。通过KEY标识位判断是否有按键按下,通过KB_FIG标识位实现按键只处理一次的功能。
[0065] 步骤3.5:设置键程序设计。设置键用来系统从正常状态和设置状态之间切换。SET_STA值为1时系统进入设置状态,表示移位的标识值RIGHT=13,“年”的高位闪烁。SET_STA值为2时退出设置状态并且向DS1302保存修改后的数据。
[0066] 步骤3.6:选择键程序设计。选择按键用于系统在设置状态(SET_STA=1)下,选择要修改的日历时钟相应数据不同位的值,当选择相应的修改位时,该位处于闪烁状态。闪烁位的程序判断通过移位标识值RIGHT来识别。
[0067] 步骤3.7:修改键程序设计。修改键用于系统在设置状态下修改对应闪烁位的数值,每按修改键一次,相应的数值改变一次。
[0068] 步骤3.8:显示程序设计。显示程序每执行一次,都将刷新相应的显示缓冲区,HD7279通过扫描的方式循环对每个LED数码管送出相应的译码方式和显示内容。日历时钟的年、月、日、星期、时、分、秒和温度的数值部分都按照0译码方式显示,温度的单位部分用一个倒装的数码管采用不译码方式显示。
[0069] 步骤3.9:温度检测程序设计。DS18B20传感器上电后温度分辨率默认为12位,本系统采用12位分辨率的温度数据。当需要温度转换时,需要发出温度转换指令[44h],等待时间大于750ms后,温度数据存入相应寄存器。DS18B20所有的操作都需要从初始化程序开始。本系统中,只有一个DS18B20传感器,ROM操作指令采用忽略ROM指令[CCh]。使用的功能指令有温度转换指令[44h],读暂存器指令[BEh]。
[0070] 步骤3.10:温度传感器初始化程序设计。初始化模块的器件初始化序列由单片机总线DQ发出复位脉冲和DS18B20在其后发出的应答脉冲组成,相应的返回值放在PRESENCE变量中,让单片机知道改温度传感器在总线上并且已经准就绪,主机可以进行下一步操作。
[0071] 步骤3.11:人机接口程序设计。人机接口模块设计包括按键程序设计和显示程序设计两部分。三个机械按键和16个共阴极LED数码管通过两片HD7279管理,实现相应的功能。
[0072] 步骤3.12:温度数据的获取需要先向DS18B20发出温度转换指令,输出数据为12位精度的温度测量需等待750ms才能完成温度转换。在本次软件系统设计中,采用了时间片轮询调度的方法,在SYS_CLK为0时发出温度转换指令,在SYS_CLK为18时发出温度读取指令。
[0073] 步骤3.13:温度数据处理程序。进行数据处理时先要比较temph是否大于127,若大于127则温度是负值,所得到的温度数据是补码,要先将补码按位取反加一得到原码,并将负值标志位minus置1,再进行下一步数据处理。将temph的低四位放到temp的高四位,templ的高四位放到temp的低四位中,这样只将温度的整数部分存入了temp变量中。对变量temp分离出个位放入temp0, 分离出十位放入temp1。若温度为负值,十位显示负号。本系统用于测量车厢温度,因此可以正常显示的温度数值范围从‑9 99℃,完全能够满足测温显示的需~求。
步骤3.14:日历时钟程序设计。日历时钟程序包含日历时钟读取程序和日历时钟设置数据保存程序两部分。日历时钟程序是系统实现日历时钟功能的核心程序。单片机与DS1302之间交换的数据都是压缩BCD码的形式交换的。本系统采用24小时计时制。
[0074] 步骤3.15:读取数据程序。对时钟芯片DS1302最基本的操作就是从DS1302读取数据和向DS1302写入数据。向DS1302写入数据时,将变量D的最低位通过IO口配合相应SCK时序传送给时钟芯片,将数据D依次右移七次,数据D向DS1302芯片传送完毕。写入数据程序流程图如图22所示。从DS1302读取数据时,将待读取的数据通过IO口配合相应SCK时序传送给缓存变量的最高位,将缓存变量依次右移七次,把数据完全传输到缓存变量中。
[0075] 步骤3.16:日历时钟读取程序设计。单片机从DS1302芯片读取数据通过函数void ds1302_read_time(void)来实现,在读取数据函数中,通过相应存储单元的地址实现对存储单元的读取。读取秒的控制指令为81H、读取分的控制指令为83H、读取时的控制指令为85H、读取日的控制指令为87H、读取月的控制指令为89H、读取星期的控制指令为8BH、读取年的控制指令为8DH。读取的数据为压缩BCD码,因此在ds1302_read_time(void)内直接将读取到的数据通过移位和逻辑运算转换成BCD码,存放到显示缓冲单元。
[0076] 步骤3.17:日历时钟设置程序设计。单片机向DS1302芯片写数据,应先通过控制指令8EH写入00H数据,关闭写保护。再通过控制指令向时钟芯片相关单元写入要设置修改的数值。写入数值完毕后再通过控制指令8EH写入80H数据,开启写保护。向DS1302写入数据前先将显示缓冲区里的日历时钟数据BCD码通过移位和相应的逻辑运算转化成压缩BCD码,准备向芯片传送数据。
[0077] 单片机向时钟芯片写入数据通过函数void ds1302_write_time(void)来实现,在写入数据函数中,通过相应存储单元的地址实现对存储单元的写入。
QQ群二维码
意见反馈