基于单片机的CO浓度检测及报警系统设计与制作_第1页
基于单片机的CO浓度检测及报警系统设计与制作_第2页
基于单片机的CO浓度检测及报警系统设计与制作_第3页
基于单片机的CO浓度检测及报警系统设计与制作_第4页
基于单片机的CO浓度检测及报警系统设计与制作_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 学号: 密级: 基于单片机的CO浓度检测及报警系统 设计与制作学 院 名 称:培黎工程技术学院专 业 名 称:电子信息科学与技术学 生 姓 名:指 导 教 师: 二一五年五月Design and Manufacture of CO Concentration Detection and Alarm System Based on SCMCollege :School of Bailie EngineeringTechnologySubject :Electronic Information Science and TechnologyName :Directed by :May 2015郑

2、重 声 明本人呈交的学位论文,是在导师的指导下,独立进行研究工作所取得的成果,所有数据、图片资料真实可靠。尽我所知,除文中已经注明引用的内容外,本学位论文的研究成果不包含他人享有著作权的内容。对本论文所涉及的研究工作做出贡献的其他个人和集体,均已在文中以明确的方式标明。本学位论文的知识产权归属于培养单位。本人签名: 日期: 摘 要本文是以STC89C52芯片为核心设计制作了一种CO浓度检测及报警系统。通过CO传感器检测空气中CO浓度,经电路处理实现报警及降低其浓度作用。该系统主要包括ADC0832模数转换芯片,CO检测,蜂鸣器预警电路,LCD液晶显示电路等。软件编程采用C语言,具有功耗低,成本

3、低等特点。关键词:CO检测;单片机;报警系统ABSTRACT A detection and alarm system for CO concentration is designed with STC89C52 chip. It detects concentration of CO in air through carbon monoxide sensors, the role of alarm and reduce its concentration is achieved by circuit.This system mainly consists of ADC0832 chip,de

4、tection of CO, buzzer alarm circuit and LCD liquid crystal display circuit.The software is programmed with C language. Therefore,the system is characterized by low power dissipation and low cost. Key words: detection of CO;Single chip microcomputer; alarmsystem 目 录第1章 绪论11.1课题的背景和意义11.2 CO检测仪的种类21.3

5、 设计任务2第2章 CO检测系统硬件设计32.1 STC89C52单片机简介32.2单片机最小系统的设计52.3数据采集系统的简介72.4模数转换器的简介82.5按键电路的设计92.6外围扩充存储器的简介92.7上拉电阻电路的设计102.8液晶显示器简介102.9报警电路的设计11第3章 CO检测系统软件设计133.1软件设计结构133.2主程序模块的设计143.3模数转换的设计153.4按键模块的设计和时钟模块的设计163.5液晶显示模块的设计17第4章 系统调试及功能实现184.1总体系统调试184.1.1软件调试184.1.2 软件下载184.2 实物展示19结论21参考文献22致谢23

6、附录24第1章 绪论1.1课题的背景和意义一氧化碳是无色、无臭、无味、有毒的气体,熔点199,沸点191.5。标准状况下气体密度为l.25g/L,和空气密度(标准状况下1.293g/L)相差很小,这也是容易发生煤气中毒的因素之一。一氧化碳分子中碳元素的化合价是2价,能进一步被氧比成4价,从而使一氧化碳具有可燃性和还原性,一氧化碳能够在空气中或氧气中燃烧,生成二氧化碳。一氧化碳中毒(carbon monoxide poisoning),亦称煤气中毒。一氧化碳是无色、无臭、无味的气体,故易于忽略而致中毒。常见于家庭居室通风差的情况下,煤炉产生的煤气或液化气管道漏气或工业生产煤气以及矿井中的一氧化碳

7、吸入而致中毒。中毒原理:一氧化碳会与肺部的血红蛋白结合,造成机体缺氧。一是轻度中毒。患者可出现头痛、头晕、失眠、视物模糊、耳鸣、恶心、呕吐、全身乏力、心动过速、短暂昏厥。血中碳氧血红蛋白含量达10%-20%。二是中度中毒。除上述症状加重外,口唇、指甲、皮肤粘膜出现樱桃红色,多汗,血压先升高后降低,心率加速,心律失常,烦躁,一时性感觉和运动分离(即尚有思维,但不能行动)。症状继续加重,可出现嗜睡、昏迷。血中碳氧血红蛋白约在30%-40%。经及时抢救,可较快清醒,一般无并发症和后遗症。三是重度中毒。患者迅速进入昏迷状态。初期四肢肌张力增加,或有阵发性强直性痉挛;晚期肌张力显著降低,患者面色苍白或青

8、紫,血压下降,瞳孔散大,最后因呼吸麻痹而死亡。经抢救存活者可有严重合并症及后遗症。一氧化碳的后遗症。中、重度中毒病人有神经衰弱、震颤麻痹、偏瘫、偏盲、失语、吞咽困难、智力障碍、中毒性精神病。部分患者可发生继发性脑病。在当今社会发展中,现代化的发展给人类带了很大的方便,但与此同时,人生安全越来越受到人们的重视,一氧化碳在工业领域所给我们带来的方便不言而喻,但它对人体的危害也是显而易见的。所以我们设计一款基于单片机控制的一氧化碳检测仪,对一氧化碳进行检测,为人们提供了安全的保障。1.2 CO检测仪的种类目前,市场上一氧化碳检测仪的种类是多种多样,目前应用得较为广泛的是热催化监测方式,但由于多种可热

9、性气体都能催化氧化燃烧,导致检测精度下降,另外,采用这种方式的检测仪体积和功率都较大,不便于随身携带,本设计使用的是一种采用点调制非光红外(NDIR)气体成分分析技术检测一氧化碳气体的方法的一氧化碳传感器,该方法提高了检测精度,大大降低了检测仪的尺度和功耗,延长了电池供给时间,体积和功耗的有效降低。1.3 设计任务本设计的任务是设计一个由单片机控制的一氧化碳的浓度检测及报警系统,它将传感器输出的电压信号进行A/D转换、滤波、线性化,由单片机将电压值转换为气体浓度和温度送LCD1602液晶显示,并判断是否超过报警上限,若超过,则发出声光报警,并打开风扇降低一氧化碳的浓度。同时用户可以自己设定报警

10、上限,使用户可以根据实际情况方便的掌握安全状况。该系统以STC89C52单片机为核心,可以实现声光报警、故障自诊断、浓度显示、报警限设置。它结构简单、性能稳定、使用方便、价格低廉、智能化,具有一定的实用价值。第2章 CO检测系统硬件设计本论文主要完成一氧化碳检测仪软件和硬件仿真设计,设计内容包括:A/D转换器程序、控制程序、超标报警、键盘检测、数据显示等。硬件设计部分主要包括:单片机、A/D转换器、时钟芯片、LCD、外围扩展数据RAM等芯片的选择;硬件主电路设计、数据采集、模数转换电路设计、液晶显示电路设计、外围扩充存储器接口电路、时钟电路、复位电路、键盘接口电路等功能模块电路设计。硬件结构框

11、图2.1。硬件设计总体电路图见附录A1。图2.1 硬件结构框图2.1 STC89C52单片机简介本系统采用STC89C52单片机。而目前世界上较为著名的8位单片机的生产厂家和主要机型如下:美国Intel公司:MCS51系列及其增强型系列;美国Motorola公司:6801系列和6805系列;美国Atmel公司:89C51等单片机;美国Zilog公司:Z8系列及SUPER8;美国Fairchild公司:F8系列和3870系列;美国Rockwell公司:6500/1系列;美国TI(德克萨司仪器仪表)公司:TMS7000系列;NS(美国国家半导体)公司:NS8070系列等等。MCS51系列单片机包括

12、三个基本型8031、8051、8751。本系统采用STC89C52单片机为控制核心。而相比之下52型功能更为强大,ROM和RAM存储空间更大,52还兼容51指令系统。基于本系统设计内容的需要,综合考虑后,我们选择单片机ATME公司的STC89C52为控制核心;主要基于考虑STC89C52是一个低电压,高性能CMOS 8位单片机,片内含8KB的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM)、6个中断源;时钟频率024MHz;器件采用高密度、非易失性存储技术生产,并兼容标准MCS-51指令系统,功能强大。STC89C52是美国ATMEL公司生产的低电压,高性

