简易万年历设计制作.docx

上传人:scccc 文档编号:12194230 上传时间:2021-12-02 格式:DOCX 页数:22 大小:154.57KB
返回 下载 相关 举报
简易万年历设计制作.docx_第1页
第1页 / 共22页
简易万年历设计制作.docx_第2页
第2页 / 共22页
简易万年历设计制作.docx_第3页
第3页 / 共22页
简易万年历设计制作.docx_第4页
第4页 / 共22页
简易万年历设计制作.docx_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《简易万年历设计制作.docx》由会员分享,可在线阅读,更多相关《简易万年历设计制作.docx(22页珍藏版)》请在三一文库上搜索。

1、简易万年历目录引言.P2方案选择.P2硬件选择.P2AT89S52.P2LCD1602.P3DS18B20.P4程序流程.P5参考文献.P6总结.P7附件1.实验程序.P8附件2.模块实物图.P241 引言液晶技术在在最近单片机的发展中显的越来越重要,因此,学习和熟练应用液晶模块是每个学电子的大学生应该有的本事。本文就以用89C52单片机来控制LCD1602液晶来模拟一个简单的万年历实验。该系统就以实验室中提供的简单材料,来学习和应用液晶模块的应用。通过实践,基本掌握了液晶的应用方法,还在该基础上,用温度传感器DS18B20 添加了显示当前温度的功能。关键词:LCD1602,51单片机,温度传

2、感器DS18B20 。2 方案选择控制方面:方案一:采用三星公司的ARM9芯片,该芯片功能强大,可以极大的提高系统的性能和速度,但是价格偏贵,对实验类的项目不合算。方案二:采用使用Atmel 公司的AT89S52单片机,该单片机具有方便,简单控制,成本低等特点,在实验室中普及行好。综合考虑,我们选择方案二,用89S52来进行对LCD的控制。显示方面:方案一:采用4个点阵连接起来,闪动显示,这种方案需要用到4个寄存器,这样程序庞大,硬件复杂。方案二:采用数码管显示,该方案程序简单,但是不能满足本设计的所有要求。方案三:采用LCD1602作为显示器,该方案的特点是操作方便,能够容易把模块转移转移到

3、别的模块上。且能满足本实验的所有功能。综上所述,我们选择方案三。3 硬件选择主要器件选择如下:(1)AT89S52ATMEL的AT89S52是一种高效微控制器 ,AT89S52有以下主要特点: a)与MCS-51 兼容 b)8K字节可编程闪烁存储器 c)寿命:1000写/擦循环 d)32可编程I/O线 AT89S52是普遍使用的控制芯片,能很好的满足本设计的要求。性能优越,性价比相较于同类设备高。(2) LCD1602液晶显示器LCD1602是一种点阵液晶显示器, 其能显示32个字符,指令系统简单,能很好满足设计显示且不必进行日期时间之间的切换显示,既减少了硬件的资源,也减少了软件设计的复杂度

4、。功耗低,体积小,适用于小场合的仪表显示,使用寿命长久。液晶模块能稳定的显示出字符,用简单的51单片机就能很好的控制,下面附上液晶模块的原理图:(3) 输入方面,采用外接4X4矩阵键盘。(4) 温度传感器采用DS18B20,DS18B20产品的特点:1).只要求一个端口即可实现通信。(2).在DS18B20中的每个器件上都有独一无二的序列号。(3).实际应用中不需要外部任何元器件即可实现测温。(4).测量温度范围在55。C到125。C之间。(5).数字温度计的分辨率用户可以从9位到12位选择。(6) .内部有温度上、下限告警设置。(7) DDS182O在51单片机上的连接原理图如下:四程序流程

5、图开始温度传感器开始检测 系统初始化单片机处理单片机初始化键盘输入初始值 LCD1602显示万年历和温度4 参考文献郭天祥51单片机C语言教程AT89S52的中文资料.pdfLCD1602液晶完整中文资料.pdf来源DS18B20温度传感器中文资料。Pdf来源4 总结在这实验之后,我们对于LCD1602液晶的使用方法以基本掌握,对温度传感器DS18B20也进行了初步探索,在传感器方面有了很大的收获。对于整个实验来说,还存在一些缺点,例如万年历的稳定性还不是很好,要想真正投入工业生产,这些功能还远远不够,还科技进行改进,比如加个蜂鸣器,在用户设定的时间响起,起到一个闹钟的作用,还应该有农历的显示

