




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学单片机应用实习报告书单片微型计算机结构设计原理与应用课程实习报告实习任务说明(1)利用上述材料完成单片机最小系统的设计、焊接、调试;(2)完成ISP下载电路的设计、焊接;(3)完成应用系统扩展电路部分的设计、焊接、调试,应用系统扩展电路的具体要求如下:1)键盘、显示电路利用单片机最小系统、6个7段LED数码管、12个按键,设计制作一个键盘、显示电路。可以使用8279键盘显示接口电路,也可以使用单片机的并行接口作为键盘显示接口。2) 数字时钟在键盘、显示电路的基础上完成一个数字时钟的设计,完成以下功能:要求以24小时计时方式显示时、分、秒;时、分、秒可以通过按键分别调整。3) 数字温度计在上题的硬基础上,制作一个数字温度计。完成以下功能:利用DS18B20可编程1-Wire数字温度传感器芯片,或利用AD590温度传感器芯片和A/D转换器芯片采集温度温度信号;当按下键盘上的温度显示按键时将实时温度信息显示在LED显示器上,当按下键盘上的时钟显示按键时,恢复时钟的正常显示;通过串行通信的方式,将采集到的实时温度信息送至第二个单片机系统,并在二个单片机系统显示实时温度。4) 数字频率计在上题的硬基础上,制作一个数字频率计。完成以下功能:利用MCU设计一个数字频率计,用于检测0500kHz周期信号的频率,输入信号幅度范围:0.110V;当按下键盘上的频率显示按键时将测量的频率信息显示在LED显示器上,当按下键盘上的时钟显示按键时,恢复时钟的正常显示;(4)利用仿真软件完成系统仿真工作;(5)完成系统软件的设计,包括程序结构设计、流程图绘制、程序设计。1 基本原理简介1.1 STC89C52结构功能介绍STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory )的低电压,高性能COMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。STC89C52具有8K在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准配置:8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选,即机器周期可为时钟周期的6或12分频。STC89C52引脚图如下:图1-1 STC89C52引脚图STC89C52芯片共40引脚,各引脚功能如下:18脚:通用I/O接口P1.0P1.7。9脚:RST复位端。10,11脚:RXD串口输入,TXD串口输出。1219脚:I/O接口P3.0P3.7(12,13脚分别为INT0中断0和INT1中断1)。14,15脚:外部计数脉冲T0、T1输入端。16,17脚:WR写控制和RD读控制输出端。18,19脚:晶振谐振器20地线。2128脚:P2接口,高8位地址总线。29脚:片外ROM选通端PSEN,单片机对片外ROM操作时(PSEN)输出低电平。30脚:ALE/PROG,ALE为地址锁存允许端,PORG为编程脉冲的输入端。31脚:EA ,ROM取指令控制端,高电平片内取,低电平片外取。3239脚:I/O口P0.7P0.0,这八位I/O需外接上拉电阻。40脚:电源+5V输入端。STC89C52主要功能如下表:表1 STC89C52的主要功能兼容MCS51指令系统8K可反复擦写Flash ROM32个双向I/O口256x8bit内部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能1.2 基于单片机的数字频率计基本原理本次设计采用单片机来做为数字频率计的核心控制电路,辅之于少数的外部控制电路。系统组成包括信号放大整形电路、分频电路、数据选择器、单片机AT89C51和显示电路等。被测信号经过放大整形后,进入单片机开始计数,利用单片机内部定时计数器定时,然后把所计的数经过相关处理后送到显示电路显示。频率计组成框图如图1-2所示。放大整形电路分频电路多路数据选择器单片机显示电路待测信号按键图1-2 频率计组成框图2 方案论证 2.1 数字时钟方案方案一:同样以STC89C52作为硬件核心,利用51单片机内部的定时器进行计时,同时可以通过控制按键实现时分秒的调整,最后通过6位LED数码管显示时分秒,该种方案虽然在时间上有一定的误差,但成本较低。方案二:以STC89C52作为硬件核心,采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对时、分、秒、周、年进行计数,精度也比较高,再利用LED液晶对时钟进行显示。方案一较简单,但精度不高,完全利用单片机自身资源实现。方案二精度很高,而且只需要占用单片机的一个I/O,考虑到本次实习设计的系统较庞大,为节省单片机定时器等资源,减轻处理器负担,我采用方案二。2.2 数字温度计方案方案一:采用热敏电阻103。利用热敏电阻一类的感温器件的感温效应,然后将随被测温度变化的电压或者电流采集过来,进行A/D转换后,传到51单片机,利用51单片机对这些此采集过来的数据进行处理,并最终将测量的温度显示在LED数码管之上。方案二:利用DS18B20采集温度。利用专门感应温度的温度传感器DS18B20感应温度,然后用51单片机的系统读取该传感器的温度,最终将温度显示在LED数码管之上,同时利用串口通信将温度信号发送出去。方案一利用热敏电阻的感温特性,测量结果可能与实际值相差比较大;方案二采用了数字化温度传感器DS18B20,使得电路的分析数字化,其调试过程变得变得简单,更是因为采用了单片机,使得电路的大部分功能都可以由软件来完成,这使得硬件电路非常简单,功能却非常完善。所以选择方案二。 2.3 数字频率计方案电子计数式的测频方法主要有以下几种:脉冲数定时测频法(M法),脉冲周期测频法(T法),以及多周期同步测频法。分别介绍如下:(1)脉冲数定时测频法(M法):此法是记录在确定时间Tc内待测信号的脉冲个数Mx,则待测频率为: Fx=Mx/Tc(2)脉冲周期测频法(T法):此法是在待测信号的一个周期Tx内,记录标准频率信号变化次数Mo。这种方法测出的频率是: Fx=Mo/Tx几种方案的优劣讨论:(1)M法:时间Tc为准确值,测量的精度主要取决于计数Mx的误差。其特点在于:测量方法简单,测量精度与待测信号频率和门控时间有关,当待测信号频率较低时,误差较大。(2)T法:此法的特点是低频检测时精度高,但当高频检测时误差较大。考虑到本设计中所测频率范围和对数字频率计的精度要求不是很高,而且用第二种方法测量低频(低于15Hz)时为不使计数器溢出需要对输入信号进行倍频,这大大增加了设计开销。所以采用第一种方法。3 硬件设计 3.1 单片机最小系统单片机最小系统包括晶振时钟电路和复位电路。原理图如图3-1所示。图3-1 单片机最小系统在单片机引脚XTAL1和XTAL2外接晶体整荡器或陶瓷振荡器,就构成了内部震荡方式,由于单片机内部有一个高增益反向放大器,当外接晶振后,就构成了自激振荡器,并产生振荡时钟脉冲,晶振通常选择6MHz、12MHz或24MHz。与晶振连接的电容起稳定振荡频率、快速起振的作用。电容值一般为530pf。复位操作完成单片机片内电路初始化,复位结束后,单片机从一种确定状态开始运行。当单片机复位引脚RST出现5ms以上高电平时,单片机就完成复位操作。复位操作通常有两种形式:上电复位和开关复位。常用上电开关复位电路如上图所示,上电后,由于电容C1充电,时RST持续一段时间高电平。当单片机已在运行中时,按下复位键也能使RST持续一段时间高电平,从而实现开关复位操作。通常C1=1030uf,R1=10k。 3.2 矩阵键盘电路键盘是计算机系统中不可缺少的输入设备,当按键少时可接成线性键盘,当按键较多时,这样的接法占用口线较多。将按键接成矩阵的形式,可以节省口线,例如两个接口可按8*8的形式接64个按键。每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过并行接口和CPU通信。矩阵键盘的行线和列线分别通过两并行接口和CPU通信,在接键盘的行线和列线的两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态。由行扫描和列回馈信号共同形成键盘码。如图3-2为4*3矩阵键盘。图3-2 4*3矩阵键盘3.3 显示电路本次数字时钟显示时间需要6位,因此需要采用6个数码管,若单独采用数码管连线时比较麻烦,故设计采用6位一体的共阴极数码管,若使6个数码管显示正常时间,必须采用采用数码管的动态扫描方式,即每一时刻只有一个数码管点亮,采用软件延时和人眼的视觉暂留效果,使人眼看到的数码管是同时点亮的。因此需要用6个端口控制数码管的位选,即决定哪个数码管点亮。每个数码管的8个数据口控制数码管的段选,即决定数码管显示什么字符。考虑到数码管采用动态扫描方式,即循环扫描数码管的6位,并将显示字符送入段选位,我们采用P1口控制数码管的8个段选位,并采用74HC573实现数码管驱动及数据锁存功能,如图3-3所示。 图3-3 6位8段数码管显示电路3.4 数字时钟电路DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31 字节静态RAM,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒分时日日期月年的信息。每月的天数和闰年的天数可自动调整。时钟操作可通过AM/PM 指示决定采用24或12小时格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线(RES)复位(I/O)数据线(SCLK)。串行时钟的时钟/RAM 的读/写数据以一个字节或多达31个字节的字符组方式通信。DS1302 工作时功耗很低,保持数据和时钟信息时功率小于1mW。本系统中DS1302与单片机的连接原理图如图3-4所示。图3-4 DS1302与单片机的连接原理图其中晶振频率为32.768KHz,作为DS1302的基准时钟源。3.5 温度采集电路由于采用温度采集芯片DS18B20,温度采集电路比较简单。数字温度计的温度采集组要是由DS18B20进行,它可以采用两种供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个电阻来完成对总线的上拉。本次采用的是寄生电源供电方式。DS18B20的2脚接单片机的P3.2口。单片机从DS18B20的DQ引脚读取温度值之后,经过一定的处理显示在液晶屏上。温度采集电路如图3-5所示。图3-5 温度采集电路3.6 串口通信本此实习要求将采集到的温度通过串口通信将温度发送到另一个单片机最小系统并予以显示,根据串口通信的原理,只需要将发送方单片机系统的发送端口P3.1(TXD)与接收端的接收端口P3.0(RXD)连接起来,同时给它们以相同的波特率,即可以实现两块单片机系统的通信。当单片机显示温度时,同时也可以将温度发送给第二块单片机系统显示。接收端单片机的显示和发送端单片机的显示原理是相同的,这里就不再赘述。3.7 数字频率计电路频率就是周期性信号在单位时间内变化的次数。由此可知,测频的原理简而言之就是“在单位时间内对被测信号进行计数”。被测信号通过输入通道的放大整形器进行整形之后成为标准的矩形波,单片机提供比较准确的时基信号作为基准的时间脉冲信号,只需测量在1s内信号的脉冲个数N,就可以得出信号的频率f=NHz。测量时,利用51单片机的定时器2产生1s的基准时间信号,计数器T0对输入的信号下跳沿进行计数,计输入信号的脉冲个数。数字频率计电路原理图如图3-6所示。图3-6 数字频率计电路原理图图中,电用二极管和运放对输入信号进行限幅放大,由于输入信号频率最高为500KHz,对单片机的接收处理带来难度,所以需要对较高频率进行分频。为保证测量精度,需要对不同频段的信号进行不同程度的分频。若设计要求测量精度为0.1%,则可按下列方法进行分频。(1)1Hz40KHz频段此频段内的信号不需要分频。(2)40KHz500KHz频段对此频段内的信号进行32分频。由于M法计数的1误差,导致最大测量误差为:32/40000100%=0.08%0.1%图中由二进制计数器对较高频率的信号进行分频。分频信号与原频率信号通过多路选择器输出送给单片机T0引脚,多路选择器的通路选择可由量程选择按键手动调整,初始为不分频输出测量结果通过1602液晶显示。液晶在本设计中不是重点,不多介绍。液晶与单片机的连接电路如图3-7所示。图3-7 液晶显示电路原理图4 软件设计在软件设计过程中,依次对数字时钟闹钟,数字温度计,数字频率计等部分进行设计,首先得了解满足要求的程序流程图,然后根据流程图写出对应的C51程序,利用PROTEUS进行仿真,通过一步步地调试,使其达到设计目标。整体C51程序见附录(二)。主要流程图如下。(1)数码管显示流程图:动态显示子程序读取要显示的数据找到该数据的编码送位选数据到P0口输出送段选数据到P1口输出延时显示下一位图4-1显示模块的程序流程图(2)频率测量流程图:开始设置T0为16位计数模式,T2为16位重装计数模式打开T0、中断,T2开始计数否产生1S中断?是关闭定时/计数器T0、T2读取TH0、TL0的值并换算成频率结束 图4-2 M法测频程序流程图系统主程序流程图如下:开始初始化矩阵键盘数码管显示扫描有按键按下?否是时钟/频率切换键按下时钟/温度切换键按下进入时钟显示/频率测量子程序下进入时钟显示/温度测量子程序显示操作结果结束图4-3 系统主程序流程图5 系统仿真 软件仿真采用keil软件和protues软件的联调来实现,Proteues软件是Labcenter Electronics公司的一款电路设计与仿真软件,Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。通过Proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。采用keil软件与之联调效果比较好。系统各模块仿真结果见下文。5.1 矩阵键盘数码管显示仿真矩阵键盘仿真实现以下功能:对矩阵键盘进行扫描,按下不同的键,在数码管对应的位置显示不同的数值。当横数第三个键按下时显示如图5-1所示。图5-1 矩阵键盘数码管显示仿真结果5.2 DS1302数字时钟仿真DS1302时钟仿真结果如图5-2所示。图5-2 数字时钟仿真结果5.3 DS18B20数字温度计仿真DS18B20数字温度计仿真结果如图5-3所示。图5-3 数字温度计仿真结果5.4 数字频率计仿真把频率计部分的C51程序的Hex文件加载到proteus电路图的CPU中,设置信号源可以改变输入频率在1500KHz之间(但是经实验发现输入频率高于40KHz后仿真运行变慢),仿真结果如图5-4所示。方波频率仿真测量结果:(a)f=1Hz(b)f=50KHz(c)f=500KHz图5-4 频率计仿真结果6 实物调试 经实际验证,系统各模块均调试成功,调试结果见下图。但当把各模块程序整合到一起之后,在主程序里面队和模块依次进行扫描,发现液晶显示不够稳定,按键检测也不够灵敏。我认为这是由于51单片机的处理速度不够快造成的。后来我改变主程序算法,即在while(1)循环里面进行各个数据的液晶显示,而每隔20ms在T0中断服务函数里面进行按键扫描及数据处理,系统运行效果得到改善。(a)(b)图6-1 数字时钟实物调试结果(a)(b)图6-2 数字温度计实物调试结果7 结果分析与总结 从仿真结果来看,本次设计结果还是比较理想的,当然这和仿真环境本来就是理想环境有关。这也决定了仿真与实际还是有一定差别的。比如我调试DS18B20程序时,实际硬件检测情况很好,但仿真时就有问题。此外,通过频率计仿真我发现,proteus软件仿真时都有一个CPU占用率,当电路越复杂时,这个值越高,所测频率越高时,这个值也越高。当CPU占用率接近100%时,仿真几乎无法运行!我想这也是仿真的局限性。相比于电路仿真,实际硬件测试结果更具有确定性和现实意义。对于本次设计,在硬件制造合格、电路连接正确的前提下,硬件测试实际上是个软件调试的过程。这需要我们具有一定的软件开发能力。在硬件调试过程中,难免出现了很多错误,比如我调试DS1302时钟芯片时,数据的显示总是紊乱,最先我总是怀疑是软件的问题,一遍一遍地检查,觉得算法都没问题。后来便想:既然数据显示出错,是不是因为信号在传送过程中发生畸变了呢?于是我就在DS1302与单片机连接的端口加上上拉电阻,果然问题解决了。就这样经过一次次软件或硬件的改进,最终获得成功。从最终的结果来看,硬件调试还是比较理想的,达到了设计要求。综合来看,我认为软件仿真和硬件测试是相辅相成的,各有优劣,在产品设计开发过程中我们应该综合应用各种方法,使设计效果与效率最佳化。对我来说,这次单片机实习并不太难。因为我自己以前已经自学并了C51开发知识并经过了实践,而且这学期又开了单片机课程,进一步巩固了相关理论知识。我认为我完全有能力做出精彩的设计。但是不得不说,我对自己的这次设计并不太满意。在各模块调试成功的基础上,综合程序也在硬件上成功运行。唯独频率计的较高频率测量存在一定困难。经我总结,是因为信号预处理(限幅放大、分频)电路工作状况不好,输出信号的幅度太小,以致不能被单片机识别,而软件算法上是没有问题的。本想通过预处理电路使频率测量精度保证在0.1%以上,却不想这成为了本次设计的瑕疵。不过我已下定决心继续研究,最终获得令自己满意的结果。我想这才是此次实习的真正意义所在。总之,经过此次实习,收获是多方面的,我进一步熟悉了PROTUES、KEIL等软件的使用,提升了C51编程能力,锻炼了动手能力,在理论知识获得进步之外,还学会了独立处理问题的方法。今后我会在实践中进一步学习各种专业知识,提升专业技能,为将来工作打下基础。 参考文献1郭天祥,51单片机C语言教程,北京:电子工业出版社,20092李群芳等,单片微型计算机与接口技术,北京:电子工业出版社,20093张齐等,单片机原理与嵌入式系统设计原理 应用,Proteus仿真,实验设计,北京:电子工业出版社,20114黄智伟,全国大学生电子设计竞赛系统设计,北京:北京航空航天大学,20115康华光,电子技术基础数字部分(第五版),北京:高等教育出版社,20066康华光,电子技术基础模拟部分(第五版),北京:高等教育出版社,2006附录(一) 整体电路原理图附录(二) 程序清单(1)延时头文件#ifndef _DELAY_H_#define _DELAY_H_/#endif#includevoid delay(uint n)uint i,j;for(i=n;i0;i-)for(j=110;j0;j-);#endif(2)键盘显示头文件#ifndef _JIANPANXS_H_#define _JIANPANXS_H_#include#includedelay.hsbit duan=P33; /相当于开关,置1打开通道,置0则关闭uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/共阴码表void seg_disp(uchar aa)switch(aa) /片选case 1:P0=0xff&0xfe;break;case 2: P0=0xff&0xfd;break;case 3:P0=0xff&0xfb;break;case 4:P0=0xff&0xf7;break;case 5:P0=0xff&0xef;break;case 6:P0=0xff&0xdf;break;case 7:P0=0xff&0xbf;break;case 8:P0=0xff&0x7f;break;duan=1; /段选P1=tableaa;duan=0;void jpscan()uchar temp,key;P2=0xef; /检测第一行,行拉低temp=P2;temp=temp&0xef; /判断是否有键被按下if(temp!=0xef)delay(1); /去抖延时temp=P2;switch(temp)case 0xee:key=1;break;case 0xed:key=2;break;case 0xeb:key=3;break;case 0xe7:key=4;break;while(temp!=0xef) /如果按键没被释放,则不停读取P2口数据temp=P2;temp=temp&0xef;seg_disp(key);P2=0xdf; /显示第二行 temp=P2;temp=temp&0xdf;if(temp!=0xdf)delay(1);temp=P2;switch(temp)case 0xde:key=5;break;case 0xdd:key=6;break;case 0xdb:key=7;break;case 0xd7:key=8;break;while(temp!=0xdf)temp=P2;temp=temp&0xdf;seg_disp(key);void jianpan_init()P0=0xff; /先关闭所有数码管位选duan=1; /打开通道P1=0x00; /送段选duan=0; /关闭通道P2=0xff; /矩阵键盘初始化#endif(3)液晶显示头文件#ifndef _LCD_H_#define _LCD_H_#include#includedelay.hvoid write_com(uchar com);void Lcd_Init();void write_data(uchar dat);sbit lcden=P35;sbit lcdrw=P36;/读写选择端,要置低sbit lcdrs=P37;/数据或命令选择端void write_com(uchar com)uchar i,temp,com1;lcdrs=0;/选择写命令lcdrw=0;/读写选择写P1=com1;/液晶输入端接单片机P1口P1=com;/液晶输入端接单片机P1口delay(1);lcden=1;/产生上升沿delay(1);lcden=0;void write_data(uchar dat)uchar i,temp,dat1;lcdrs=1;/选择写数据lcdrw=0;P1=dat;/液晶输入端接单片机P1口delay(1);lcden=1; delay(1); lcden=0;void clear()write_com(0x01); /清空屏幕void go(uchar x,uchar y)if(x=1)write_com(0x80+y);/从液晶第一行左端开始写入数据elsewrite_com(0x80+0x40+y);/从液晶第二行左端开始写入数据void shownum(uint dat,uchar c)/c=1显示整数,c=0显示小数部分uchar bai,shi,ge;bai=dat/100;/分离各个数位shi=(dat/10)%10;ge=dat%10;if(c=1)if(bai0)write_data(0x30+bai);write_data(0x30+shi);/显示十位else /if(bai=0)write_com(0x14);/光标右移一个字符的距离if(shi0)write_data(0x30+shi);/显示十位else /if(shi=0) write_com(0x14);/光标右移一个字符的距离write_data(0x30+ge);/显示个位else if(c=0)write_data(0x30+bai);write_data(0x30+shi);write_data(0x30+ge);void showstr(uchar *t)while(*t)write_data(*t);/向液晶读入字符串t+;void Lcd_Init()lcden=0;write_com(0x38); /设置16x2显示,5x7点阵,8位数据接口write_com(0x0c); /打开显示,不显示光标write_com(0x06);/写一个字符后指针加1clear();/显示清零,数据指针清零 #endif(4)DS1302头文件#include#include#includeLcd.h#define uchar unsigned char#define uint unsigned int #definewmod 0x84/写入设置时间为24小时模式指令的寄存器地址#define wsec 0x80/写秒指令的寄存器地址#define wmin 0x82#define whou 0x84#define wday 0x86#define wwee 0x8a#define wmon 0x88#define wyea 0x8c#define rsec 0x81#define rmin 0x83#define rhou 0x85#define rday 0x87#define rwee 0x8b#define rmon 0x89#define ryea 0x8d#define wpro 0x8e/写保护指令地址,防止应写之前对任一寄存器的写操作char s1num,shi,fen,miao,day,week,month,year;uchar code table1=20 - -;uchar code table2=: : ;sbit SCLK=P07;/时钟位 sbit IO=P06;/数据位 sbit RST=P05;/DS1302片选 sbit s1=P20;/功能键sbit s2=P21;/增大键sbit s3=P22;/减小键uchar change(uchar num) /十进制转化为十六进制return (num/10)*16+num%10; void showsfm(uchar addr,uchar time)/时分秒的地址分别为4,7,10uchar shi,ge;shi=time/10;ge=time%10;write_com(0x80+0x40+addr);write_data(0x30+shi);write_data(0x30+ge);void showdate(uchar addr,uchar time) /年月日的地址分别为3,6,9uchar shi,ge;shi=time/10;ge=time%10;write_com(0x80+addr);write_data(0x30+shi);write_data(0x30+ge);void showweek(uchar we)go(1,12);switch(we)case 1:showstr(MON );break;case 2:showstr(TUE );break;case 3:showstr(WED );break;case 4: showstr(THU );break;case 5: showstr(FRI );break;case 6: showstr(STA );break;case 7: showstr(SUN );break; void write1302(uchar addr,uchar dat)uchar i,temp;RST=0;SCLK=0;RST=1;for(i=0;i=1;SCLK=1;for(i=0;i=1;SCLK=1;RST=0;uchar read1302(uchar add)uchar temp,t;RST=0;_nop_();SCLK=0;_nop_();RST=1;_nop_();temp=add;for(t=0;t=1;temp=0;for(t=0;t=1; temp=(temp/16)*10+temp%16; /十六进制转化为十进制return temp;void ds1302_init()RST=0;SCLK=0;/1302初始化,只用于第一次上电write1302(wpro,0x00); /禁止写保护write1302(wmod,0xa0); /24小时制,位5置1write1302(wsec,0x00); /秒初始化,注意:第二个参数即要写入的数据是十六进制的,但读出的是十进制,故需将写入的参数换成想要显示的十进制对应的十六进制/初始化时间为2012-6-25,11:69,MONwrite1302(wmin,change(59); /分钟初始化write1302(whou,change(11); /小时初始化write1302(wday,change(25);write1302(wwee,change(1);write1302(wmon,change(6);write1302(wyea,change(12);write1302(wpro,0x8e); /允许写保护/void showtime()go(1,1);showstr(table1);go(2,6);showstr(table2);showsfm(4,shi);showsfm(7,fen);showsfm(10,miao);showdate(3,year);showdate(6,month);showdate(9,day);showweek(week);void readtime()year=read1302(ryea);month=read1302(rmon);day=read1302(rday);week=read1302(rwee);shi=read1302(rhou);fen=read1302(rmin);miao=read1302(rsec);void shan()/液晶光标闪烁write_com(0x0f);delay(500);write_com(0x0c);void clkscan()if(s1=0)delay(10);if(s1=0)s1num+;while(!s1);/beep();switch(s1num) /光标闪烁点定位case 1: write_com(0x80+4);shan();break;case 2: write_com(0x80+7);shan();break;case 3: write_com(0x80+10);shan();break;case 4: write_com(0x80+14);shan();break;case 5: write_com(0xc0+5);shan();break;case 6: write_com(0xc0+8);shan();break;case 7: write_com(0xc0+11);shan();break;case 8: s1num=0;break;if(s1num!=0)if(s2=0)delay(10);if(s2=0)while(!s2);/beep();switch(s1num)case 1: year+;if(year=100)year=0;write1302(wpro,0x00);write1302(wyea,change(year);write1302(wpro,0x80); break;case 2: month+;if(month=13)month=1;write1302(wpro,0x00); write1302(wmon,change(month);write1302(wpro,0x80);break;case 3: day+;if(day=32)day=1;write1302(wpro,0x00);write1302(wday,change(day);write1302(wpro,0x80);break;case 4:week+;if(week=8)week=1;write1302(wpro,0x00); write1302(wwee,change(week);write1302(wpro,0x80); break;case 5: shi+;if(shi=24)shi=0;write1302(wpro,0x00); write1302(whou,change(shi);write1302(wpro,0x80); break;case 6: fen+;if(fen=60)fen=0;write1302(wpro,0x00); write1302(wmin,change(fen);write1302(wpro,0x80); break;case 7:miao+;i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB6531T 020-2024岳普湖孜然标准综合体 第5部分:孜然种子包衣技术规程
- 隧道质量安全事故案例
- 铁路劳动安全预防触电
- 2025年高速精密轴承项目合作计划书
- 2024年山东理工职业学院单招职业技能测试题库及答案解析
- 透析中发热的护理
- 静脉治疗药物外渗的预防和处理
- 2024年普法学法知识竞赛题库附答案(轻巧夺冠) (一)
- 2025-2030年硬塑滚项目投资价值分析报告
- 2025-2030年硅橡胶编织耐热电缆项目投资价值分析报告
- 物业管理服务房屋及公用设施维修养护方案
- 中华人民共和国工会法
- 围手术期VTE管理
- 制药厂安全教育培训内容
- 马场设施改进与规划
- 瓶装液化石油气送气工应知应会手册
- 2024年信息技术基础考试题库
- 护理质量管理制度
- 大单元视域下的单元整体教学与实施
- 2024版中国航天发展历程
- 批判性思维能力测量表(CDTI-CV)-彭美慈
评论
0/150
提交评论