基于51单片机的液晶万年历设计论文(带温度显示)_第1页
基于51单片机的液晶万年历设计论文(带温度显示)_第2页
基于51单片机的液晶万年历设计论文(带温度显示)_第3页
基于51单片机的液晶万年历设计论文(带温度显示)_第4页
基于51单片机的液晶万年历设计论文(带温度显示)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘要在寒假期间我用一周时间完成了这个液晶万年历,它可以显示年月日、时分秒、以及温度(可上下限报警),可以对时间进行加一或减一调整,并加入了闰、平年时间调整,方便可行,已经调试成功。考虑到成本和方便,本作品采用了stc89c52和ds18b20,计时用的是51单片机自带的十六位定时器/计数器t0,尽管对时间进行了误差调整但是还是有一定的误差,考虑到学校后改用ds1302时钟芯片,进一步减小误差。温度显示精度达到0.1摄氏度。关键词: 单片机 ds18b20 万年历 温度1. 硬件工作介绍(1)上电自动复位及手动复位电路 stc89c52单片机的rst端外部复位有两种操作方式:上电自动复位和按键手

2、动复位。本设计用上电自动复位以及手动复位下结合的方式外接电路(见附图)。(2)时钟振荡电路作品中采用12m晶振,其连接方法如图所示,其中电容的值都为22pf。(3)1602液晶显示接口1602采用标准的16脚接口(见附图),其中:第1脚:gnd为地电源第2脚:vcc接5v正电源第3脚:v0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10k的电位器调整对比度第4脚:rs为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:rw为读写信号线,高电平时进行读操作,低电平时进行写操作。当rs和rw共同为低电平时可以

3、写入指令或者显示地址,当rs为低电平rw为高电平时可以读忙信号,当rs为高电平rw为低电平时可以写入数据。第6脚:e端为使能端,当e端由高电平跳变成低电平时,液晶模块执行命令。第714脚:d0d7为8位双向数据线。 第15脚:vcc第16:gnd(4)键盘键盘是通过s3(p3.2),s4(p3.3),s5(p3.4)对时钟进行调整,其s3选择要调整的对象如时,分,日,月等等,并在液晶屏上显示所选的对象。s4对所选中的对象进行加一调整,而s5对所选对象进行减一调整。(5)蜂鸣器 对温度进行测量,高低温超限报警,正常温度在15.0-36.0摄氏度,超过最高或低于最低温度就会鸣叫报警。2. 软件工作

4、介绍 由于c语言功能丰富,表达能力和可移植能力强,而且操作方便,简单易懂,因此软件部分由c语言编写,程序的重点和难点是闰月的时间调整以及键盘对时间的调整,本程序还不是太完善,温度显示有规律性的微微闪烁,恳请老师指正。开始 lcd初始化 t0初始化 时间、温度显示 s3按下否? s4按下否? s5按下否? 否 否是 是 是 时间加一 n加一,选择调整对象 时间减一 否 否到最大值否? n=6否?到最小值否? 是 是 是 时间清零 n清零 时间清零 主程序流程图设计总结在制作的过程中,因为板子是在学校自己动手做的最小系统板,接插线还是比较简单的,难的是硬件的调试,因为理论与实践总是存在着差距,想出

5、来的东西没有经过实践的检验是不可靠的,任何一个小小的疏忽大意都能导致失败。比如说对 hour, min , sec,day, moth的定义,一开始我用的unsigned char ,但是在调试减一时,减到零时再按下键盘就会出现乱码,几经调试,终于发现问题地所在并及时地解决了问题,之后再一次对硬件进行调试,终于成功了。从这一方面来说,我认识到做要比说难得多,做的过程中必定有很多的阻碍,但是一定要慢慢来,一点一点地找出问题,再一点一点地解决它,这样的话,到达成功的彼岸也就仅仅是时间的问题了。我通过这次设计,特别是通过对程序的编写,深层了解了单片机内部结构和外围器件的应用。我学到的不仅仅是电子方面

6、的知识,更重要的是,我学到了作为一名电子设计者所必需的心理素质,那就是决心加上耐心!附录1:程序代码:#include #define lcd_data p0 /定义数据端口#define _th0_tl0_ (65536 - 50000) #define hi (_th0_tl0_ / 256) /给高8位赋值#define lo (_th0_tl0_ % 256) /给低8位赋值#define m 20 /(1000/50)1秒要20个中断的累计 char hour = 0, min = 0, sec = 0,n=0,day=1,moth=1,week=7; /初始化要显示的值unsign

