课题数字万年历
学生姓名杨承明学号047
专业应用电子班级3112
系(院)电子系
指导教师高见芳职称
二○14年5月20日
摘 要
在当代繁忙的工作与生活中,时间与我们每一个人都有非常密切的关系,每个人都受到时间的影响.我们必须对时间有一个度量,因此产生了钟表.钟表的发展是非常迅速的,从刚开始的机械式钟表到现在普遍用到的数字式钟表,即使现在钟表千奇百怪,但是它们都只是完成一种功能——计时,只是工作原理不同而已,在人们的使用过程中,逐渐发现了钟表的功能太单一,没有更大程度上的满足人们的需求.因此在这里,我想能不能把一些辅助功能加入钟表中去.在此设计中所设计的钟表具有钟表的功能.
本系统采用了以广泛使用的单片机技术为核心,软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采用LCD显示电路,键盘电路,本方案设计出的万年历可以显示日期时间,农历,设置闹铃功能.
Abstract
Inbusyjobofthepresentageandlife,timehasveryclosesomethingtodowithallofus,everyoneallacceptsthetimeeffect.wemustheamagnanimitytotime,heproducedclockandwatchtherefore.Developmentofclockandwatchisveryprompt,useclockandwatchtothedigitalfromjustoriginallymechanicaldyadicclockandwatchtonowmonly,evenifnowclockandwatchisexceedinglystrange,theyacplishbutonekindoftimefunctionoffunctionallonly,areonlyoperatingprinciplediversity,intheprocessofpeople'susage,thefunctionhingdiscoveredclockandwatchgraduallyisveryunitary,neednothingthesatiiedpeopleonbiggerdegree.WanttobeabletoIputsomeauxiliaryfunctioningoingtoinclockandwatchthereforeinhere.Functiondesigningthatmiddlewhatbedesignedthatclockandwatchhaserageclockandwatch's.
Andthemonolithicmachinetechnologythatthissystemhasadopttousebroadusagehasbeenthatcore,softhardwarebine,thehardwareparthaacilitatedamessengerextremely,hasraisedsystemstability,adoptLCDdemonstratescircuit,keyboardcircuit,Theperpetualcalendarthattheschemedesignsoutcandemonstratedatetime,unarcalendar,setupthenoisybellfunction.
Keywords:AT89C52,LCDmodule,DS1302
目录
摘 要等等等等等等等等等等等等等等等等等等等等2
关键字等等等等等等等等等等等等等等等等等等等等等2
第一章概述等等等等等等等等等等等等等等等等等等等4
1.1课题的背景研究意义等等等等等等等等等等等等等等等等等4
1.2本课题实现的功能及要求等等等等等等等等等等等等等等等等4
1.3方案论证等等等等等等等等等等等等等等等等等等等4
1.4章节安排等等等等等等等等等等等等等等等等等等等4
第二章系统硬件设计
2.3其余应用电路的介绍等等等等等等等等等等等等等等等等等8
第三章软件设计
3.1软件设计总述等等等等等等等等等等等等等等等等等等13
3.2程序模块介绍等等等等等等等等等等等等等等等等等等13
第四章调试和总结
4.1硬件调试等等等等等等等等等等等等等等等等等等等20
4.2软件调试等等等等等等等等等等等等等等等等等等等20
4.3联调等等等等等等等等等等等等等等等等等等等等21
0340;脉冲信号,因此它可对外输出时钟或用于定时目的.要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲.对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG).如有必要,可通过对特殊功能寄存器(R)区中的8EH单元的D0位置位.可禁止ALE操作.该位置位后,只有一条MOVX和MOVC指令才能将ALE激活,此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效.PSEN:程序储存允许PSEN输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲.在此期间,当访问外部数据存储器,将跳过两次PSEN信号.
EA/VPP:外部访问允许.欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地).需注怠的是:如果加密位LBI被编程,复位时内部会锁存EA端状态.
3.最小系统
单片机最小系统包括时钟电路,电源和复位电路等,是单片机工作的基本要求.单片机控制整个系统的工作,一方面读取日历时钟芯片中的日期等数据,检测是否需要设置,并处理相应的按键.另一方面,控制显示器的工作,将各种数据送到液晶显示器去显示.
时钟电路
80C52型单片机内有一增益反相放大器,振荡频率取决于石英晶体的振荡频率.范围可取1.2—12MHZ,C01,C02主要起频率微调和稳定作用.(2)复位电路
单片机在开关机时都需要复位,以便处理器CPU及其他功能部件都RC构成处于一个确定的初始状态,并从这个状态开始工作.80C51的RST引脚是复位信号的输入端.复位信号高电平有效,持续时间需要24个时钟周期以上.
RC构成微分电路,在接电瞬间,产生一个微分脉冲,其宽度若大于2个机器周期,80C5单片机将复位.为保证微分脉冲宽度足够大,RC时间常数应大于2个机器周期.一般取10uF电容,8.2K欧姆电阻.
4.振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出.该反向放大器可以配置为片内振荡器.石晶振荡和陶瓷振荡均可采用.如采用外部时钟源驱动器件,XTAL2应不接.有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度.
2.3其余电路介绍
2.3.1显示电路
液晶显示器的接口有两种:一种是总线式接口电路方式,另一种是非总线接口电路方式.总线式接口方式是把液晶显示器看做外部的数据存储器,访问液晶显示器就像访问数据存储器的一个单元一样,采用这种方式能充分发挥单片机的总线读写功能,便于升级和扩展.而非总线方式是直接利用IO口进行读写,较灵活,不便于升级.这里采用总线式接口方式.接口时要注意显示器的功能信号E是高电平有效,所以要取反.这里使用的液晶显示器为LCD1602为字符点阵式液晶显示器.可以显示16×2个字符,而要显示日期字符有23个,可以满足要求.
1,LCD模块接口引脚功能
液晶显示模块具有体积小,功耗低,显示内容丰富,超薄轻巧等优点,在袖珍式仪表和低功耗应用系统中得到广泛的应用.目前字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件.这里向大家介绍一款LCD1602液晶显示模块,它可以显示两行,每行16个字符,采用单+5V电源供电,电路配置简单,便宜,具有很高的性价比.
2.硬件电路
DS1302的4,5,6的三个管脚是其控制位.其7,8,9,10,11,12,13,14管脚是总线接口.1管脚是电源地.2管脚是电源接口.
3,LCD1602与AT89c52的接口
AT89c52的P1口直接与液晶模块的数据总线D0~D7相连,P2口的0,1,2脚分别与液晶模块的RS,RW,E脚相连.滑动变阻器用于调整液晶显示的亮度.
液晶显示器的接口有两种:一种是总线式接口电路方式,另一种是非总线接口电路方式.总线式接口方式是把液晶显示器看做外部的数据存储器,访问液晶显示器就像访问数据存储器的一个单元一样,采用这种方式能充分发挥单片机的总线读写功能,便于升级和扩展.而非总线方式是直接利用IO口进行读写,较灵活,不便于升级.这里采用总线式接口方式.接口时要注意显示器的功能信号E是高电平有效,所以要取反.这里使用的液晶显示器为LCD1602为字符点阵式液晶显示器.可以显示16×2个字符,而要显示日期字符有23个,可以满足要求.
2.3.2时钟电路
DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源.在主电源关闭的情况下,也能保持时钟的连续运行.DS1302由Vcc1或Vcc2两者中的较大者供电.当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电.当Vcc2小于Vcc1时,DS1302由Vcc1供电.X1和X2是振荡源,外接32.768kHz晶振.RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送.RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器,其次,RST提供终止单字节或多字节数据的传送手段.当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作.如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态.上电运行时,在Vcc>,2.0V之前,RST必须保持低电平.只有在SCLK为低电平时,才能将RST置为高电平.I/O为串行数据输入输出端(双向),后面有详细说明.SCLK为时钟输入端.下图为DS1302的引脚功能图:RST为复位端,高电平时允许I/O端进行数据传输,低电平则禁止数据传送且使I/O端呈高阻状态,I/O为串行数据输入,输出端,所有输入,输出数据的传送顺序均以最低位LSB打头,最高位MSB结束,SCLK为同步时钟脉冲端,其上升沿将I/O端数据按位写入DS1302,下降沿使DS1302按位输出数据至I/O端,VCC2,VCC1为主电源和备份电源端,当主电源VCC2大于备份电源VCC1+0.2V时,由VCC2对芯片供电,否则,由VCC1对芯片供电.工作电压范围为2.5~5.5V,工作电源和备份电源双引脚输入,功耗很低,当工作电压为2.5V时正常工作,所需电流不超过300nA.另外,如果选择了涓流充电功能,在正常情况下,主电源还可对备份电源进行慢速充电,有效延长了备份电源的使用寿命,保证了系统时间的连续可靠运行.
内部有振荡器.若采用外部振荡信号时.32768Hz的信号从X1脚输入.x2脚悬空.CE:片选端,高电平有效,在有些早期资料中该引脚标成爪ST,实际功能一样.CE端接通控制逻辑,当其为'0"时,IO引脚变为高阻截状态,所有的数据传送中止,当其为'1'时,允许数据传送.CE由'0'至'1'时.SCIX必须为"0".
DS1302的内部主要由移位寄存器,指令和控制逻辑,振荡分频电路,实时时钟以及RAM组成.每次操作时,必须首先把CE置为高电平.再把提供地址和命令信息的8位装入移位寄存器.数据在SCLK的上升沿串行输入.无论是读周期还是写周期发生,也无论传送方式是单字节还是多字节,开始8位将指定内部何处被进行访问.在开始8个时钟周期把含有地址信息的命令字装入移位寄存器之后.紧随其后的时钟在读操作时输出数据.
2.3.3串口电路
DS1302与微处理器的接口电路如下图所示.该微处理器采用宏晶科技推出AT89C51单片机作为主控芯片,该产品具有片内资源丰富,超强抗干扰,高抗静电,超低功耗,宽电压,不怕电源抖动,在系统可编程,加密性强,无法解密,可降低单片机时钟对外部电磁辐射等特点,其良好的性能保证了各个器件的协调可靠工作及控制要求.在电路中单片机的P1.7控制DS1302的复位输入端,P1.4与数据输入/输出引脚相连,P1.3用来作为DS1302的输入时钟SCLK控制端.由于单片机复位时,所有单片机的端口均为高电平,如果直接用单片机的某一口线同DS1302的RST相连,则影响了系统加电时对DS1302的初始化,从而造成DS1302计时的不稳定.因此,本主电源(5V)接VCC2,备份电池采用可充电镉镍电池(3.6V)接VCC1,可启用内部涓流充电器在主电压正常时向电池充电,以延长电池使用时间.备份电池也可用1微法以上的超容量电容代替,但需要注意的是备份电池电压应略低于主电源工作电压.
2.3.4键盘设置电路
1.键盘接口介绍
独立式键盘
独立式键盘是指直接用I/O口线构成单个按键电路,每个按键占用一条I/O口线,当某个键闭合时,相应的I/O口线变为低电平,当CPU查询到为低电平的I/O口线时,就可以判别出与其对应的键处于释放状态.
行列式键盘
将I/O口线的一部分作为行线,另一部分作为行线,按键设置在行线的交叉点上.CPU通过其电平的高低来判别键是否被按下.但每根线上接有4个按键,任何键按下都有可能使其电平变低,到底是哪个键按下呢这是采用了"时分复用"的方法,即在一个查询周期里把时间分为4个间隔,每个时间间隔对应一个键,在哪个时间间隔查到低电平,则代表是与之相对应的键被按下.时间间隔的划分是通过列线P1.4~P1.7来实现的.
依次使列线P1.4~P1.7中的一根输出为低电平,则只有与之对应的键按下时,才能使行线为低电平,此时其他列线都输出高电平,与它们对应的键按下,不能使行线电平变低,所以就实现了行线的时分复用.
由于行列式键盘的按键数量比较多,为了使程序简洁,一般在键处理程序中,给予每个键一个键号,由从列线I/O口输出的数据和从行线I/O口读入的数据得到按键的键号,然后由该键号通过散转表进入各按键的怎么写作程序.
2.设置电路介绍
设置电路的功能主要是把时间和日期设置到当前的时间,可以在系统运行中进行.用4个独立式按键完成,分别接到单片机P1口的高4位.第1个按钮表示是否进行设置,按下时表示设置,并且每按一次,在显示器上分别在年,月,日等日期时间上跳转,表示对相应的项进行更改,第2个按钮按下表示对第1个按钮选中的项进行加1操作,第3个按钮按下表示进行减1操作,第4个按钮按下表示停止设置.只有在第1个按钮按时才可进行加减操作.其电路如图3所示.其中电容的作用是消除按键的抖动,也可用双稳态触发器去除按键时的抖动,同时为了提高可靠性,硬件去抖动的同时,还可以用软件去抖动的方法.
第三章系统软件设计
3.1软件设计总述
系统软件设计主要包括主程序设计,日期数据采集子模块程序设计,按键处理子模块程序设计和显示子模块程序设计等.主程序主要完成器件的初始化,并判断有无按键按下,并根据判断的结果调用相应的子模块程序,日期数据采集子模块程序完成相应的数据采集,处理和保存,按键处理子模块程序完成日期的设置,而显示子模块程序只要把上述子模块储存的数据送去显示即可.
程序流程图
3.2程序模块介绍
3.2.1显示模块
1.LCD1602的指令
液晶程序
4.子程序流程图
3.2.2
1.编程思想
DS1302所进行的一切工作必须先由CPU向DS1302发送命令字节,命令字节格式如图3所示.各位定义如下:命令字节的最高位7必须为"1",否则禁止对DS1302进行操作.第6位是时钟/日历或RAM选择位,如它为"1,,可对内部RAM读写,如它为"0"可对时钟/日历操作.此处所谓日历型数据即数据格式为压缩型BCD码,且数值必须在它的定义域内,例如,"月份"的定义域为1~12,"秒"的定义域为0~59等等.所谓RAM型数据即指一般16进制数据.位5至位1为DS1302内部寄存器地址.DS1302有单字节和多字节两种读,写方式.所谓单字节读,写方式即每次只能从DS1302中读,写1字节数据.所谓多字节读,写方式则每次可从DS1302中连续读,写若干字节数据.当位5至位1各位均为"1"时,DSI302为多字节读,写方式.最低位0为"0"表示写操作,否则为读操作.命令字节的传输都是从最低位开始.
DS1302有12个寄存器,其中有7个寄存器与日历,时钟相关,存放的数据位为BCD码形式,其日历,时间寄存器及其控制字见表
出现的问题
⑴键的消抖
理想的按键信号是方波形,是一个标准的负脉冲,但实际情况并非如此.按下和释放都需要经过一个过程才能达到稳定,这一过程是处于高低电平之间的一种不稳定状态,称为抖动.抖动持续时间的长短,频率的高低与按键的机械特性及人的操作有关,一般在5~10ms之间.这就有可能造成CPU对一次按键过程做多次处理.为了避免这种情况的发生,应采取措施消除抖动.消除抖动的方法有两种,一种是采取硬件来实现,如用滤波器电路,双稳态电路等.
⑵一键一操作
一键一操作的原理就是当按键按下再弹起时才会有数据传送给主控制器,所以在程序中要有指令,否则会引起误操作,从而成为一键几操作的现象.
第四章调试
系统调试包括硬件调试和软件调试.硬件调试的任务是排除系统的硬件电路故障,包括设计性错误和工艺性故障.软件调试是利用开发工具进行在线仿真调试,处发现和解决程序错误外,也可以发现硬件故障.
4.1硬件调试
单片机应用系统的硬件调试和软件调试十分不开的,许多硬件故障时在调试软件时发现的,但通常是先排除系统中明显的硬件故障后,在和软件结合起来调试.
常见的硬件故障
①逻辑错误.样机硬件的逻辑错误是由于设计错误或加工过程中的工艺性错误所造成的,包括错线,开路和短路等几种,其中短路是最常见的故障.当某一元件虚焊或短路时电路都无法调试成功.
②元器件失效.元器件失效的原因有两个方面:一是器件本身已经损坏或性能不符合要求,二是由于组装错误造成的元器件失效,如电解电容,二极管的极性错误或集成块安装方向错误等.
③可靠性差.引起系统不可靠的因素很多,如接插件接触不良会造成系统时好时坏,内部和外部的干扰,电源纹波系数过大或器件负载过大等造成逻辑电平不稳定,另外走线和布局不合理等会引起系统的可靠性差.
④电源故障.若样机中存在电源故障,则加点后将造成器件损坏.电源故障包括电压值不符合设计要求,电源引出线和插座不对应,电源功率不足和负载能力差等.
硬件调试方法
①联机调试.通过脱机调试可排除一些明显的硬件故障,有些硬件故障需要通过联机调试才能发现和排除.通电后,执行读写指令,对用户样机的存储器,I/O端口进行读写和逻辑检查等操作,用示波器等设备观察波形(如输出波形,读/写控制信号,地址数据波形和有关控制电平),通过波形的观察分析,发现和排除故障.
②脱机调试.脱机调试实在样机加电之前,先用万用表等工具,根据硬件电气原理图和装配图,仔细检查样机线路的正确性,并核对元器件的型号,规格和安装是否符合要求.
特别注意电源的走线,防止电源之间的短路和极性错误,重点检查系统的总线或其他信号线之间是否存在相互的短路.
样机所用的电源,事先必须单独调试后才能加到系统中.在不差芯片的情况下,加电检查各插件上引脚的电位是否正常,仔细测量各点电位是否正常,尤其应注意单片机插座上的各点电位是否正常.
4.2软件调试
软件调试方法与选用的软件结构和程序设计技术有关.如果采用模块设计技术,则逐个模块调好以后,再进行系统程序总调试.
对于模块结构程序,要对子程序逐个进行调试.调试子程序是,一定要符合入口条件和出口条件,调试手段可采用单步运行方式和断点运行方式,通过检查用户系统CPU的现场,RAM的内容和I/O口的状态,检测程序执行结果是符合设计要求.通过检测可以发现程序中的死循环错误,机器码错误和转移地址的错误,同时也可以发现用户系统中的硬件故障,软件算法和硬件设计错误,在调试过程中不断调整用户系统的软件和硬件,完成每个程序模块的调试.
每个程序模块通过后,可以联合各功能模块进行整体程序综合调试.在这一阶段如果发生故障,可以分析子程序在运行时是否破坏现场,缓冲单元是否发生冲突,零位的建立和清除在设计上是否失误,堆栈区域是否溢出或输入设备的状态是否正常等.若用户系统是在开发系统的监控程序下运行,还要考虑用户缓冲单元是否和监控程序的工作单元发生冲突.
单步运行只能验证程序正确与否,而不能确定定时精度,CPU的实时响应等问题,所以单步和断点调试后,还应进行连续调试.除了观察稳定性之外,还要观察用户系统的操作是否符合原始设计要求,以及安排的用户操作是够合理等,必要时还要做适当修正.
DS1302与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7等于0,则禁止写DS1302,即写保护,D6等于0,指定时钟数据,D6等于1,指定RAM数据,D5~D1指定输入或输出的特定寄存器,最低位LSB(D0)为逻辑0,指定写操作(输入),D0等于1,指定读操作(输出).在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节.若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节.DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作,再一类为突发方式下的RAM寄存器,在此方式下可一次性读,写所有的RAM的31个字节.要特别说明的是备用电源B1,可以用电池或者超级电容器(0.1F以上).虽然DS1302在主电源掉电后的耗电很小,但是,如果要长时间保证时钟正常,最好选用小型充电电池.可以用老式电脑主板上的3.6V充电电池.如果断电时间较短(几小时或几天)时,就可以用漏电较小的普通电解电容器代替.100μF就可以保证1小时的正常走时.DS1302在第一次加电后,必须进行初始化操作.初始化后就可以按正常方法调整时间.此次,收获多如果说我们以前学的都是一些理论知识那么.从最简单的电阻电容的识别,以及各种电子元器件的识别,使用及其检测,到电烙铁的正确使用以及焊接板的布局及其制作了解都次的对我来说无疑是一次较好的动手锻炼机会,因此从一开始就抱着一种较认真的态度,无论是从了解及其实现原理,还是后来的焊接对我来说都是一种提高.RWEQUP2.1
EEQUP2.2
CMDEQU27H
DATEQU26H
FLAGBIT00H
XLAGBIT01H,
COUNTEQU28H
Char1EQU30H
Char2EQU40H
T_RSTBitP2.3,实时时钟复位线引脚
T_CLKBitP2.4,实时时钟时钟线引脚
T_IOBitP2.5,实时时钟数据线引脚
SECONDEQU50H
MINUTEEQU51H
HOUREQU52H
DAYEQU53H
MONTHEQU54H
WEEKEQU55H
YEARLEQU56H
ORG0000H
AJMPSTART
000bh
ljmpinter0
ORG0100H
START:MOVSP,#60H,主程序
MOVTMOD,#01H
MOVTH0,#9EH,置定时器初值(定时100ms)
MOVTL0,#58H
SETBTR0,启动定时器0
setbea
setbet0
CLRFLAG
CLRXLAG
MOVCOUNT,#1
MOVR0,#16,把ROM的内容转入ram
MOVR1,#ChAR1
MOVDPTR,#TAB1
S1:CLRA
MOVCA,@A+DPTR
MOV@R1,A
incdptr
incr1
djnzr0,s1
MOVR0,#16
MOVR1,#Char2
MOVDPTR,#TAB2
S2:CLRA
MOVCA,@A+DPTR
MOV@R1,A
INCDPTR
INCR1
DJNZR0,S2
LCALLLCD_INIT,液晶初始化
LCALLLCD_R_BF
MOVCMD,#38H
LCALLLCD_W_C
MOVCMD,#0CH
LCALLLCD_W_C
MOVCMD,#06H
LCALLLCD_W_C
MOVCMD,#01H
LCALLLCD_W_C
CLRT_RST,DS1302初始化
CLRT_CLK
MOVSECOND,#00H,初始时间设为12:00:00
MOVMINUTE,#00H
MOVHOUR,#12H
MOVDAY,#01H,初始日期设为08年1月1日第一周
MOVMONTH,#01H
MOVWEEK,#01H
MOVYEARL,#08H
LCALLSETDS1302
MOV24H,37H
MOV25H,36H
WAIT1:,液晶初始显示
LCALLDELAY_1MS
DJNZR0,WAIT1
MOVR1,#16
MOVCMD,#80H
LCALLLCD_W_C
MOVR0,#Char1
WLOOP1:CLRA
MOVA,@R0
MOVDAT,A
LCALLLCD_R_BF
LCALLLCD_W_D
INCR0
DJNZR1,WLOOP1
MOVCMD,#0C0H
LCALLLCD_W_C
MOVR2,#16
MOVR0,#Char2
WLOOP2:CLRA
MOVA,@R0
MOVDAT,A
LCALLLCD_R_BF
LCALLLCD_W_D
INCR0
DJNZR2,WLOOP2
LCALLPANJIAN
LJMPWAIT1
LCD_INIT:MOVR0,#3,液晶子程序
INIT_LOOP:MOVCMD,#38H
LCALLLCD_W_C
MOVR1,#15
DELAY_15MS:
LCALLDELAY_1MS
DJNZR1,DELAY_15MS
DJNZR0,INIT_LOOP
RET
LCD_R_BF:
MOVP1,#0FFH
CLRRS
SETBRW
CLRE
NOP
SETBE
JBP1.7,LCD_R_BF
RET
LCD_W_C:MOVP1,CMD
CLRRS
CLRRW
CLRE
ACALLLCD_R_BF
SETBP2.2
RET
LCD_W_D:MOVP1,DAT
SETBRS
CLRRW
CLRE
ACALLLCD_R_BF
SETBE
RET
DELAY_1MS:,延时1MS程序
MOV22H,R1
MOV23H,R0
MOVR0,#50
DLOOP1:MOVR1,#100
DJNZR1,$
DJNZR0,DLOOP1
MOVR0,23H
MOVR1,22H
RET
inter0:PUSH00H,保护R0R1
PUSH01H
CLRTR0
MOVTH0,#0CFH,中断100MS
MOVTL0,#2CH
JBFLAG,INTFLAG
,显示程序
LCALLGET1302
LCALLdatapro
LJMPINTREND
INTFLAG:
CPLXLAG
MOVA,COUNT
CJNEA,#1,INT1
JBXLAG,INT00
MOV4AH,24H
MOV49H,25H
LJMPINTREND
INT00:MOV4AH,#20H
MOV49H,#20H
LJMPINTREND
INT1:CJNEA,#2,INT2
JBXLAG,INT11
MOV47H,24H
MOV46H,25H
LJMPINTREND
INT11:MOV47H,#20H
MOV46H,#20H
LJMPINTREND
INT2:CJNEA,#3,INT3
JBXLAG,INT22
MOV3DH,24H
MOV3CH,25H
LJMPINTREND
INT22:MOV3DH,#20H
MOV3CH,#20H
LJMPINTREND
INT3:CJNEA,#4,INT4
JBXLAG,INT33
MOV3AH,24H
MOV39H,25H
LJMPINTREND
INT33:MOV3AH,#20H
MOV39H,#20H
LJMPINTREND
INT4:CJNEA,#5,INT5
JBXLAG,INT44
MOV37H,24H
MOV36H,25H
LJMPINTREND
INT44:MOV37H,#20H
MOV36H,#20H
LJMPINTREND
INT5:CJNEA,#6,INTREND
JBXLAG,INT55
MOV4FH,24H
LJMPINTREND
INT55:MOV4FH,#20H
INTREND:SETBTR0
POP01H
POP00H
RETI
,设置DS1302初始时间,并启动计时
SETDS1302:
CLRT_RST
nop
CLRT_CLK
nop
SETBT_RST
nop
MOVB,#8EH,写控制命令字
LCALLINPUTBYTE
MOVB,#00H,写保护关闭
LCALLINPUTBYTE
SETBT_CLK
nop
CLRT_RST
MOVR0,#SECOND,内存中的时间首地址
MOVR1,#80H,DS1302中的时间首地址
MOVR7,#7,字节数
SETLOOP:
CLRT_RST
nop
CLRT_CLK
nop
SETBT_RST
nop
MOVB,R1,写命令字
LCALLINPUTBYTE
MOVA,@R0,设置时间
MOVB,A
LCALLINPUTBYTE
INCR0
INCR1
INCR1
SETBT_CLK
nop
CLRT_RST
nop
DJNZR7,SETLOOP
CLRT_RST
nop
CLRT_CLK
nop
SETBT_RST
nop
MOVB,#8EH
LCALLINPUTBYTE
MOVB,#80H,开写保护
LCALLINPUTBYTE
SETBT_CLK
nop
CLRT_RST
nop
RET
,从DS1302读取时间
GET1302:
MOVR0,#SECOND
MOVR1,#81H,DS1302中读时间的首地址
MOVR7,#7
GETLOOP:
CLRT_RST
nop
CLRT_CLK
nop
SETBT_RST
nop
MOVB,R1
LCALLINPUTBYTE,写命令字
LCALLOUTPUTBYTE,读时间
MOV@R0,A,将从DS1302中读取的时间从内存中保存
INCR0,修改地址指针
INCR1
INCR1
SETBT_CLK
nop
CLRT_RST
nop
DJNZR7,GETLOOP
RET
INPUTBYTE:
MOVR4,#8
INPUTLOOP:
MOVA,B
RRCA
MOVB,A
MOVT_IO,C
SETBT_CLK
NOP
,NOP
,NOP
CLRT_CLK
DJNZR4,INPUTLOOP
RET
OUTPUTBYTE:
clra
clrc
MOVR4,#8
OUTPUTLOOP:
NOP
,NOP
MOVC,T_IO
RRCA
SETBT_CLK
NOP
,NOP
,NOP
CLRT_CLK
DJNZR4,OUTPUTLOOP
RET
datapro:,DS1302时间在液晶上显示
movdptr,#tab3
MOVA,50h
ANLA,#0FH
MOVCA,@A+dptr
MOV4DH,A
MOVA,50H
SWAPA
ANLA,#0FH
MOVCA,@A+DPTR
MOV4CH,A
MOVA,51H
ANLA,#0FH
MOVCA,@a+dptr
MOV4AH,A
MOVA,51H
SWAPA
ANLA,#0FH
MOVCA,@a+dptr
MOV49H,A
MOVR0,4AH
MOVA,52H
ANLA,#0FH
MOVCA,@a+dptr
MOV47H,A
MOVA,52H
SWAPA
ANLA,#0FH
MOVCA,@a+dptr
MOV46H,A
MOVA,53H
ANLA,#0FH
MOVCA,@a+dptr
MOV3DH,A
MOVA,53H
SWAPA
ANLA,#0FH
MOVCA,@a+dptr
MOV3CH,A
MOVA,54H
ANLA,#0FH
MOVCA,@a+dptr
MOV3AH,A
MOVA,54H
SWAPA
ANLA,#0FH
MOVCA,@a+dptr
MOV39H,A
MOVA,56H
ANLA,#0FH
MOVCA,@a+dptr
MOV37H,A
MOVA,56H
SWAPA
ANLA,#0FH
MOVCA,@a+dptr
MOV36H,A
MOVA,55H
ANLA,#0FH
MOVCA,@a+dptr
MOV4FH,A
RET
PANJIAN:MOVR0,#SECOND
JBP3.0,PAN1
LCALLDEL1
JBP3.0,PAN1
JNBP3.0,$
MOVA,COUNT
CJNEA,#1,BINT1
MOV4AH,24H
MOV49H,25H
MOV24H,47H
MOV25H,46H
LJMPBIS
BINT1:CJNEA,#2,BINT2
MOV47H,24H
MOV46H,25H
MOV24H,3DH
MOV25H,3CH
LJMPBIS
BINT2:CJNEA,#3,BINT3
MOV3DH,24H
MOV3CH,25H
MOV24H,3AH
MOV39H,25H
LJMPBIS
BINT3:CJNEA,#4,BINT4
MOV3AH,24H
MOV39H,25H
MOV24H,37H
MOV25H,36H
LJMPBIS
BINT4:CJNEA,#5,BINT5
MOV37H,24H
MOV36H,25H
MOV47H,24H
LJMPBIS
BINT5:CJNEA,#6,BIS
MOV4FH,24H
BIS:INCCOUNT
MOVA,COUNT
CJNEA,#7,PAN0
MOVCOUNT,#1
PAN0:SETBFLAG
SJMPPAN3
PAN1:JBP3.1,PAN2
LCALLDEL1
JBP3.1,PAN2
JNBP3.1,$
SETBFLAG
MOVA,COUNT
ADDA,#SECOND
MOVR0,A
MOVA,@R0
INCA
DAA
MOV@R0,A
LCALLdatapro
MOVA,COUNT
CJNEA,#1,PINT1
MOV24H,4AH
MOV25H,49H
LCALLPAN3
PINT1:CJNEA,#2,PINT2
MOV24H,47H
MOV25H,46H
LCALLPAN3
PINT2:CJNEA,#3,PINT3
MOV24H,3DH
MOV25H,3CH
LCALLPAN3
PINT3:CJNEA,#4,PINT4
MOV24H,3AH
MOV25H,39H
LCALLPAN3
PINT4:CJNEA,#5,PINT5
MOV24H,37H
MOV25H,36H
LCALLPAN3
PINT5:CJNEA,#6,PAN3
MOV24H,4FH
LCALLPAN3
PAN2:JBP3.2,PAN3
LCALLDEL1
JBP3.2,PAN3
JNBP3.2,$
CLRFLAG
MOVCOUNT,#0
LCALLSETDS1302
PAN3:RET
DEL1:PUSH00H
PUSH01H
MOVR0,#50
LOOP1:MOVR1,#10
DJNZR1,$
DJNZR0,LOOP1
POP01H
POP00H
RET
TAB1:DB44H,41H,54H,45H,20H,20H,20H,20H,5FH,20H,20H,5FH,20H,20H,20H,57H
TAB2:DB54H,49H,4DH,45H,20H,20H,20H,20H,5FH,20H,20H,5FH,20H,20H,20H,20H
TAB3:DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
END
附录(三)参考文献
1.杨子文,单片机原理及应用,西安电子科技大学出版社
2.王法能,单片机原理及应用,北京科学出版社
3.余梦尝,数字电路技术基础,高等教育出版社
4.王效华,单片机原理与应用,北京交通大学出版社
5.李维諟,液晶显示器件应用技术,北京邮电学院出版社
致谢
在论文完成之际,我首先向关心帮助和指导我的指导老师老师表示衷心的感谢并致以崇高的敬意!在学校的学习生活即将结束,回顾三年来的学习经历,面对现在的收获,我感到无限欣慰.为此,我向热心帮助过我的所有老师和同学表示由衷的感谢!在论文工作中,遇到了许许多多这样那样的问题,有的是专业上的问题,有的是论文格式上的问题,一直得到老师的亲切关怀和悉心指导,使我的论文可以又快又好的完成,老师以其渊博的学识,严谨的治学态度,求实的工作作风和他敏捷的思维给我留下了深刻的印象,我将终生难忘.对于老师对我的亲切关怀和悉心指导,再一次向他表示衷心的感谢,感谢他为学生营造的浓郁学术氛围,以及学习,生活上的无私帮助!值此论文完成之际,谨向老师致以最崇高的谢意!最后,衷心地感谢在百忙之中评阅论文和参加答辩的各位专家,教授!
毕业论文
1
-
2