出租车计价器设计程序原理图实物图

上传人:hao****021 文档编号:166499997 上传时间:2022-11-01 格式:DOC 页数:47 大小:296KB
返回 下载 相关 举报
出租车计价器设计程序原理图实物图_第1页
第1页 / 共47页
出租车计价器设计程序原理图实物图_第2页
第2页 / 共47页
出租车计价器设计程序原理图实物图_第3页
第3页 / 共47页
点击查看更多>>
资源描述
目 录摘要第1章 引 言 11. 1 出租车计价器概述 11. 2 本设计任务 1 1.2.1 设计任务 1 1.2.2 设计要求 11. 3 系统主要功能 2第2章 出租车计价器硬件设计 32.1 系统的硬件构成及功能 32. 2 AT89S51单片机及其引脚说明 42.3 AT24C02引脚图及其引脚功能 62. 4 AT24C02 掉电存储单元的设计 62.5 里程计算、计价单元的设计 72.6 数据显示单元设计 8第3章 系统软件设计103. 1 系统主程序设计103. 2 定时中断程序设计123. 3 里程计数中断服务程序设计123.4 中途等待中断服务程序设计123. 5 键盘服务程序设计123. 6 显示子程序服务程序设计12第4章系统调试与测试结果分析 134. 1 使用的仪器仪表 134.2 系统调试 13第1章 引 言本次课程设计利用单片机技术来实现一台多功能出租车计价器,具有性能可靠、电路简单、成本低等特点。1.1 出租车计价器概述计价器显示的营运金额是营运里程与价格的函数(等候时间一般折算成一定比例的里程来计算)。出租车计价器通过传感器与行驶车辆连接。出租汽车的实际里程通过传感器的脉冲信号在计价器里折算成一定的计价营运里程。目前市场上出租车计价器功能主要有具有数据的复位功能、白天/晚上转换功能、数据输出功能、计时计价功能等等,但能够进行语音播报数据信息的出租车计价器还是比较少见的,针对这一点我们来设计一款多功能出租车计价器,在原有功能的基础上增加单价输出、单价调整、路程输出、显示当前的系统时间、语音播报数据信息等功能。1.2 本设计任务1.2.1 设计任务 设计一款基于AT89S51单片机的出租车计价器。1.2.2 设计要求1.基本要求(1) 不同情况具有不同的收费标准。l 白天l 晚上l 途中等待(10min 开始收费)(2) 能进行手动修改单价。(3) 具有数据的复位功能。(4) IO 口分配的简易要求。l 距离检测使用霍尔开关A44El 白天/晚上收费标准的转换开关l 数据的清零开关l 单价的调整(最好使用和按键)(5) 数据输出(采用LCM103)。l 单价输出 2 位l 路程输出 2 位l 总金额输出 3 位(6) 按键。l 启动计时开关l 数据复位(清零)l 白天/晚上转换2.发挥部分(1) 能够在掉电的情况下存储单价等数据。(2) 能够显示当前的系统时间。(3) 语音播报数据信息。1.3 系统主要功能 本课程设计所设计的出租车计价器的主要功能有:数据的复位、白天/晚上转换、数据输出、计时计价、单价输出及调整、路程输出、语音播报数据信息、实现在系统掉电的时候保存单价和系统时间等信息等功能。输出采用8 段数码显示管。本电路设计的计价器不但能实现基本的计价,而且还能根据白天、黑夜、中途等待来调节单价,同时在不计价的时候还能作为时钟为司机同志提供方便。第2章 计价器硬件设计本系统的硬件设计主要包括单片机AT89S51、数据显示部件、A44E霍尔传感器电路、AT24C02 掉电存储单元的设计、里程计算及计价单元的设计。在硬件设计过程中,充分利用各部件的功能,实现多功能的出租车计价器设计。2.1 系统的硬件构成及功能计价器的单片机控制方案图如图1 单片机控制方案图所示。它由以下几个部件组成:单片机AT89S51、总金额及单价显示部件、键盘控制部件,AT24C02 掉电存储控制、里程计算单元、串中显示驱动电路等。利用单片机丰富的IO端口,及其控制的灵活性,实现基本的里程计价功能和价格调节、时钟显示功能。不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级。具体电路参见附录中“多功能出租车计价器总体电路图”如图1 单片机控制方案图。图1 单片机控制方案图2.2 AT89S51单片机及其引脚说明AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS 8位单片机,片内含4KB的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用 8位微处理器于单片芯片中,具有高性价比。AT89S51是一个有40个引脚的芯片,引脚配置如图2 AT89S51引脚配置所示。图2 AT89S51引脚配置AT89S51芯片的40个引脚功能为:VCC 电源电压。GND 接地。RST 复位输入。当RST变为高电平并保持2个机器周期时,将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFR AUXR的DISRTO位(地址8EH)可打开或关闭该功能。DISKRTO位缺省为RESET输出高电平打开状态。XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2 来自反向振荡放大器的输出。P0口 一组8位漏极开路型双向I/O口。也即地址/数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。P1口 一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。Flash编程和程序校验期间,P1接收低8位地址。P1口部分端口引脚及功能如表1 P1口特殊功能所示。表1 P1口特殊功能P1口引脚特殊功能P1.5MOSI(用于ISP编程)P1.6MOSI(用于ISP编程)P1.7SCK(用于ISP编程)P2口 一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器时,P2口线上的内容在整个访问期间不改变。Flash编程和程序校验期间,P2亦接收低8位地址。P3口 一个带内部上拉电阻的8位双向I/O口。P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写“1”时,它们被内部的上拉电阻把拉到高电并可作输入端口。作输入端口使用时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表2 P3口特殊功能所示。P3口还接收一些用于Flash闪速存储器编程和程序校验期间的控制信号。表2 P3口特殊功能P3口引脚特殊功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2(外部中断0)P3.3(外部中断1)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)P3.6 (外部数据存储器写选通)P3.7 (外部数据存储器读选通)PSEN/ 程序储存允许输出是外部程序存储器的读先通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN/有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的PSEN/信号。EA/VPP 外部访问允许。欲使CPU仅访问外部程序存储器,EA端必须保持低电平,需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。Flash存储器编程时,该引脚加上+12V的编程电压VPP。2.3 AT24C02引脚图及其引脚功能AT24C02芯片引脚配置如图3 AT24C02引脚配置图所示。图3 AT24C02引脚配置图AT24C02芯片DIP封装,共有8个引脚,其中:A2A0 地址引脚;SDA、SCL I2C总线接口;WP 写保护引脚,WP接VSS时,禁止写入高位地址,WP接VDD时,允许写入任何地址;VCC 电源端GND 接地端2.4 AT24C02 掉电存储单元的设计 掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。AT24C02 是ATMEL公司的2KB 字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40 年以上,而且采用8 脚的DIP 封装,使用方便。其电路如图 4 掉电存储电路原理图所示。图 4 掉电存储电路原理图图中R8、R10 是上拉电阻,其作用是减少AT24C02 的静态功耗,由于AT24C02 的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据/地址)与单片机传送数据。每当设定一次单价,系统就自动调用存储程序,将单价信息保存在芯片内;当系统重新上电的时候,自动调用读存储器程序,将存储器内的单价等信息,读到缓存单元中,供主程序使用。2.5 里程计算、计价单元的设计里程计算是通过安装在车轮上的霍尔传感器A44E检测到的信号,送到单片机,经处理计算,送给显示单元的。其原理如图 5 传感器测距示意图所示。图 5 传感器测距示意图由于A44E 属于开关型的霍尔器件,其工作电压范围比较宽(4.518V),其输出的信号符合TTL 电平标准,可以直接接到单片机的IO 端口上,而且其最高检测频率可达到1MHZ。A44E 集成霍耳开关由稳压器A、霍耳电势发生器(即硅霍耳片)B、差分放大器C、施密特触发器D 和OC 门输出E 五个基本部分组成。在输入端输入电压CC V ,经稳压器稳压后加在霍耳电势发生器的两端,根据霍耳效应原理,当霍耳片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍耳电势差H V 输出,该H V 信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC 门输出。当施加的磁场达到工作点(即OP B )时,触发器输出高电压(相对于地电位),使三极管导通,此时OC 门输出端输出低电压,通常称这种状态为开。当施加的磁场达到释放点(即rP B )时,触发器输出低电压,三极管截止,使OC 门输出高电压,这种状态为关。这样两次电压变换,使霍耳开关完成了一次开关动作。 我们选择了P3.2 口作为信号的输入端,内部采用外部中断0(这样可以减少程序设计的麻烦),车轮每转一圈(我们设车轮的周长是1 米),霍尔开关就检测并输出信号,引起单片机的中断,对脉计数,当计数达到1000 次时,也就是1 公里,单片机就控制将金额自动的加增加,其计算公式:当前单价公里数=金额。2.6 数据显示单元设计由于设计要求有单价(2 位)、路程(2 位)、总金额(3 位)显示输出,加上我们另外扩展了时钟显示(包含时分秒的显示),采用LCD 液晶段码显示,在距离屏幕1 米之外就无法看清数据,不能满足要求,而且在白天其对比度也不能够满足要求,因此我们采用6 位LED数码管的分屏显示,如图 6 采用6 位LED数码管的分屏显示所示:时钟显示(图中显示为12 点0 分46 秒)图 6 采用6 位LED数码管的分屏显示数据的分屏的显示是通过按键S1 来实现切换的,如图 7 S1切换显示屏所示。图 7 S1切换显示屏在出租车不走的时候,按下S1,可以实现数据的分屏显示;车在行走的时候只有总金额和单价显示屏在显示,当到达目的地的时候,客户要求查看总的里程的时候,就可以按下S1 切换到里程和单价显示屏,供客户查询。显示电路的电路原理图如图 8 显示器原理图所示。图 8 显示器原理图从单片机串口输出的信号先送到左边的移位寄存器(74HC164),由于移位脉冲的作用,使数据向右移,达到显示的目的。移位寄存器74HC164还兼作数码管的驱动,插头1(header1)接电源,插头2(header2)接数据和脉冲输出端。电路中的三个整流管D1D3 的作用是降低数码管的工作电压,增加其使用寿命。第3章 系统的软件设计本系统的软件设计主要可分为主程序模块、定时计数中断程序、里程计数中断服务程序、中途等待中断服务程序、显示子程序服务程序、键盘服务程序六大模块。下面对各部分模块作介绍。3.1 系统主程序设计在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以及开中断、循环等待等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。主程序流程图如图9 所示。当按下S1时,就启动计价,将根据里程寄存器中的内容计算和判断出行驶里程是否已超过起价公里数。若已超过,则根据里程值、每公里的单价数和起价数来计算出当前的累计价格,并将结果存于价格寄存器中,然后将时间和当前累计价格送显示电路显示出来。当到达目的地的时候,由于霍尔开关没有送来脉冲信号,就停止计价,显示当前所应该付的金额和对应的单价,到下次启动计价时,系统自动对显示清零,并重新进行初始化过程。开始初始化数据S1按下?否是S4按下?是否设定默认 单价(白天)设定晚上单价否按下S4?是启动计价器设定中途等待单价总路程加1总金额加1里程中断?图9 主程序流程图S4按下?S3按下?到一公里?停止计价和里程计数S3按下?否是是否否是显示金额及单价显示路程和单价是是否返回时间显示是否传感有信号? 3.2 定时中断服务程序在定时中断服务程序中,每100ms 产生一次中断,当产生10 次中断的时候,也就到了一秒,送数据到相应的显示缓冲单元,并调用显示子程序实时显示。其程序流程如图10 所示。3.3 里程计数中断服务程序每当霍尔传感器输出一个低电平信号就使单片机中断一次,当里程计数器对里程脉冲计满1000 次时,使微机进入里程计数中断服务程序中。在该程序中,需要完成当前行驶里程数和总额的累加操作,并将结果存入里程和总额寄存器中。3.4 中途等待中断服务程序当在计数状态下霍尔开关没有输出信号,片内的T1 定时器便被启动,每当计时到达10分钟,就对当前金额加上中途等待的单价,以后每十分钟都自动加上中途等待的单价。当中途等待结束的时候,也就自动切换到正常的计价。3.5 显示子程序服务程序由于是分屏显示数据,所以就要用到4 个显示子程序,分别是:时分秒显示子程序(HMS_DIS)、金额单价显示子程序(CP_DIS)、路程单价显示子程序(DP_DIS)、单价调节子程序(PA_DIS)。3.6 键盘服务程序键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。如图9 主程序流程图,图10 定时中断服务程序。开始保护现场重置计数初值否中断10次?是数据送显示缓冲单元调用显示子程序恢复现场并中断返回 图10 定时中断服务程序第4章 系统调试与测试结果分析根据系统设计方案,本系统的调试共分为三大部分:硬件调试,软件调试和软硬件联调。测试包括里程计价测试、掉电存储测试测试。4.1 使用的仪器仪表 数字万用表DT9203单片机仿真器WAVE6000烧写器 GF2100双踪稳压稳流电源DH1718E-5数字示波器 TDS10024.2 系统调试根据系统设计方案,本系统的调试共分为三大部分:硬件调试,软件调试和软硬件联调。由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试。结 束 语通过本次课程设计,又使我学到了许多书本上无法学到的知识,也使也深该体会到单片机技术应用领域的广泛,不仅使我对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的兴趣。在本次课程设计过程中,我学会了在网络上查找有关本设计的各硬件的资源,其中包括:AT89S51单片机及其引脚说明、AT24C02引脚图及其引脚功能等,为本次课程设计提供了一定的资料。由于平时很少进行课程设计,所以对于课程设计报告的格式也是近期才接触到,经过这两次的设计,为我们以后毕业设计的制作也奠定了一定的基础。2计价表使用说明(1)S1按键的功能在出租车不走的时候,按下S1,可以实现数据的分屏显示;车在行走的时候只有总金额和单价显示屏在显示,当到达目的地的时候,客户要求查看总的里程的时候,就可以按下S1 切换到里程和单价显示屏,供客户查询。(2)S2按键的功能在按下S1按键之后,若接着按下S2键则进行单价调整(默认为调整白天单价),当接着按下S1时,则进行晚上单价调,再次按下S1可进行中途等待单价调整。当单价调整结束后,可以通过过按下S2按键进行时间调整,默认为调整时,接着按下S1可进行调整分,分调整后再接下S1可进行秒调整。当时调整完成后,若接着按下S2则又可进行单价调整。(3)S3按键的功能在显示金额及单价时,若按下S3键则显示路程和单价,再次按下S3,可返回显示金额及单价。(4)S4按键的功能在按下S1按键之后,若接着按下S4按键,则进行设定默认晚上单价,并启动计价器,若没有按下S4则可设定默认单价(白天),并启动计价器。当设定默认晚上单价结束后,再次接下S4按键,则可设定默认中途等待单价,并启动计价器。当设定默认中途等待单价后,若还按一次S4,则返回系统时间的显示。2.全部源程序/12864(带字库) (汉字及字母的显示,汉字不能错位)#include #include #include #define lcd_bus P0 / 数据总线sbit rs =P32; /数据&指令选择,H:写数据,L:写指令sbit rw =P33; /读&写选择,H:read,L:writesbit e =P34; /读写使能sbit psb=P30; /psb=H,并口模式, psb=L,串口模式sbit rst=P35; /LCD复位,低有效sbit bf =P07; /忙闲状态标志位,H:内部正执行操作,L:空闲sbit P20=P20; /进入单价调节sbit P21=P21; /计价开始按键sbit P23=P23; /时间调节按键sbit P26=P26; /停车锁定屏显按键sbit P27=P27; /确认按键sbit P16=P16; /光电开关检测sbit P14=P14; /373片选void delayus(unsigned char us);/延时子程序usvoid delayms(unsigned int ms);/延时子程序msvoid init_lcd(void);/初始化void chk_busy(void);/检测忙闲void wr_data(unsigned char dat);/写数据到LCDvoid wr_comm(unsigned char comm);/写命令到LCDvoid wr_str(unsigned char *s);/向LCD写字符串,长度64字符之内(32个汉字)void wendu();sbit DS18B20=P17; / ds18b20数据线void leddisplay(); / 数码管显示void shijian();bit ResetDS1820(void); /复位子程序void WRDS18B20(unsigned char); / 写1个字节子程序unsigned char RDDS18B20(void); / 读1个字节子程序unsigned int GetTempDS18B20(void); /读取温度子程序void delay1s(); /延时子程序 1s/*-DS1302程序开始- -*/sbit SCLK1302=P13; / 时钟sbit DATA1302=P12; / 数据sbit RST1302=P11; / 复位sbit BIT0=ACC0; / 累加器A 最低位sbit BIT7=ACC7; / 累加器A 最高位void wr1302(unsigned char dat); /向1302写1个字节unsigned char rd1302(void); /从1302读1个字节void v_wr1302(unsigned char add,unsigned char dat); /先写地址,后写1字节数据unsigned char v_rd1302(unsigned char add); /先写地址,后读1字节数据void v_set1302(unsigned char *p2); /设置初始时间void v_get1302(void); /读取DS1302当前时间/* -DS1302程序结束- */unsigned char RcvData8; / 1302接收缓冲区unsigned char SendData8=0,0,0,0,0,0,0,0; / 1302发送缓冲区unsigned char time7; /当前时间,格式: 秒 分 时 日 月 星期 年unsigned char settime7=0x20,0x55,0x14,0x20,0x07,0x03,0x09; /时间初始值: 秒 分 时 日 月 星期 年unsigned char ledxs08; / 时-分-秒 LED显示unsigned char ledxs3; / 数码管显示缓冲区unsigned char ledxs28; / 时-分-秒 LED显示unsigned char xs16; /显示缓冲区年 月 日 时 分 秒unsigned char aa5=0x30,0x30,0x30,0x30,0; /距离数组unsigned char bb5=0x30,0x30,0x30,0x30,0; /费用数组unsigned char cc2=0x31,0x35;/单价数组unsigned char dd4=0,0,0,0; /语音芯片报价数组void zongkong();void tiaojie();void jijia();void baojia();void danjia();unsigned int x=15;/单价main() delayms(200); v_set1302(settime); / 设置初始时间 zongkong();void zongkong() P14=1; init_lcd();/LCD初始化,并清屏 while(1) shijian(); wendu(); if(P20=0) danjia();/进入单价调节函数 if(P21=0) init_lcd();/LCD初始化,并清屏 jijia(); /进入计价页面 if(P23=0) tiaojie(); /调节时间 wr_comm(0x80); wr_str(泰山学院出租车行); wr_comm(0x90); wr_str( 欢 迎 您); wr_comm(0x88); wr_str( ); wr_data(ledxs20); wr_data(ledxs21); wr_data(ledxs22); wr_data(ledxs23); wr_data(ledxs24); wr_data(ledxs25); wr_data(ledxs26); wr_data(ledxs27); wr_comm(0x98); wr_data(ledxs00); wr_data(ledxs01); wr_data(ledxs02); wr_data(ledxs03); wr_data(ledxs04); wr_data(ledxs05); wr_data(ledxs06); wr_data(ledxs07); wr_comm(0x9d); wr_data(ledxs0); wr_data(ledxs1); wr_str(.); wr_data(ledxs2); wr_str(度); void shijian() unsigned char i,j; v_get1302(); /取得当前时间 j=2; for(i=7;i0;i-) xsj=(timei-14)+0x30; xsj+1=(timei-1&0x0f)+0x30; /BCD码拆成2字节 j=j+2; ledxs00=xs2; ledxs01=xs3; / 年 ledxs02=0x2d; / - ledxs03=xs6; ledxs04=xs7; / 月 ledxs05=0x2d; / - ledxs06=xs8; ledxs07=xs9; / 日 ledxs20=xs10; ledxs21=xs11; / 时 ledxs22=0x2d; / - ledxs23=xs12; ledxs24=xs13; / 分 ledxs25=0x2d; / - ledxs26=xs14; ledxs27=xs15; / 秒void wr1302(unsigned char dat) /向1302写1个字节 unsigned char i; for(i=0;i1; /数据右移 ; unsigned char rd1302(void) /从1302读1个字节 unsigned char i; for(i=0;i1; DATA1302=1; /读数据之前,P1口输出1 SCLK1302=1;/时钟置高电平 ; SCLK1302=0;/时钟下降沿,接收数据有效 ; BIT7=DATA1302;/接收1位数据 ; return ACC;void v_wr1302(unsigned char add,unsigned char dat)/先写地址,后写1字节数据 / 地址或命令 数据 RST1302=0;/复位引脚低电平,所有数据传送终止 ; SCLK1302=0;/清时钟总线 ; RST1302=1;/复位引脚高电平,控制逻辑有效 ; wr1302(add); /写地址或命令 ; wr1302(dat); /写1个数据 ; SCLK1302=1; RST1302=0;unsigned char v_rd1302(unsigned char add) /先写地址,后读1字节数据 / 地址 unsigned char i; RST1302=0;/复位引脚低电平,所有数据传送终止 ; SCLK1302=0;/清时钟总线 ; RST1302=1;/复位引脚高电平,控制逻辑有效 ; wr1302(add); /写地址或命令 ; i=rd1302(); /读取数据 SCLK1302=1; RST1302=0; return i; /返回读取的数据/* 名称: send_byte1302* 说明: 先写地址,后写数据(时钟多字节方式)* 功能: 往DS1302写入时钟数据(多字节方式)* 调用: wr1302();v_wr1302();* 输入: *p: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制* 8Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 1B* 返回值: 无*/void send_byte1302(unsigned char *p) unsigned char i; v_wr1302(0x8e,0x00); / 控制命令,WP=0,写操作 RST1302=0;/复位引脚低电平,所有数据传送终止 ; SCLK1302=0;/清时钟总线 ; RST1302=1;/复位引脚高电平,控制逻辑有效 ; wr1302(0xbe); /0xbe:时钟多字节写命令 for(i=0;i8;i+)/发送数据8字节 wr1302(*p); p+; SCLK1302=1; RST1302=0;/* 名称: rcv_byte1302* 说明: 先写地址,后读数据(时钟多字节方式)* 功能: 读取DS1302时钟数据* 调用: wr1302() , rd1302()* 输入: *p1: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B* 返回值: ucDa :读取的数据*/unsigned char rcv_byte1302(unsigned char *p1) unsigned char i; RST1302=0;/复位引脚低电平,所有数据传送终止 ; SCLK1302=0;/清时钟总线 ; RST1302=1;/复位引脚高电平,控制逻辑有效 ; wr1302(0xbf);/ 0xbf:时钟多字节读命令 for(i=0;i8;i+)/接收数据8字节 *p1=rd1302(); p1+; SCLK1302=1; RST1302=0;/* 名称: v_set1302* 说明:* 功能: 设置初始时间* 调用: v_wr1302()* 输入: *p2: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B* 返回值: 无*/void v_set1302(unsigned char *p2) unsigned char i; unsigned char addr=0x80; v_wr1302(0x8e,0x00); /控制命令,WP=0,允许写 for(i=0;i7;i+) v_wr1302(addr,*p2); /* 秒 分 时 日 月 星期 年 */ p2+; addr=addr+2; v_wr1302(0x8e,0x80); / 控制命令,WP=1,写保护/* 名称: v_get1302* 说明:* 功能: 读取DS1302当前时间* 调用: v_rd1302()* 输入: time: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B* 返回值: 无*/void v_get1302(void) unsigned char i; unsigned char addr=0x81; for(i=0;i7;i+) timei=v_rd1302(addr); /格式为: 秒 分 时 日 月 星期 年 addr=addr+2; void wendu() unsigned int wendu,temp,m; m=1; while(m-) wendu=GetTempDS18B20(); /读取温度 temp=wendu/100; ledxs0=temp+0x30; /求得温度十位 temp=wendu%100; ledxs1=(temp/10)+0x30; / 求得温度个位 ledxs2=(temp%10)+0x30; / 求得温度小数位 /-/ 复位 DS1820/CPU将数据线拉低480us,然后释放,/当DS18B20收到信号后等待1660us左右,后发出60240us的存在低脉冲,/主CPU收到此信号表示复位成功。/-bit ResetDS18B20(void) unsigned char i; bit flag; DS18B20=1; i=1;while(-i); DS18B20=0; / 保持低电平至少 480 uSec i=255;while(-i); / 一个循环 2us DS18B20=1; i=30;while(-i); /60us延时,等DS18B20 完成采样 flag=DS18B20; / 检查DS1820 是否存在 i=180;while(-i); / 等 300 uSec return flag; / flag=0复位成功,flag=1,复位不成功/-/ 写1个字节到DS18B20/ CPU将数据线从高电平拉至低电平,产生写起始信号;/15us之内,将所写的位送到数据线上;/DS18B20在15us60us之间接收位信息;/写下一个位之前要有1us以上的高电平恢复;/将以上过程重复8次,即完成一个字节的写操作。/-void WRDS18B20(unsigned char data0) unsigned char i,j; for (j=0; j1; /右移1位 i=30;while(-i); DS18B20=1; /数据线恢复高电平 i=1;while(-i); /-/ 从DS1820读取1个字节/CPU将数据线从高电平拉到低电平1us以上,再拉到高电平,产生读起始信号;/15us之内,CPU读一位;/读周期为60us,/读下一个位之前要有1us以上的高电平恢复;/将以上过程重复8次,即完成一个字节的读操作。/-unsigned char RDDS18B20() unsigned char i,j,data0=0; bit temp; for (j=0; j1; /右移1位 if(temp=1) data0=data0|0x80; else data0=data0&0x7f; /保存读取位到data0 i=30;while(-i); DS18B20=1; /数据线恢复高电平 i=1;while(-i); return data0;/-/ 读取温度/ 返回温度值*10后的结果/ (例 24.5 度 = 245 度)/-unsigned int GetTempDS18B20() unsigned int i,j; unsigned int k; bit flag; flag=ResetDS18B20(); /复位 if(flag) return 0x0000; WRDS18B20(0xcc); / 跳过ROM WRDS18B20(0x44); / 启动温度转换 delay1s
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 中学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!