13、能CMOS 8位单片机,片内含8K bytes的可反复擦写的只读程序存储器(PEROM)和256K bytes的随机存取数据存储器,器件采用ATMEL公司的高密度,非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器和FLASH存储单元,功能强大,STC89C52单片机适合于许多较为复杂控制应用场合。 图2.2 引脚图主要性能参数:与MCS-51产品指令和引脚完全兼容;8K字节可重擦写FLASH闪存存储器;1000次写/擦循环;时钟频率:0Hz24MHz;三级加密存储器;256字节内部RAM;32个可编程I/O口线;3个16位定时/计数器;6个中断源

14、;可编程串行UART通道。2.2单片机最小系统的设计 采用STC89C52来设计一个单片机系统能运行起来的需求最小的系统15,电路图见图2.3:图2.3 单片机最小系统图上图的最小单片机系统包含有晶振电路和复位电路,STC89C52芯片组成。晶振电路在各种指令的微操作在时间上有严格的次序,这种微操作的时间次序称作时序, STC89C52的时钟产生方式有两种,一种是内部时钟方式,一种是外部时钟方式。本系统中采用了内部时钟方式,为了尽量降低功耗的原则。电路图见图2.4。图2.4 晶振电路图在89C52单片机的内部有一个震荡电路,只要在单片机的XTAL1和XTAL2引脚外接石英晶体(简称晶振)就构成

15、了自激振荡器并在单片机内部产生时钟脉冲信号,图中电容器C1和C2稳定频率和快速起振,晶振CRY选择的是12MHz。复位电路在单片机工作中仍然是不可缺少的主要部件中,单片机工作时必须处于一种确定的状态。端口线电平和输入输出状态不确定可能使外围设备误动作,导致严重事故的发生;内部一些控制寄存器(专用寄存器)内容不确定可能导致定时器溢出、程序尚未开始就要中断及串口乱传向外设发送数据1。 图2.5 上电复位电路图本设计中复位电路采用的是上电复位与手动复位电路,开关未按下是上电复位电路,上电复位电路在上电的瞬间,由于电容上的电压不能突变,电容处于充电(导通)状态,故RST脚的电压与VCC相同。随着电容的

16、充电,RST脚上的电压才慢慢下降。选择合理的充电常数,就能保证在开关按下时是RST端有两个机器周期以上的高电平从而使STC89C52内部复位。开关按下时是按键手动复位电路,RST端通过电阻与VCC电源接通,通过电阻的分压就可以实现单片机的复位4。电路图见图2.6: 图2.6 复位电路图2.3数据采集系统的简介CO传感器选用CO/CF-1000探头组成,如下表2.1。表2.1 传感器参数名称一氧化碳传感器 CO/CF-1000测量范围0 - 1 000 ppm输 出10020nA/ppm分辨率0.05 ppm响应时间 (T 90)50 seconds湿度范围15-90 %RH(非凝结)最大零点漂

17、移(20to 40)10 ppm长期漂移2% /每月推荐负载值10线性度输出线性测量电路由CO/CF-1000一氧化碳传感器、ADC0832组成。当空气被内部的采样系统接收后,产生一个与一氧化碳浓度成正比的电压信号,该电压信号经ADC0832与STC89C52单片机相连,在显示器上显示出一氧化碳的浓度值,当超过国家规定的标准时报警5。2.4模数转换器的简介由于ADC0832模数转换器具有8位分辨率、双通道A/D转换、输入输出电平与TTL/CMOS相兼容、5V电源供电时输入电压在05V之间、工作频率为250KHZ 、转换时间为32微秒、一般功耗仅为15MW等优点,适合本系统的应用,所以我们采用A

18、DC0832为模数转换器件3。电路图见图2.7如下:图2.7 模数转换电路图ADC0832 具有以下特点:8位分辨率;双通道A/D转换;输入输出电平与TTL/CMOS相兼容;5V电源供电时输入电压在05V之间;工作频率为250KHZ,转换时间为32S;一般功耗仅为15mW;8P、14PDIP(双列直插)、PICC 多种封装;商用级芯片温宽为0到+70,工业级芯片温宽为40到+85;芯片接口说明:CS_片选使能,低电平芯片使能;CH0模拟输入通道0,或作为IN+/-使用;CH1模拟输入通道1,或作为IN+/-使用;GND芯片参考0电位(地);DI数据信号输入,选择通道控制;DO数据信号输出,转换