7、ed char seg_tab = 0x30,0x31,0x32, 0x33, 0x34, 0x35, 0x36, 0x37,0x38, 0x39;/0-9数字 unsigned int year=8;sbit rs = p2 5; /定义和lcd的连接端口sbit rw = p2 4;sbit e = p2 3;sbit busy = p0 7;sbit s3 = p32;/定义开关s3选择键sbit s4 = p33;/s4加一键sbit s5 = p34;/s5减一键sbit dq = p20;/ds18b20sbit speak = p21; /蜂鸣器警报/*/void delay1(

8、unsigned int num)/短延时函数while( num- );/*/void delay(unsigned char t)/长延时函数,延时 1ms*t sunsigned char a;while(-t != 0)for(a = 0; a 0; i-) dq = 0; / 给脉冲信号 dat = 1; dq = 1; / 给脉冲信号 if(dq) dat |= 0x80; delay1(4);return (dat);/*/writeonechar(unsigned char dat)/写一个字节unsigned char i = 0;for (i = 8; i 0; i-) d

9、q = 0; dq = dat&0x01; delay1(5); dq = 1; dat=1;/*/read_disp_temperature(void)/读取并显示温度 unsigned int a = 0, b = 0, c = 0, t = 0; float tt = 0; init_ds18b20();writeonechar(0xcc); / 跳过读序号列号的操作writeonechar(0x44); / 启动温度转换init_ds18b20();writeonechar(0xcc); /跳过读序号列号的操作writeonechar(0xbe); /读取温度寄存器a = readon

10、echar();b = readonechar();t = b;t =360)|(t6) n=0; while(s3=0); write_comm(0xcf); write_data(seg_tabn); /显示切换键位所示的位置 n /0:秒,1:分,2:时,3:日,4:月,5:年 6:星期 if(s4=0)/时间调整-加 delay1(10); if(s4=0) if(n=1) min+; if(min=60) min=0; write_comm(0x84); write_data(seg_tabmin/10); write_comm(0x85); write_data(seg_tabmi

11、n%10); if(n=2) hour +; if(hour=24) hour=0; write_comm(0x81); write_data(seg_tabhour/10); write_comm(0x82); write_data(seg_tabhour%10); if(n=3) day+; if(moth=2&(year%4=0)&day=30)day=1; /闰年2月天数计算 if(moth=2&(year%4!=0)&day=29)day=1; /平年2月 if(moth=4|moth=6|moth=9|moth=11)&day=31)day=1;/4,6,9,11月计算 if(da

12、y=32)day=1;/1,3,5,7,8,10,12月天数计算 write_comm(0xc9); write_data(seg_tabday/10); write_comm(0xca); write_data(seg_tabday%10); if(n=4) moth+; if(moth=13)moth=1; write_comm(0xc6); write_data(seg_tabmoth/10); write_comm(0xc7); write_data(seg_tabmoth%10); if(n=5) year+; if(year=51)year=0; write_comm(0xc3);

13、 write_data(seg_tabyear/10); write_comm(0xc4); write_data(seg_tabyear%10); if(n=6)week+; if(week=8) week=1; write_comm(0xcc); write_data(seg_tabyear/10); while(s4=0); if(s5=0)/时间调整-减 delay1(10); if(s5=0) if(n=1) min-;if(min0) min=59; write_comm(0x84); write_data(seg_tabmin/10); write_comm(0x85); wri

14、te_data(seg_tabmin%10); if(n=2) hour-;if(hour0)hour=23; write_comm(0x81); write_data(seg_tabhour/10); write_comm(0x82); write_data(seg_tabhour%10); if(n=3) day-; 待添加的隐藏文字内容3 if(moth=2&(year%4=0)&day1)day=29; if(moth=2&(year%4!=0)&day1)day=28; if(moth=4|moth=6|moth=9|moth=11)&day1)day=30; if(day1)day

15、=31; write_comm(0xc9); write_data(seg_tabday/10); write_comm(0xca); write_data(seg_tabday%10); if(n=4) moth-; if(moth=0)moth=12; write_comm(0xc6); write_data(seg_tabmoth/10); write_comm(0xc7); write_data(seg_tabmoth%10); if(n=5) year-; if(year0)year=50; write_comm(0xc3); write_data(seg_tabyear/10);

16、write_comm(0xc4); write_data(seg_tabyear%10); if(n=6) week-; if(week=0) week=7; write_comm(0xcc); write_data(seg_tabweek); while(s5=0); /*/void isrtimer0(void) interrupt 1 using 1 /定时器0中断服务程序static unsigned char count = 0;/定义静态变量counttr0 = 0; /时间误差调整 tl0 += (_th0_tl0_ + 9) % 256; th0 += (_th0_tl0_ +

17、 9) / 256 + (char)cy; tr0 = 1;count+;if(count = m)/1秒种时间到count = 0;sec+;if(sec = 60)/1分钟时间到min+;sec = 0;if(min = 60)/1小时时间到hour+;min = 0;if(hour = 24)/24小时时间到 day+; week+;hour = 0;min = 0;sec = 0;if(week=8) week=1; if(moth=2&(year%4=0)&day=30)|(moth=2&(year%4!=0)&day=29)|(moth=4|moth=6|moth=9|moth=1

18、1)&day=31)|(day=32) /一个月到 moth+; day=1; if(moth=13) /一年到 year+; moth=1; write_comm(0x81); /时间显示 write_data(seg_tabhour/10); write_comm(0x82); write_data(seg_tabhour%10); write_comm(0x83); write_data(:); write_comm(0x84); write_data(seg_tabmin/10); write_comm(0x85); write_data(seg_tabmin%10); write_comm(0x86); write_data(:); write_comm(0x87); write_data(seg_tabsec/10); wri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论