6、等等,在今后的学习中,我们还会继续关注这一模块的发展,让自己去不断学习,去完善。附录1:完整程序:#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code table="wendu="uchar code table1="0123456789n"uchar code table2="time:"sbit lcden=P14;sbit lcdrs=P12;sbit ds=P1

7、0;uint tp,t0,s;uchar bai,shi,ge,miao,fen,xiaoshi,miao1,miao2,fen1,fen2,xiaoshi1,xiaoshi2,temp,num,k,z,xiaoshi3,xiaoshi4,fen3,fen4,miao3,miao4;uchar nian,yue,ri,k1,m1,m2,m3,m4,m5,m6,m7,m8,u1,u2,u3,u4,u5,u6,u7,u8;float ftp;void key_scan();void key_manage1(); /键盘功能分配函数void key_manage2(); void key_manag

8、e3(); void key_manage4(); void key_manage5(); void key_manage6(); void key_manage7(); void key_manage8(); void key_manage9(); void key_manage10();void key_manage11(); void key_manage12(); void key_manage13(); void key_manage14(); void key_manage15(); void key_manage16();void delay(uint z)uint x,y;fo

9、r(x=z;x>0;x-)for(y=110;y>0;y-);void write_com(uchar com)lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_data(uchar date)lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;void init()lcden=0;write_com(0x38);write_com(0x0e);write_com(0x06);write_com(0x01);write_com(0x80);void temp_ini