19、数据输出;CLK芯片时钟输入;Vcc/REF电源输入及参考电压输入(复用)。由于ADC0832模数转换器的位数为8位,所以ADC0832模数转换器的精度为:10ppm/256=0.039ppm。2.5按键电路的设计本系统选择独立式按键。键盘分为:独立式和矩阵式两类,每一类按其编码方法又可以分为编码和非编码两种。本系统具有人机对话功能,该功能即能随时发出各种控制命令和数据输入以及和LCD连接显示运行状态和运行结果。由于本系统只有UP、DOWN、OK、CANCEL4个控制命令,所需按键较少,所以本系统选择独立式按键13。电路图见图2.8。图2.8 按键电路图2.6外围扩充存储器的简介由于考虑STC

20、89C52单片机具有8KB的程序存储器(ROM),256B的数据存储器(RAM),由于考虑到本系统的数据处理与存储所需的容量,现在需要扩充存储器的容量。在应用中要保存一些参数和状态,本系统选用AT24C128存储器8。电路图见图2.9。 图2.9 外围扩充存储电路图2.7上拉电阻电路的设计在主电路图中接在P0口处有一个排阻RP1,由于P0口没有内接上拉电阻,为了为P0口外接线路有确定的高电平,所以要接上排阻RP1,以确保有P0口有稳定的电平11。电路连接图见图2.10。 图2.10 上拉电阻电路图2.8液晶显示器简介我们选用了AMPIRE128X64液晶显示模块,是由于本系统要有显示装置完成显

21、示功能,显示器最好能够显示数据、图形,考虑到同种LCD显示器的屏幕越大体积越大,功耗越大的特点,该型号显示器消耗电量比较低,可以满足系统要求。该类液晶显示模块采用动态的液晶驱动,可用5V供电。AMPIRE128X64液晶共有22个引脚9。AMPIRE128X64液晶显示模块与计算机的接口电路有两种方式。分为直接访问方式和间接控制方式。直接访问方式是把液晶模块作为存储器或I/O设备直接接在单片机的总线上,单片机以访问存储器或I/O设备的方式操作液晶显示模块的工作。间接控制方式则不使用单片机的数据系统,而是利用它的I/O口来实与显示模块的联系。即将液晶显示模块的数据线与单片机的Pl口连接作为数据总

22、线,另外三根时序控制信号线通常利用单片机的P3口中未被使用的I/O口来控制。这种访问方式不占用存储器空间,它的接口电路与时序无关,其时序完全靠软件编程实现。本系统采用间接控制方式14。液晶显示电路连接原理图见图下:图2.11 液晶显示器电路图2.9报警电路的设计图2.12 报警电路接线图报警信号通常有三种类型:一是闪光报警,因为闪动的指示灯更能提醒人们注意;二是鸣音报警,发出特定的音响,作用于人的听觉器官,易于引起和加强警觉;三是语音报警,不仅能起到报警作用,还能直接给出警报种类的信息。其中,前两种报警装置因硬件结构简单,软件编程方便,常常在单片机应用系统中使用;而语音报警虽然警报信息较直接,

23、但硬件成本高,结构较复杂。单频音报警实现单频音报警的接口电路比较简单,其发音元件通常可采用压电蜂鸣器,当在蜂鸣器两引脚上加315V直流工作电压,就能产生3kHZ左右的蜂鸣振荡音响。压电式蜂鸣器,约需10mA的驱动电流,可在某端口接上一只三极管和电阻组成的驱动电路来驱动,如图2.12所示。在图2.12中,P1.0接三极管基极输入端,当P1.0输出高电平“1”时,三极管导通,蜂鸣器的通电而发音,当P1.0输出低电平“0”时,三极管截止,蜂鸣器停止发音12。第3章 CO检测系统软件设计3.1软件设计结构软件设计部分主要包括:主程序/子程序流程的设计、功能模块程序的编写、软/硬件结合调试与演示。主要包

24、括以下功能模块:51驱动、检测、液晶显示、时钟、键盘、模数软换10,软件结构框图3.1。 系统初始化、按键扫描显示选择菜单测量相关设置数据处理串行通信对软件进行处理图3.1 软件结构框图3.2主程序模块的设计主程序实现的功能:与硬件相结合实现便携式一氧化碳检测仪的各个功能。主要是检测与显示,时间调整与显示,数据存储,功能子函数的调用,见图3.2。检测主程序程序见附录A2。开 始初始化CPU初始化时钟初始化LED屏显示开机画面显示时间显示主菜单读 键 图3.2 主程序流程图3.3模数转换的设计ADC0832转换的流程图见下图3.3;ADC0832程序见附录A3。开始使能芯片产生时钟信号输入通道控

25、制字读取2字节数据读取2字节数据字节数据校正送入指定寄存器结束图3.3 数转换流程图3.4按键模块的设计和时钟模块的设计按键查询式的流程图见下图,按键程序见附录A4。按键程序入口按键按下调用延时程序按键释放NYN键值传送 图3.4 按键查询式的流程图时钟模块操作流程图见下图,时钟程序见附录A5。开始初始化保护寄存器操作向DS写入字节数据向DS读取字节数据结束图3.5 时钟模块操作流程图3.5液晶显示模块的设计 LCD模块在本系统中主要起着开界面汉字显示,以及各控制效果的显示。采用直接访问方式。液晶显示的操作流程图见下图3.6,液晶程序见附录A6。入口 读状态字 否忙? 是写指令代码/显示数据读

26、显示数据图3.6 液晶显示的操作流程图第4章 系统调试及功能实现4.1总体系统调试 4.1.1软件调试打开keil软件,打开程序,检查后单击编译按键,如果未发现错误和警告则说明程序能够正常运行。编译结果如图所示:图4.1 软件编译结果图所以程序能够正常运行。 4.1.2 软件下载通过串口将电脑中已经编写好的程序传输入51单片机中,打开电源,检查各模块是否正常工作。首先将STC_ISP_V483这个串口通信软件打开,选择打开程序文件选项,找到需要录入单片机的hex文件,选择下载选项,点击后给单片机上电复位,等待信息框中显示已下载成功,说明程序已经录入单片机。接下来首先通过按键选择工作模式,然后根

27、据传感器模块的类型将相应的气体放置在传感器探头附近,等待声光报警模块工作,当报警模块工作后,通过按下外部中断按键选择报警模式,按一下则led二极管关闭,按第二下则蜂鸣器关闭,按第三下则led和蜂鸣器都打开。将三个传感器模块都检查完毕后,按下复位键,并关闭电源。通过监测总体系统能够正常工作。4.2 实物展示焊接成品如下图4.2所示:4.2 焊接成品图在焊接过程中,本设计采用万能板来焊接,同时外接电源采用的是USB供电。接通电源初始图如4.3所示 :4.3 接通电源初始图在电源刚接通时,液晶屏显示当前CO浓度为000 PM,设置的界限值为100 PM,风扇处于未转动状态,发光二极管未亮并且蜂鸣器不

28、报警。系统工作时如图4.4所示:4.4 工作实物图当CO传感器检测到的CO浓度大于国家标准值100ppm时,蜂鸣器报警同时红色指示灯发光、风扇转动。结论本次设计的任务是设计制作CO浓度检测报警器,设计中使用了低电压、高性能CMOS8位微处理器STC89C52 单片机作为控制核心,总体电路具有运行速度快,稳定,结构简单,散热迅速等特点,采用模块化设计,这样不仅有利于系统硬件的设计和调试,同时也方便对系统进行更改和系统硬件的升级。CO/CF-1000气体传感器模块的特点在于其简易性和高效性,由于其输出口在监测到有害气体时直接输出低电平,这样就免去了从气体传感器上采集信号,这样硬件设计更加简洁,所需

29、的器件也更加易于购买,硬件出错率也就更小,更加符合本设计的目的。本次设计涉及到的知识面较多,由于本人理论水平和实践经验有限,本次设计还存在一些有待改进和优化的地方,比如在检测气体种类上可以增加对烟雾、NO等方面。在实用性方面可以考虑将浓度监测系统与室内换气系统连接,这样就不仅做到了气体监测和警报,还做到了对有害气体及时处理,使整个室内监控系统更加完善。参考文献1何立民MCS-51系列单片机应用系统设计 M北京航空航天大学出版社,1990,34-50.2马忠梅单片机的C语言应用程序设计M北京航空航天大学出版社,2001,60-90.3陈小忠单片机接口技术实用子程序M人民邮电大学出版社,2005,

