基于LCD1602电子时钟毕业论文报告(3)

2019-04-22 16:29

硬件的制作要涉及到protel软件的运用,在画原理图的时候如果连错了就直接导致硬件的出错,所以画图的时候要特别注意。到导入PCB时也是要特别注意的,布板不当也是直接影响实物的制作。对于电子时钟的制作,我们基于小系板来实现,外接显示部分的1602LCD液晶屏、温度传感部分DS18B20、提供实时时间部分DS1302、蜂鸣器、电源接口部分等。总之,一步步制作下来我们完成的还是比较可观的。

软件的编写上我们出现了较大的困难,电子时钟的程序有些复杂,一开始对于我们来说毫无头绪。后来下了很大的功夫且在老师及同学的指导下慢慢的进入了状态。虽然过程出现很多困难,但结果还是实现了电子时钟的功能,不过在显示温度负数时有三个数值显示错误,分别是-16℃,-32℃,-48℃;另外设置模块的逻辑没有做到简单化,在设置模块时只能退出本级的设置,而不能直接退出到当前实时时间显示状态。

七、 遇到的问题及解决方法和总结

7.1硬件方面

画的PCB板焊盘不够大,又没有相应大小的砖针,而且在融板过程中出现了差错,最后导致PCB板不完美.

解决方案:最终决定自己用万能板焊接。

7.2软件方面

由于对C语言程序的认知不深入,在修改程序时,出现了以下几点问题。 (1)欢迎界面的时间太长。 解决方案;修改欢迎界面的延时时间。

(2)温度显示错乱,并且在显示时高位自动补零。

解决方案:通过修改温度函数使其高位的零自动隐藏,但是温度在-16,-32,-48度时仍然会出现错误,比实际的温度高16度,其余温度值时显示正确。

(3)秒钟调节时会自动转零。

解决方案:把自动转零部分的程序改为秒钟调节功能。

(4)进入调节时间状态时字符闪烁以至于看不清楚调节的大小。 解决方案:把1602的字符闪烁指令改为光标指令。 (5)在报警时无声音。

解决方案:修改报警模块,利用控制P3.6脚电源的通断,使蜂鸣器发出嘀嘀的响声。

7.3总结

课程设计的完成,为我们的大二下学期学习生活画下了最后一笔。

在做课程设计的日子里得到了大量课内外的知识巩固,使得我们的动手能力和专业技能都有了很大的提高。让我们认识到脚踏实地,认真严谨是学习的态度,不怕困难、坚持不懈、吃

苦耐劳的精神是我们在这次设计中最大的收益。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。在这次设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我们的同学。

八、 参考文献

【1】.常敏.王涵《单片机应用程序开发与实践》P219 【2】.江志红. 《51单片机技术与应用系统开发案例精选》

【3】.赵明明、索世文、王守中《51单片机应用开发手册—指令、模块、实例》 【4】.王守中.《51单片机开发入门与典型实例》P149 【5】.天津锐志单片机开发网

【6】.杨黎《基于C语音的单片机应用技术与Proteus仿真 》P21

九、 附 录

1、仪器与设备清单 工具、设备和耗材 电脑 KeiluKision4 Proteus7.7软件 单片机实训板 杜邦导线 Protel99SE 万用表 2、元器件清单 元件名称 单片机 液晶 芯片 温度芯片 晶振 瓷片电容 电解电容 排阻 型号 STC89C52RC 数量 1台 1套 1套 1块 16条 1套 1套 数量(个) 1 1 1 1 2 2 1 1 编号 A1 Y1 Y2 Y3 JZ1,JZ2 C1,C2 C3 RP1 价格(元个) 4 18 3 13 1 LMD16L DS1302 DS18B20 12MHZ,32.768KHZ 22pF 22u10uf 10k

按钮 电阻 可调电阻 电池 电源插座 拨动开关 发光二极管 蜂鸣器 排针 6*6*5 10k,1k 1k 1.5V 0.9*0.3*1.1cm LED TMB12A05 1*40PIN2.54mm 5 2 1 2 1 1 1 1 2(排) K1~K5 R1,r2 POT1 DC DY KG LED LB CON 0.1 0.5 2 0.3 0.1 0.8 0 3、原理图(见图一) 4、PCB图(见图三) 5、实物图(见图四) 6、操作说明书

a、正常显示时按下K1进入调节状态,此时按下K1为设置时间状态;按下K2为设置最大温度报警状态;按K3为设置闹钟状态;按下K4为退出调节状态;在调节状态时K2为对应增加键,K3为对应减键,K4为退出按键。

b、正常显示时按下K2显示当前温度并延时5秒;报警时按K4退出。 图 1(硬件原理图) 图 2(软件原理图) 图 3(PCB)

程序:

#include

unsigned char i; for(i=0;i

***********蜂鸣器模块************

void dely500(void) {

unsigned char i; for(i=250;i>0;i--) {

_nop_(); } }

void baojing() 报警 {

unsigned int j, date; }

unsigned char ReadSet1302(unsigned char cmd)根据命令读取1302相应的值

{

unsigned char date; REST=0; SCLK=0; REST=1;

Write1302(cmd); delaynus(2); date=Read1302(); SCLK=1; REST=0;

return date; }

void IntDS1302(void) DS1302初始化 {

unsigned char flag;

flag= ReadSet1302(0x81);

if(flag&0x80) { 判断时钟芯片是否关闭

WriteSet1302(0x8E,0x00); 根据写状态寄存器命令字,写入不保护指令 WriteSet1302(0x80,((010)<<4|(0))); 根据写秒寄存器命令字,写入秒的初始值 WriteSet1302(0x82,((010)<<4|(0))); 根据写分寄存器命令字,写入分的初始值 WriteSet1302(0x84,((010)<<4|(0))); 根据写小时寄存器命令字,写入小时的初始值 WriteSet1302(0x86,((010)<<4|(0))); 根据写日寄存器命令字,写入日的初始值 WriteSet1302(0x88,((010)<<4|(0))); 根据写月寄存器命令字,写入月的初始值 WriteSet1302(0x8c,((1010)<<4|(10))); 根据写年寄存器命令字,写入年的初始值 WriteSet1302(0x90,0xa5); 打开充电功能 选择2K电阻充电方式 WriteSet1302(0x8E,0x80); 根据写状态寄存器命令字,写入保护指令 } }

***************液晶显示模块***************** sbit RS=P2^5; sbit RW=P2^6; sbit E=P2^7; sbit BF=P0^7; *液晶忙检测* bit BusyTest(void) {

bit result; RS=0; RW=1; E=1;

_nop_(); _nop_(); _nop_(); result=BF;

_nop_(); _nop_(); _nop_(); E=0;

return result; }

*写指令*

void Write_com(unsigned char command) {

while(BusyTest()!=0); RS=0; RW=0; E=0;

_nop_(); _nop_(); _nop_(); P0=command; _nop_(); _nop_(); _nop_(); E=1;

_nop_(); _nop_(); _nop_(); E=0; }

*写地址*

void Write_Address(unsigned char address) {

Write_com(address|0x80); delay1ms(1); }

*写数据*

void Write_Date(unsigned char date) {

RS=1; RW=0; E=0;

_nop_(); _nop_(); _nop_(); P0=date; _nop_(); _nop_(); _nop_();


基于LCD1602电子时钟毕业论文报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:二次函数图像—符号确定-精解

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: