单片机课设实验报告

  • 格式:docx
  • 大小:512.36 KB
  • 文档页数:34

下载文档原格式

  / 34
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、运行效果
图2.1
图2.2
图2.1为运行在工作模式的效果仿真图,LCD进行正常的时钟计数。图2.2为其实物图。
图2.3
图2.4
图2.3为进入设置模式的效果,LCD停止计数。图2.4为其实物图。
图2.5
图2.6
图2.5为在设置模式下,把日期设置为19年03月16日02时04分41秒。图2.6为其实物图。
3、添加开关程序,开关程序添加完成后,编译成功,在软件上进行仿真时发现开关不起作用,按下开关DS1302的时钟继续运行,调节时钟数据,不起作用,通过连调发现,没有对60-66单元的收据进行保护,因此,将开关拨到设置模式时,DS1302时钟并未停止,继续进行计数,所以,将60-66单元送入20-26单元进行保护,当进入设置模式时,将数据进行保护,最后如果没有确认,则将20-26数据送出,如果改变了,则将60-66直接输出,将程序更改完成后,再次仿真达到了预期的效果,可以对时钟进行调节,可以暂停,重新调节时间。
LCALLDELAY;调用延时子程序
JBWORK_SET,LOOP2;再次判断
LCALLSW_CE
LOOP2:LCALLCE;调用显示子程序
LJMPLOOP
CLR_BUF:;将60H-66H单元附初值
MOV60H,#0
MOV61H,#0
MOV6Hale Waihona Puke BaiduH,#0
MOV63H,#12H
MOV64H,#1
MOV65H,#7
ORG0000H
LJMPSTART;跳向主程序
ORG0100H
START:CLRP2.4
MOVSP,#40H;重新设置堆栈指针
MOV20H,#0;_____
MOVTMOD,#01H;定时器T0定时
MOVTH0,#3CH;设置定时器初值(定时50ms)
MOVTL0,#0B0H
MOV21H,#10
SETBEA
POP63H
POP62H
POP61H
POP60H
MOV20H,#0
MOV21H,#10
CLRTR0
LCALLSET1302;调用DS1302芯片子程序
LCALLDELAY
LCALLGET1302;调用从DS1302芯片读
RET
ADD_1:;按键加纷映绦颞
NOP
ADD_MIAO:
CJNER0,#60H,ADD_FEN
LJMPRETURN
ADD_SHI:
CJNER0,#62H,ADD_RI
MOVA,@R0
MOVB,#1
ADDA,B
DAA
MOV@R0,A
CJNEA,#24H,RETURN
MOV@R0,#0
LJMPRETURN
ADD_RI:
CJNER0,#63H,ADD_YUE
MOVA,@R0
MOVB,#1
ADDA,B
MOV66H,#17H
RET
SW_CE:
PUSH60H;
PUSH61H
PUSH62H
PUSH63H
PUSH64H
PUSH65H
PUSH66H
MOVA,#60H
PUSHACC
SW_C1:
SETBTR0
JBGRESSION,SW_C2;判断是否为移位
LCALLDELAY
JBGRESSION,SW_C2;再次判断
2、LCD的显示部分进行调试,先对产生年月日时分秒之间的连接符进行显示,编译之前先选择自动生成hex文件,让后进行编译,编译完成后调节格式上的错误,直到编译通过后,进行软件上的仿真,仿真时发现,LCD显示上出现了错位现象,让后调节源程序,调节LCD的显示行列位置之后在进行重新编译,在软件上进行仿真,出现了想要的结果;连接符编译成功后,将时钟时间显示在LCD相应的位置上,时钟显示程序,在连接符显示程序基础上进行编译,不停地循环检测60H-66H单元的内容,将这些单元的内容送入到LCD上显示,编译通过之后,发现LCD的时钟显示不正确,通过连调,发现检测60-66单元内容时出错了,重新调节程序,进行编译,成功的出现了时钟的显示。
附录12
一、调试过程
1、DS1302实时时钟部分进行调试,程序编完之后,点击编译,对程序进行编译,编译后,发现程序中出现了错误,无法编译通过,查看错误步骤,进行调试,发现是程序的格式错误,调节代码的格式通过编译,编译通过之后,进行软件的仿真实验,看看DS1302是否会生成实时时钟,将编译生成的hex文件导入AT89C51芯片中,之后进行运行,发现DS1302生成了实时时钟,证明这一部分编译成功。
WORK_SETBITP0.0;开关
GRESSIONBITP0.1;移位
ADD_BITP0.2;加
DEC_BITP0.3;减
ENTERBITP0.4;确定
SECONDEQU60H;时间首址
LCD_COMDEQU70H;命令字
LCD_DATAEQU71H;数据字
HANGEQU72H;行
LIEEQU73H;列
电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行;万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
关键词:时钟芯片DS1302,LCD液晶显示,单片机T89C52
摘 要2
一、调试过程4
二、运行效果6
三、系统优化10
四、设计总结11
CJNEA,#0FH,DEC_M1
MOVA,@R0
MOVB,#10H
DECA
DIVAB
CJNEA,#0FH,DEC_M2
MOV@R0,#59H
LJMPDEC_RETURN
DEC_M1:
MOVA,@R0
DECA
MOV@R0,A
LJMPDEC_RETURN
DEC_M2:
MOVA,@R0
附录:
EBITP2.0;LCD引脚定义
RWBITP3.1
DIBITP3.0
CS1BITP2.1
CS2BITP3.2
GOUUNDBITP2.4
LCDEQUP1
T_CLKBITP3.4;定义DS1302时钟线引脚
T_IOBITP3.3;定义DS1302数据线引脚
T_RSTBITP3.5;定义DS1302复位线引脚
在硬件设计方面,可以将端口进行标号,这样在实际的硬件线路连接的过程中,如果硬件与软件原理图的连接端口不同,可以直接改标号,便于与硬件的原理图一致。
四、设计总结
系统以AT89C51为核心部件,使用串行时钟芯片DS1302,实现时间的功能设置。通过按键和液晶显示屏可方便地校对时钟时间,本系统基本完成了实用电子钟的功能,尽量做到了硬件电路简单稳定。在该系统设计,调试完成之后,对最后的成功进行分析,同时结合在调试过程中出现的错误进行综合分析,总结在实际系统设计和调试过程中的宝贵经验。
仿真和实际硬件的实验还是有着不小的区别,在软件上进行仿真,所有的端口是自己连接的,因此可以选择不同的端口使用,而在硬件实验中,硬件实验上的一些连线已经自己确定了,必须采用该端口,因此在硬件调试时,需要改变端口的地址以用来符合硬件实验的标准,其次在软件仿真上没有出现问题,在硬件实验时可能有问题,在利用软件仿真时,LCD清屏不清屏,对于实验显示来说没有产生什么影响,然而转入硬件实验室,如果不进行LCD的清屏程序,那么由于LCD上本身可能有数据,而导致了LCD的花屏,出现了不该亮的地方显示了,会对于数据的显示,以及美观造成影响,这些实际的问题并不能从软件仿真上进行解决。
SETBET0
LCALLLCD_OPEN;调用开显示子程序
LCALLCLR_BUF;清屏子程序
LCALLSET1302;调用DS1302芯片子程序
LCALLDELAY;调用延时子程序
LCALLCE;调用年月日显示子程序
LOOP:LCALLGET1302;调用从DS1302芯片读
LOOP1:JBWORK_SET,LOOP2;显示状态则跳转
DAA
MOV@R0,A
CJNEA,#32H,RETURN
MOV@R0,#1
LJMPRETURN
ADD_YUE:
CJNER0,#64H,ADD_NIAN
MOVA,@R0
MOVB,#1
ADDA,B
DAA
MOV@R0,A
CJNEA,#13H,RETURN
MOV@R0,#1
LJMPRETURN
ADD_NIAN:
JBADD_,SW_C3
POPACC
MOVR0,A
PUSHACC
LCALLADD_1;调用按键加一子程序
LCALLCE
JNBADD_,$
SW_C3:;判断是否减按键按下
JBDEC_,SW_C4
LCALLDELAY
JBDEC_,SW_C4
POPACC
MOVR0,A
PUSHACC
LCALLDEC_1;调用减一子程序
CJNER0,#66H,RETURN
MOVA,@R0
MOVB,#1
ADDA,B
DAA
MOV@R0,A
LJMPRETURN
RETURN:
NOP
RET
DEC_1:;按键减
NOP
DEC_MIAO:;秒位减
CJNER0,#60H,DEC_FEN
MOVA,@R0
MOVB,#10H
DECA
DIVAB
MOVA,B
LCALLCE
JNBDEC_,$
SW_C4:;判断是否确定按键按下
JBENTER,SW_C5
LCALLDELAY
JBENTER,SW_C5
POPACC
MOVR0,A
POPACC
POPACC
POPACC
POPACC
POPACC
POPACC
POPACC
PUSH60H
PUSH61H
PUSH62H
PUSH63H
MOVA,@R0
MOVB,#1
ADDA,B
DAA
MOV@R0,A
CJNEA,#60H,RETURN
MOV@R0,#0
LJMPRETURN
ADD_FEN:
CJNER0,#61H,ADD_SHI
MOVA,@R0
MOVB,#1
ADDA,B
DAA
MOV@R0,A
CJNEA,#60H,RETURN
MOV@R0,#0
图2.7
图2.7为点击确认后进入工作模式的结果,DS1302与LCD显示同步。
三、系统优化
在编程时,由于程序比较长,在编译的过程中容易出错,因此可以进行功能的分解,分开编译,这样可以更容易的找出编译过程中出现的问题,同时将不同部分的子程序分别放在一起,这样在联合调试的时候更容易找出错误。
在实现的功能中,当按下设置按键时,虽然可以按要求调整时间,但是如果多按了移位键就不知道移到哪一位了,我们可以编程加入光标功能,当移到哪一位是就可以清楚地知道在哪了。
PUSH64H
PUSH65H
PUSH66H
MOVA,R0
PUSHACC
JNBENTER,$
SW_C5:;判断是设置还是显示
JNBWORK_SET,SW_C52
LCALLDELAY
JBWORK_SET,SW_C51
SW_C52:
LJMPSW_C1
SW_C51:
POPACC
POP66H
POP65H
POP64H
在该系统进行软件设计的时候,采用模块化设计方法,除了便于升级外,在调试过程中,模块化的程序设计将使系统更容易调试,我们在调试的过程中,可以分块调试,最后总组装,如果不采用模块化设计方法,将很难找出调试中的错误,无论是在系统硬件连接还是在软件编程时,都要细心。
在这次的单片机课设中,我遇到的问题很多,从编程到仿真,再到硬件的实验,让我感觉到困难重重,仿真失败,硬件不成功,令人烦躁,但是这也是给我了一个磨练的机会,让我学会了许多,极大地提高了我的动手能力,让我学会了,如何去解决问题,通过查阅资料找到问题的原因,并解决问题,这个过程是令人痛苦而快乐的,同时通过这次的课设也让我学到了许多的新知识,对于以前不熟悉的地方又进行了一次强化与加深,让我巩固的更为牢固了。
POPACC
CJNEA,#64H,SW_C11
INCA
INC20H
SW_C11:
INCA
INC20H
CJNEA,#67H,SW_C12
MOVA,#60H
MOV20H,#0
SW_C12:
PUSHACC
JNBGRESSION,$
SW_C2:;判断是否加按键按下
JBADD_,SW_C3
LCALLDELAY
电气工程学院
单片机课程设计
实验报告
班级:电142
姓名:
学号:1412021061
设计题目:实时时钟系统设计
设计时间:2017.01.09~01.13
评定成绩:
评定教师:
摘要
人类为了观测时间,从远古的观太阳、革命时期的摆钟到现在电子钟,不断的在研究、创新纪录;随着科技、社会的快速发展,时间的流逝。美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟芯片DS1302。电子万年历诞生了,它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89C51单片机作为核心,功耗小,能在3V的电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。低压工作,电压可选用3~5V电压供电。