30、80-120.4张淑清单片微型计算机接口技术及其应用M国防工业大学出版社,2001,60-70.5曹琳琳单片机原理及接口技术M国防科技大学出版社,2000,80-102.6郭天祥.新概念51单片机C语言教程M.北京:电子工业出版社,2009,120-140.7周航慈.单片机应用程序设计技术M.北京:北京航空航天大学出版社,2011,70-103.8石秀名.嵌入式系统原理与应用M.北京:北京航空航天大学出版社,2009,30-50.9王宜怀.嵌入式技术基础与实践M.北京:北京航空航天大学出版社,2007,90-100.10谭浩强.C程序设计M.第四版.北京:清华大学出版社,2010,87-90.

31、11陈志旺.51系列单片机系统设计与实践M.北京:电子工业出版社,2008,98-115.12余锡存,曹国华.单片机原理及接口技术.第二版.西安:西安电子科技大学出版社,2012,150-170.13徐煜明单片机原理及接口技术M电子工业出版社,2005,110-140.14赵新民智能仪器原理及设计M哈尔滨工业大学出版社,1995,67-98.15徐英慧.嵌入式系统设计M.北京航空航天大学出版社,2010,35-60.致谢 我的毕业课题是便携式一氧化碳检测仪的设计,是一个实际的小工程。作为一个本科的学生,我对实际的工程设计认识不够,经验不足,难免在设计的整体框架中,有很多的细节没有考虑。但*老师

32、和同学们给予我鼓励和很多宝贵的建议,并且悉心引导,给予我一个比较清晰的设计思路,帮助我解决了许多设计上的困难。最后还要感谢在百忙之中进行论文评审的老师们,对论文的不足之处敬请批评点。附录附录A1 硬件设计总体电路图附录A2 检测主程序程序#include /调用外函数/#include #include #include #include #include #include /*初始化CPU*2/void init_cpu() /初始化cpu EA=1;TR0=1;TR1=1;TMOD=0 x11;TH1=0 x3c;TL1=0 xb0;/*void time1(void) interrupt

33、 3 using 1 TH1=(65536-50000)/256;TL1=(65536-50000)%256; keyval=P1; * /初始化CPU结束/void main_menu_initial() /LCD主菜单初始化./main1_menu0.menu_count=4; /有4个菜单项./main1_menu0.display=measurearray; /定义一个”开始测量“数组/main1_menu0.subs=NULL; main1_menu0.children_menus=measure_menu;/当前菜单子菜单的指针main1_menu0.parent_menus=NU

34、LL;void measure_menu_initial() /“开始测量”菜单设置/ measure_menu0.menu_count=2; measure_menu0.display=qr; /开始测量函数, 确认. measure_menu0.subs=start_measure_function; /开始测量函数 measure_menu0.children_menus=NULL; measure_menu0.parent_menus=main1_menu; measure_menu1.menu_count=2; measure_menu1.display=qx; /开始测量函数, 取

35、消. measure_menu1.subs=NULL; measure_menu1.children_menus=NULL; measure_menu1.parent_menus=main1_menu; /还有void store_menu_initial()、void time_menu_initial()/void led_menu_pro() max_item=menu_led-menu_count;switch(keyval)case 0: break;case 1: /向上键.if(user_choosen=0)user_choosen=max_item;shuaxin=1;user

