




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
辽东学院课程设计报告书 单片机原理与接口技术课 程 设 计 任 务 书所属课程名称 单片机原理与接口技术 题 目 基于单片机的数字时钟设计 分 院 机电学院 专 业、班 级 学 号 学 生 姓 名 指 导 教 师 2013年 07 月 13 日目 录1.课 程 设 计 任 务 书12.总体电路设计22.1总体设计思路22.2 设计方案选择22.3 功能介绍33.几种典型芯片及LCD的介绍33.1 AT89C51芯片的简介33.2 DS18B20芯片的简介63.3 DS1302芯片的简介38462371373.4 1602字符型LCD简介94. 硬件电路设计114.1时钟电路设计114.2温度传感器电路设计124.3实时时钟电路设计125. 程序设计135.1中断时钟流程图135.2温度子程序流程图145.3万年历流程图156. 结果验证166.1 Proteus简介166.2软件调试176.3 Proteus仿真截图177. 结论187.1设计总结187.2元件清单及参数19参 考 文 献20附录1 仿真完整电路图21附录2 程序22辽东学院1.课 程 设 计 任 务 书课程设计题目: 基于单片机的数字时钟设计 课程设计时间:自 2013 年 7 月 1 日起至 2013年 7 月 12 日课程设计要求:本设计采用AT89C51单片机、时钟芯片DS1302及温度检测芯片DS18B20等器件构成数字时钟电路,实现精确走时、断电时间保护、上电准确恢复时间及感受温度信号等功能,并能够通过硬件对时钟进行时间调整。DS1302为SPI接口元件,为单片机节省大量的接口资源,同时时钟芯片DS1302带有后备电池,具备对后背电源进行涓细电流充电的能力,保证电路断电后仍保存时间和数据信息,这些优点解决了目前常用实时时钟占用单片机资源多以及计时不可靠等缺点。该时钟可以将年、月、日、星期、时间及温度同时显示在LCD显示屏上,同时可以很方便的对时间进行修改,方便使用。整个时钟系统的软硬件设计开发基于C语言及Proteus 8.0软件仿真环境,节省了程序编写时间,简化了调试步骤,还可以做到软件仿真效果最大化接近硬件的实现效果。学生签名: 2013 年 07 月12 日课程设计评阅意见项目课程设计态度评价10%出勤情况评价10%任务难度、量评价10%创新性评价10%综合设计能力评价20%报告书写规范评价20%答辩20%成绩综合评定等级评阅教师: 2013年 月 日2.总体电路设计2.1总体设计思路本设计在LCD显示屏上显示年、月、日、时、分、秒、星期及温度,原理框图如下图,电路以下几个部分组成:按键调节模块、AT89C51主控制器、LCD动态显示模块、复位电路及温度传感器。图2.1 单片机实现液晶显示万年历以及温度总框图对于各部分:(1)为使时钟走时与标准时间一致,校时电路是必不可少的,键盘用来校正液晶上显示的时间。(2)单片机通过输出各种电脉冲信号来驱动控制各部分正常工作。(3)温度传感器用来显示当天的确定温度值。(4)单片机发送的信号经过显示电路通过译码最终在液晶上显示出来。2.2 设计方案选择方案一 可以利用单片机内部的定时器作为时间的计算,再用不同的地址单元记录。这种设计误差较大,因为单片机的读取程序的时候会产生误差,其二程序编写起来也比较复杂。方案二 用C语言编程来控制单片机让它在液晶上显示数据及文字。单片机结构简单、控制功能强、可靠性高、体积小、价格低,并且液晶屏幕可以完整的同时显示数据及文字。综合上述方案的选择与比较,选择方案二。2.3 功能介绍本次设计主要用单片机控制程序让它在液晶上显示年、月、日、时、分、秒及星期,同时用DS18B20温度传感器来接受外面的信号,让单片机来接受它,且也让它在液晶上显示测的温度。设计的电路主要由四大模块构成:温度传感器电路,单片机控制电路,显示电路以及复位电路。当温度传感器接受到外面的信号,送入单片机,单片机将接受到的信号输出,让它在液晶上显示。同时由单片机控制的万年历以及时间显示,当时间及秒计数计满60时就向分进位,分计数器计满60分后向时计数器进位,小时计数器按“24翻1”规律计数。时、分、秒的计数结果经过数据处理可直接送显示器显示。当计时发生误差的时候可以用校时电路进行校正。时计数器计满24小时后自动向日计数器进一,日计数器由平年、闰年的28/30/31对大、小月和二月的判断应与当月相应的日期相一致,当日计数器计满时,向月计数器进位,月计数器计满12月向年计数器进位,当年计数器计满100时所以计数器清零。设计采用的是年、月、日和时、分、秒、星期显示。3.几种典型芯片及LCD的介绍3.1 AT89C51芯片的简介AT89C51是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。下图为AT89C51的芯片图: 图3.1 AT89C51芯片图AT89C51芯片各引脚功能:VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 3.2 DS18B20芯片的简介DS18B20的主要特征: (1)全数字温度转换及输出。 (2)先进的单总线数据通信。 (3)最高12位分辨率,精度可达土0.5摄氏度。 (4)12位分辨率时的最大工作周期为750毫秒。 (5)可选择寄生工作方式。 (6)检测温度范围为55C +125C (67F +257F) (7)内置EEPROM,限温报警功能。 (8)64位光刻ROM,内置产品序列号,方便多机挂接。 (9)多样封装形式,适应不同硬件系统。 DS18B20工作原理及应用:DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。DS18B20共有三种形态的存储器资源,它们分别是: ROM 只读存储器:用于存放DS18B20ID编码,其前8位是单线系列编码(DS18B20的编码是19H),后面48位是芯片唯一的序列号,最后8位是以上56的位的CRC码(冗余校验)。数据在出产时设置不由用户更改。DS18B20共64位ROM。 RAM 数据暂存器:用于内部计算和数据存取,数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为8位。第1、2个字节是温度转换后的数据值信息,第3、4个字节是用户EEPROM(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。第5个字节则是用户第3个EEPROM的镜像。第6、7、8个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第9个字节为前8个字节的CRC码。EEPROM 非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据,DS18B20共3位EEPROM,并在RAM都存在镜像,以方便用户操作。DS18B20芯片与单片机的接口: DS18B20只需要接到单片机的一个I/O口上,由于单总线为开漏,所以需要外接一个4.7K的上拉电阻。如要采用寄生工作方式,只要将VDD电源引脚与单总线并联即可。下图为DS18B20的芯片图:图3.2 DS18B20芯片图DS18B20芯片各引脚功能: GND:电压地 DQ: 单数据总线 VDD:电源电压 NC: 空引脚 3.3 DS1302芯片的简介384623713DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。DS1302工作时为了对任何数据传送进行初始化,需要将复位脚(RST)置为高电平且将8位地址和命令信息装入移位寄存器。数据在时钟(SCLK)的上升沿串行输入,前8位指定访问地址,命令字装入移位寄存器后,在之后的时钟周期,读操作时输出数据,写操作时输出数据。时钟脉冲的个数在单字节方式下为8+8(8位地址+8位数据),在多字节方式下为8加最多可达248的数据。DS1302内部的RAM分为两类,一类是单个RAM单元,共31个,每个单元为一个8位的字节,其命令控制字为COHFDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。下图为DS1302的芯片图:图3.3 DS1302芯片图DS1302芯片各引脚功能:引脚号引脚名称功能1Vcc2主电源2,3X1,X2震荡源,外接32.768kHz晶振4GND地线5RST复位/片选线6I/O串行数据输入/输出端(双向)7SCLK串行数据输入端8Vcc1后备电源表3.1 DS1302引脚功能DS1302的寄存器和控制命令:DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h8Dh,写时80h8Ch),存放的数据格式为BCD码形式,如表3.2所示:读寄存器写寄存器BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0范围81h80hCH10秒秒00-5983h82h10分分00-5985h84h12/24010时时1-120-23AM/PM87h86h0010日日1-3189h88h00010月月1-128Bh8Ah00000周日1-78Dh8Ch10年年00-998Fh8Eh00000000-表3.2 DS1302寄存器3.4 1602字符型LCD简介字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。1602LCD主要技术参数:显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mm引脚功能说明:1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下表所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表3.3 1602LCD引脚功能第1引脚:VSS为地电源。第2引脚:VDD接5V正电源。第3引脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4引脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5引脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6引脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714引脚:D0D7为8位双向数据线。第15引脚:背光源正极。第16引脚:背光源负极。单片机与LCD的接口电路如图3.5所示:图3.5单片机与LCD的接口电路4. 硬件电路设计4.1时钟电路设计时钟电路用于产生单片机工作所需要的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。单片机本身就如一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格操作。时钟信号的产生:单片机内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。而在芯片的外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。电容器C1和C2的作用是稳定频率和快速起振,电容值的范围在5pF-33pF,典型值为33pF。晶振的频率通常选择两种6MHz和12MHz。只要在单片机的XTAL1和XTAL2引脚外接晶体振荡器就构成了自激振荡器并在单片机内部产生时钟脉冲信号。时钟振荡电路如图4.1所示:图4.1时钟振荡电路4.2温度传感器电路设计温度传感器的种类众多,在应用与高精度、高可靠性的场合时DALLAS(达拉斯)公司生产的DS18B20温度传感器当仁不让。超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强,使得DS18B20更受欢迎。DS18B20的优势是我们学习单片机技术和开发与温度相关的小产品的不二选择。了解其工作原理和应用可以拓宽对单片机开发的思路。温度传感器电路如图4.2所示:图4.2 温度传感器电路4.3实时时钟电路设计DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可显示秒、分、时、日、星期、月和年,一个月小于31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,具有对后背电源进行涓细电流充电的功能。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。实时时钟电路如图4.3所示:图4.3 实时时钟电路5. 程序设计5.1中断时钟流程图中断服务程序流程图如图5.1所示。流程图分析:由中断查询当有中断请求时,及进行现场保护,保护断点,将定时器赋初值,且开定时器便于计数,且赋值50000,当中断进行20次刚好一秒,当秒计数60时便向分进位,当分计数60时,向时进位,当时到24时,清零,及恢复现场。图5.1中断流程图5.2温度子程序流程图温度显示流程图如图5.2所示。流程图分析:开始进入初始化DS18B20,就是通过主机拉低单线产生复位脉冲然后释放该线,如果有应答脉冲,及发起ROM命令当成功的执行操作命令后,就使用内存操作命令,即温度转换等,当转换完后,又初始化DS18B20是否有应答脉冲,若有,就发起读时隙命令,既同时读出第1,2个字节,既为温度的数据。图5.2 温度显示流程图5.3万年历流程图万年历流程如图5.3所示。流程图分析:开始既当日加一天,同时星期也就相应的加1,看星期是否加到7,若加到了7,就返回到1,若没有就返回到时钟状态,当日加到相应的最大数时,月分就相应的加1,看月份是否加到了13, 若没有到13,就一直等待,若到了13就返回1,且年份就加1,当年份到2099时就清到2005年,若没有,就一直等待,直到2099为止。图5.3 万年历流程图6. 结果验证6.1 Proteus简介Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:(1)实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。(2)支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。(3)提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision3等软件。(4)具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。6.2软件调试软件调试的任务是利用ISIS开发工具进行仿真调试,发现和纠正程序错误,同时也能发现仿真结果故障。试运行后,检查是否能开始正确显示时间、温度。比如说,时钟显示不稳定,易乱跳,显示乱码,是由于单片机的运行与程序的执行不能同步进行造成的,应该尽量减少跳转指令的使用。修改万年历显示缓冲区内容,运行进位键,检验能否正确进位,以及试调时间看能否正确的进位,以及调温度是否能显示。6.3 Proteus仿真截图在工作模式下,时钟的显示装置LCD液晶显示屏上将显示出年、月、日、星期、时、分、秒,以及温度,所显示的内容可以通过按键进行调整。(1)当按下设置键时,LCD显示屏将进入时间调整状态,此时可通过上调键和下调键对时钟进行时间的调整:(2)继续按设置键,光标将按照从右到左的顺序依次移动到分、时、星期、日、月、年,设置键每按下一次,光标移动一位,当按下第七次时,光标将移动到年份调整位置: (3)此时,若继续按设置键,将退出时间调整状态,时钟进入正常工作状态: (4)在对时钟的时间进行调整的过程中,若按下复位键,则时钟将退出调整状态:(5)通过调节滑动变阻器旋钮,可以调节LCD显示屏的背光亮度。7. 结论7.1设计总结本设计采用AT89C51单片机、时钟芯片DS1302及温度检测芯片DS18B20等器件构成数字时钟电路,实现精确走时、断电时间保护、上电准确恢复时间及感受温度信号等功能,并能够通过硬件对时钟进行时间调整。DS1302为SPI接口元件,为单片机节省大量的接口资源,同时时钟芯片DS1302带有后备电池,具备对后背电源进行涓细电流充电的能力,保证电路断电后仍保存时间和数据信息,这些优点解决了目前常用实时时钟占用单片机资源多以及计时不可靠等缺点。该时钟可以将年、月、日、星期、时间及温度同时显示在LCD液晶显示屏上,同时可以很方便的对时间进行修改,方便使用。整个时钟系统的软硬件设计开发基于C语言及Proteus 8.0软件仿真环境,节省了程序编写时间,简化了调试步骤,还可以做到软件仿真效果最大化接近硬件的实现效果。经过软件的最终仿真结果,本设计实现了上述功能,系统可以连续稳定可靠运行,实现了预期功能,完成设计目标。7.2元件清单及参数元件名称单位数量参数普通电容只233p电解电容只110u1602LCD液晶显示模块只1LM016LAT89C51芯片片1DS18B20芯片片1DS1302芯片片1电阻只110k排阻只2RESPACK-8芯片座只412M无源晶振只2滑动变阻器只1按键只4电池盒个1电路板CM21参 考 文 献1 余锡存,曹国华.单片机原理及接口技术M.西安电子科技大学出版社,2004年2 张志良, 主编 :单片机原理及控制技术(第2版)北京:机械工业出版社,20053 余永权, MCS-51系列单片机实用接口技术M.北京:北京航空航天大学出版,19934 余西存, 曹国华.单片机原理及接口技术M.西安:西安电子科技大学出版,2000年5 求是科技,单片机典型模块设计实例导航M.北京:人民邮电出版社,2004年5月6 张振荣, 晋明武.MSC-51系列单片机原理及实用技术. 人民邮电出版社,2000年7 吉雷,主编 :Protel99从入门到精通.西安:西安电子科技大学出版社,2004 8徐爱钧,彭秀华Keil Cx51 V7.0 单片机高级语言编程与uVision2应用实践北京:电子工业出版社200469 何立民MCS-51系列单片机应用系列设计M北京:航空航天大学出版社附录1 仿真完整电路图附录2 程序#include#includeDS18B20_3.H#define uint unsigned int#define uchar unsigned charuchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp;/flag用于读取头文件中的温度值,和显示温度值#define yh 0x80 /LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)#define er 0x80+0x40 /LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)/液晶屏的与C51之间的引脚连接定义(显示数据线接C51的P0口)sbit rs=P20;sbit en=P22;sbit rw=P21; /如果硬件上rw接地,就不用写这句和后面的rw=0了sbit led=P26; /LCD背光开关/DS1302时钟芯片与C51之间的引脚连接定义sbit IO=P11;sbit SCLK=P10;sbit RST=P12;sbit ACC0=ACC0;sbit ACC7=ACC7;/*ACC累加器=AACC.0=E0H ACC.0就是ACC的第0位。Acc可以位寻址。累加器ACC是一个8位的存储单元,是用来放数据的。但是,这个存储单元有其特殊的地位,是单片机中一个非常关键的单元,很多运算都要通过ACC来进行。 */校时按键与C51的引脚连接定义sbit key1=P15; /设置键sbit key2=P16; /加键sbit key3=P17; /减键/*/uchar code tab1=20 - - ; /年显示的固定字符uchar code tab2= : : ;/时间显示的固定字符/延时函数,后面经常调用void delay(uint xms)/延时函数,有参函数uint x,y;for(x=xms;x0;x-) for(y=110;y0;y-);/*液晶写入指令函数与写入数据函数,以后可调用*/*在这个程序中,液晶写入有关函数会在DS1302的函数中调用,所以液晶程序要放在前面*/write_1602com(uchar com)/*液晶写入指令函数*rs=0;/数据/指令选择置为指令rw=0; /读写选择置为写P0=com;/送入数据delay(1);en=1;/拉高使能端,为制造有效的下降沿做准备delay(1);en=0;/en由高变低,产生下降沿,液晶执行命令write_1602dat(uchar dat)/*液晶写入数据函数*rs=1;/数据/指令选择置为数据rw=0; /读写选择置为写P0=dat;/送入数据delay(1);en=1; /en置高电平,为制造下降沿做准备delay(1);en=0; /en由高变低,产生下降沿,液晶执行命令lcd_init()/*液晶初始化函数*write_1602com(0x38);/设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据write_1602com(0x0c);/开显示不显示光标write_1602com(0x06);/整屏不移动,光标自动右移write_1602com(0x01);/清显示write_1602com(yh+1);/日历显示固定符号从第一行第1个位置之后开始显示for(a=0;a14;a+)write_1602dat(tab1a);/向液晶屏写日历显示的固定符号部分/delay(3);write_1602com(er+2);/时间显示固定符号写入位置,从第2个位置后开始显示for(a=0;a0;a-)IO=ACC0;SCLK=0;SCLK=1;ACC=ACC1;uchar read_byte()/读一个字节RST=1;for(a=8;a0;a-)ACC7=IO;SCLK=1;SCLK=0;ACC=ACC1;return (ACC);/-void write_1302(uchar add,uchar dat)/向1302芯片写函数,指定写入地址,数据RST=0;SCLK=0;RST=1;write_byte(add);write_byte(dat);SCLK=1;RST=0;uchar read_1302(uchar add)/从1302读数据函数,指定读取数据来源地址uchar temp;RST=0;SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=0;return(temp);uchar BCD_Decimal(uchar bcd)/BCD码转十进制函数,输入BCD,返回十进制 uchar Decimal; Decimal=bcd4; return(Decimal=Decimal*10+(bcd&=0x0F);/-void ds1302_init() /1302芯片初始化子函数(2010-01-07,12:00:00,week4)RST=0;SCLK=0;write_1302(0x8e,0x00); /允许写,禁止写保护 /write_1302(0x80,0x00); /向DS1302内写秒寄存器80H写入初始秒数据00/write_1302(0x82,0x00);/向DS1302内写分寄存器82H写入初始分数据00/write_1302(0x84,0x12);/向DS1302内写小时寄存器84H写入初始小时数据12/write_1302(0x8a,0x04);/向DS1302内写周寄存器8aH写入初始周数据4/write_1302(0x86,0x07);/向DS1302内写日期寄存器86H写入初始日期数据07/write_1302(0x88,0x01);/向DS1302内写月份寄存器88H写入初始月份数据01/write_1302(0x8c,0x10);/向DS1302内写年份寄存器8cH写入初始年份数据10write_1302(0x8e,0x80); /打开写保护/-/温度显示子函数void write_temp(uchar add,uchar dat)/向LCD写温度数据,并指定显示位置uchar gw,sw;gw=dat%10;/取得个位数字sw=dat/10;/取得十位数字write_1602com(er+add);/er是头文件规定的值0x80+0x40write_1602dat(0x30+sw);/数字+30得到该数字的LCD1602显示码write_1602dat(0x30+gw);/数字+30得到该数字的LCD1602显示码 write_1602dat(0xdf);/显示温度的小圆圈符号,0xdf是液晶屏字符库的该符号地址码 write_1602dat(0x43);/显示C符号,0x43是液晶屏字符库里大写C的地址码/-/时分秒显示子函数void write_sfm(uchar add,uchar dat)/向LCD写时分秒,有显示位置加、现示数据,两个参数uchar gw,sw;gw=dat%10;/取得个位数字sw=dat/10;/取得十位数字write_1602com(er+add);/er是头文件规定的值0x80+0x40write_1602dat(0x30+sw);/数字+30得到该数字的LCD1602显示码write_1602dat(0x30+gw);/数字+30得到该数字的LCD1602显示码/-/年月日显示子函数void write_nyr(uchar add,uchar dat)/向LCD写年月日,有显示位置加数、显示数据,两个参数uchar gw,sw;gw=dat%10;/取得个位数字sw=dat/10;/取得十位数字write_1602com(yh+add);/设定显示位置为第一个位置+addwrite_1602dat(0x30+sw);/数字+30得到该数字的LCD1602显示码write_1602dat(0x30+gw);/数字+30得到该数字的LCD1602显示码/-void write_week(uchar week)/写星期函数write_1602com(yh+0x0c);/星期字符的显示位置switch(week)case 1:write_1602dat(M);/星期数为1时,显示 write_1602dat(O); write_1602dat(N); break; case 2:write_1602dat(T);/星期数据为2时显示 write_1602dat(U); write_1602dat(E); break;case 3:write_1602dat(W);/星期数据为3时显示 write_1602dat(E); write_1602dat(D); break;case 4:write_1602dat(T);/星期数据为4是显示 write_1602dat(H); write_1602dat(U); break;case 5:write_1602dat(F);/星期数据为5时显示 write_1602dat(R); write_1602dat(I); break;case 6:write_1602dat(S);/星期数据为6时显示 write_1602dat(T); write_1602dat(A); break;case 7:write_1602dat(S);/星期数据为7时显示 write_1602dat(U); write_1602dat(N); break;/*键盘扫描有关函数*void keyscan()if(key1=0)/-key1为功能键(设置键)-delay(9);/延时,用于消抖动if(key1=0)/延时后再次确认按键按下while(!key1);key1n+;if(key1n=9)key1n=1;/设置按键共有秒、分、时、星期、日、月、年、返回,8个功能循环switch(key1n)case 1: TR0=0;/关闭定时器/TR1=0;write_1602com(er+0x09);/设置按键按动一次,秒位置显示光标 write_1602com(0x0f);/设置光标为闪烁 temp=(miao)/10*16+(miao)%10;/秒数据写入DS1302 write_1302(0x8e,0x00); write_1302(0x80,0x80|temp);/miao write_1302(0x8e,0x80); break;case 2: write_1602com(er+6);/按2次fen位置显示光标 /write_1602com(0x0f);break;case 3: write_1602com(er+3);/按动3次,shi /write_1602com(0x0f);break;case 4: write_1602com(yh+0x0e);/按动4次,week /write_1602com(0x0f);break;case 5: write_1602com(yh+0x0a);/按动5次,ri /write_1602com(0x0f);break;case 6: write_1602com(yh+0x07);/按动6次,yue /write_1602com(0x0f);break;case 7: write_1602com(yh+0x04);/按动7次,nian /write_1602co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025采购合同示范文本
- 合同范本模板哪里有
- 水塔上拆迁合同范本
- 2025新房购房合同范本新房买卖合同的合同范本
- 家电转卖维修合同范本
- 贵州茶叶合同范本
- 荒地补偿协议合同范本
- 瓦房扩建改造合同范本
- 出口长期供货合同范本
- 纸箱模具采购合同范本
- 慎交友-不交损友课件
- 2025年海军专业技能类文职人员招聘(卫生员兼司机)历年参考题库含答案详解(5卷)
- 2025年锦州辅警考试题库(附答案)
- 消防安全专项施工方案及应急预案
- 2025年粮食局考试试题及答案
- 2025年高考生物甘肃卷试题答案解读及备考指导(精校打印)
- WST856-2025安全注射标准解读
- 医美项目规划方案(3篇)
- 2025年全国反诈骗知识竞赛试题含答案
- 电网采购管理办法
- 2025江苏徐州沛县经济开发区发展集团招聘工作人员拟聘用人员笔试历年参考题库附带答案详解
评论
0/150
提交评论