10、t ()uint i;ds=0;i=103;while(i>0)i-;ds=1;i=4;while(i>0)i-;bit tempreadbit(void)uint i;bit dat;ds=0;i+;ds=1;i+;i+;dat=ds;i=8;while(i>0)i-;return(dat);uchar tempread(void)uchar i,j,dat;dat=0;for(i=1;i<=8;i+)j=tempreadbit();dat=(j<<7|(dat>>1);return(dat);void tempwritebyte(uchar

11、dat)uint i;uchar j;bit testb;for(j=1;j<=8;j+)testb=dat&0x01;dat=dat>>1;if(testb)ds=0;i+;i+;ds=1;i=8;while(i>0)i-;elseds=0;i=8;while(i>0)i-;ds=1;i+;i+;void tempchang(void)temp_init ();delay(1);tempwritebyte(0xcc);tempwritebyte(0x44);uint myshu()uchar a,b;temp_init ();delay(1);tempw

12、ritebyte(0xcc);tempwritebyte(0xbe);a=tempread();b=tempread();tp=b;tp<<=8;tp=tp|a;ftp=tp*0.0625;tp=ftp*10+0.5;ftp=ftp+0.05;return tp;void main()k1=0;k=0;z=0;TMOD=0x11;TH0=(65536-5000)/256;TL0=(65536-5000)%256;EA=1;ET0=1;TH1=(65536-2400)/256;TL1=(65536-2400)%256;ET1=1; init();/*write_com(0x80);f

13、or(s=0;s<6;s+)write_data(tables);write_com(0x80+10);write_data(0xdf);write_data(0x63); */while(1)while(!z)TR1=0;TR0=0;key_scan();switch(k) case 1: u1=num; break; case 2: u2=num; break; case 3: u3=num; break; case 4: u4=num; break; case 5: u5=num; break;case 6: u6=num; break;case 7: u7=num; break;

14、case 8: u8=num; break;case 9: xiaoshi3=num; break; case 10: xiaoshi4=num; break; case 11: fen3=num; break; case 12: fen4=num; break; case 13: miao3=num; break;case 14: miao4=num; break; write_com(0x80);write_data(table1u1);write_data(table1u2);write_data(table1u3);write_data(table1u4);write_data(0x2

15、0);write_data(table1u5);write_data(table1u6);write_data(0x20);write_data(table1u7);write_data(table1u8);nian=u1*1000+u2*100+u3*10+u4;yue=u5*10+u6;ri=u7*10+u8;xiaoshi=xiaoshi3*10+xiaoshi4;fen=fen3*10+fen4;miao=miao3*10+miao4;write_com(0x80+69);write_data(table1xiaoshi3);write_data(table1xiaoshi4);wri

16、te_data(table25);write_data(table1fen3);write_data(table1fen4);write_data(table25);write_data(table1miao3);write_data(table1miao4); t0=0;TR0=1;TR1=1;tempchang(); myshu();bai=tp/100;shi=tp/10%10;ge=tp%10;if(k1=0)write_com(0x80);for(s=0;s<6;s+)write_data(tables);write_com(0x80+10);write_data(0xdf);

17、write_data(0x63);write_com(0x80+6);write_data(table1bai);write_data(table1shi);write_data(0x2e);write_data(table1ge); /chewenbufenelse;m1=nian/1000;m2=nian/100%10;m3=nian/10%10;m4=nian%10;m5=yue/10;m6=yue%10;m7=ri/10;m8=ri%10;write_com(0x80);write_data(0xff);write_data(table1m1);write_data(table1m2)

18、;write_data(table1m3);write_data(table1m4);write_data(0xff);write_data(table1m5);write_data(table1m6);write_data(0xff);write_data(table1m7);write_data(table1m8);write_data(0xff);write_com(0x80+0x40);for(s=0;s<5;s+)write_data(table2s);key_scan();if(t0=20)t0=0;miao+; if(miao>=600)fen+;miao-=miao

19、;if(fen>=60)fen-=60;xiaoshi+;if(xiaoshi=24)xiaoshi=0;ri+;switch(yue) case 1: if(ri=31) yue+; ri=0; break; case 2: if(nian%100)&(!(nian%4) if(ri=29)yue+;ri=0;elseif(ri=28)yue+;ri=0; break; case 4: if(ri=30) yue+;ri=0; break;case 6: if(ri=30) yue+;ri=0; break; case 9: if(ri=30) yue+;ri=0; break

20、; case 11: if(ri=30) yue+;ri=0; break; if(ri>=31)ri=0;yue+;if(yue=13)yue=0;nian+;write_com(0x80+69);xiaoshi1=xiaoshi/10;xiaoshi2=xiaoshi%10;fen1=fen/10;fen2=fen%10;miao1=miao/100;miao2=miao/10%10; write_data(table1xiaoshi1);write_data(table1xiaoshi2);write_data(table24);write_data(table1fen1);wri

21、te_data(table1fen2);write_data(table24);write_data(table1miao1);write_data(table1miao2);void key_scan()/*扫描第一行*P2=0xfe;t0=0; temp=P2;temp=temp&0xf0;if(temp!=0xf0)delay(10);if(temp!=0xf0) temp=P2; switch(temp) case 0xee: key_manage1(); break; case 0xde: key_manage2(); break; case 0xbe: key_manage

22、3(); break; case 0x7e: key_manage4(); break; while(temp!=0xf0) temp=P2; temp=temp&0xf0; /*扫描第二行*P2=0xfd; temp=P2;temp=temp&0xf0; if(temp!=0xf0) /TR0=0; delay(10); if(temp!=0xf0) temp=P2; switch(temp) case 0xed: key_manage5(); break; case 0xdd: key_manage6(); break; case 0xbd: key_manage7();

23、break; case 0x7d: key_manage8(); break; while(temp!=0xf0) temp=P2; temp=temp&0xf0; /*扫描第三行* P2=0xfb; temp=P2;temp=temp&0xf0;if(temp!=0xf0) / TR0=0; delay(10); if(temp!=0xf0) temp=P2; switch(temp) case 0xeb: key_manage9(); break; case 0xdb: key_manage10(); break; case 0xbb: key_manage11(); br

24、eak; case 0x7b: key_manage12(); break; while(temp!=0xf0) temp=P2; temp=temp&0xf0; /*扫描第四行*P2=0xf7;temp=P2;temp=temp&0xf0;if(temp!=0xf0) / TR0=0; delay(10); if(temp!=0xf0) temp=P2; switch(temp) case 0xe7: key_manage13(); break; case 0xd7: key_manage14(); break; case 0xb7: key_manage15(); brea

25、k; case 0x77: key_manage16(); break; while(temp!=0xf0) temp=P2; temp=temp&0xf0; void key_manage1()/num=10;void key_manage2()num=3;k+;void key_manage3()num=2;k+; void key_manage4()num=1;k+; void key_manage5()num=11;void key_manage6()num=6;k+;void key_manage7()num=5;k+; void key_manage8()num=4;k+;

26、 void key_manage9()/num=12; void key_manage10()num=9;k+;void key_manage11()num=8;k+; void key_manage12()num=7;k+; void key_manage13()z=z;k=0; void key_manage14()k-;/num=14;void key_manage15()num=0;k+; void key_manage16() k1=k1;/num=16; void timer0() interrupt 1TH0=(65536-5000)/256;TL0=(65536-5000)%256;t0+;void timer1() interrupt 3TH1=(65536-2400)/256;TL1=(65536-2400)%256;if(t0>=20)miao+;t0=0; 附录2.部分实物图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1