36、_choosen-;break; /“向上”“向下”“确认”“取消”键/if(shuaxin)/是否需要刷新LCD标志位. Clr_Scr(); shuaxin=0;led_menu_show();v oid led_menu_show()uchar n;max_item=menu_led-menu_count;if (max_item=4) /菜单项为3则表示为主菜单.for(n=0;n4;n+) draw_bmp(n*2,20,96,0,menu_ledn.display);select_item(user_choosen); /标记出当前菜单项.elseswitch(temp_choos

37、en) case 0:draw_bmp(0,20,96,0,measurearray); /“开始测量”数组/break; default:break;for(n=0;n1)&0 x1; _nop_(); _nop_(); ADCLK=0;/拉低CLK端,形成下降沿3 ADDI=1;/控制命令结束 _nop_(); _nop_(); dat=0; for(i=0;i8;i+) dat|=ADDO;/收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;/形成一次时钟脉冲 _nop_(); _nop_(); dat=1; if(i=7)dat|=ADDO; for(i=0

38、;i8;i+) j=0; j=j|ADDO;/收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;/形成一次时钟脉冲 _nop_(); _nop_(); j=j7; ndat=ndat|j; if(i=1; ADCS=1;/拉低CS端 ADCLK=0;/拉低CLK端 ADDO=1;/拉高数据端,回到初始状态 dat0; i-) IO = ACC0; CLK = 1; /下降沿写入数据/ CLK = 0; ACC = ACC 1; /*函数:读出字节子函数*/OutputByte(void) /上升沿读出数据/*函数:设置初始时间*/void SetTime(unsig

39、ned char *pSecDa) WriteTo1302(0 x8e,0 x00); / 控制命令,WP=0,写操作 / for(i =7;i0;i-) WriteTo1302(Addr,*pSecDa); / 秒 分 时 日 月 星期 年 / pSecDa+; Addr +=2; WriteTo1302(0 x8e,0 x80); / 控制命令,WP=1,写保护 / /*函数:读取DS1302当前时间*/void GetTime(void) for (i=0;i 返回给小时位/ if(sec&0 x0f)=0 x0a) sec&=0 xf0; sec+=0 x10; / 如果秒位满十,向十

40、秒位进一 if(day=8) day=1; / 如果星期满七,重新从星期一开始计 / if(sec&0 xf0)=0 x60) sec&=0 x0f; / 如果十秒位满六,清零 /if(date&0 xf0)=0 x30)&(date&0 x0f)=0 x02) date&=0 x00;if(month&0 xf0)=0 x10)&(month&0 x0f)=0 x03) month&=0 x00;if(year&0 xf0)=0 xa0) year&=0 x0f; Curtime0 = sec; Curtime1 = min; SetTime(&Curtime0); / 将调整过后的时间值写

41、入DS1302 / / *时钟初始化子函数*/void Init_Clock(void) K1=1; K2=1; K3=1; K4=1; K5=1; K6=1; K7=1; KT=0; n=0; Init_T0(); /*刷新显示子函数*/ void Refresh(void) GetTime(); CS1=1;CS2=0; if(K6) sz_disp16(5,40,1,shuzisec&0 x0f); / 秒位 / sz_disp16(5,32,1,shuzisec4); / 十秒位 / else hz_disp16(5,32,1,kongbai2); / 秒位 十秒位 / if(K5)

42、sz_disp16(5,8,1,shuzimin&0 x0f); / 分钟位 / sz_disp16(5,0,1,shuzimin4); / 十分位 / else hz_disp16(5,0,1,kongbai2); /*状态判断于提示*/void State(void)CS1=1;CS2=0;if(KT=1) hz_disp16(1,32,1,tiao); hz_disp16(1,48,1,shi2); else hz_disp16(1,32,1,kongbai2); hz_disp16(1,48,1,kongbai2); 附录A6 液晶程序/*位定义*/sbit RST = P20; /

43、复位端 /sbit E = P21; / 使能端 / #define Disp_On 0 x3f / 显示开指令 /#define Disp_Off 0 x3e / 显示关指令 /#define Col_Add 0 x40 / 定位到第0列指令 /#define Page_Add 0 xb8 / 定位到第0页指令 /#define Start_Line 0 xc0 / 定位从DDROM中的第0行开始往屏幕上显示 unsigned char code measurearray/*调入了一幅图像:测量:宽度x高度=96x16*/ unsigned char code storearray /*调入

44、了一幅图像:存储:宽度x高度=96x16*/ /还有时间设置,开始测量等图像/*汉字点阵码*/char code huan= / 欢 16*16 /0 x14,0 x24,0 x44,0 x84,0 x64,0 x1C,0 x20,0 x18,0 x0F,0 xE8,0 x08,0 x08,0 x28,0 x18,0 x08,0 x00,0 x20,0 x10,0 x4C,0 x43,0 x43,0 x2C,0 x20,0 x10,0 x0C,0 x03,0 x06,0 x18,0 x30,0 x60,0 x20,0 x00;/迎,使,用,等汉字如其所示/*字母点阵码*/char code Kg_K= / 字母K 8*16 /0 x08,0 xF8,0 x88,0 xC0,0 x28,0 x18,0 x08,0 x00,0 x20,0 x3F,0 x20,0 x01,0 x26,0 x38,0 x20,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论