当前位置:文档之家› 51单片机实现电子时钟功能_1602液晶显示

51单片机实现电子时钟功能_1602液晶显示

第一章 设计要求及系统组成1.1 设计要求利用单片机最小系统设计一个电子时钟,显示方式为**:**:**,并且可以任意修改时间。

1.2系统组成原理框图如图1.1图1.1 系统原理框图第二章 系统设计方案2.1 系统设计方案电路原理图如图2.1所示图2.1 电路原理图2.2 电路模块组成及其工作原理2.2.1 时钟电路系统时钟源由内部时钟方式产生,时钟电路由12MH晶振和两个30PF瓷片电容组成,构成自激振荡,形成振荡源提供给单片机。

电容可在5PF到30PF 之间选择,电容的大小对振荡频率有微小影响,可起频率微调作用。

时钟电路如图2.2所示图2.2 时钟电路2.2.2 复位电路单片机复位有上电复位和手动复位两种方式,上电复位是接通电源后利用RC充电来实现复位。

手动复位是通过人为干预,强制系统复位。

复位电路如图2.3所示,可以实现上电复位和手动复位功能。

图2.3 复位电路2.2.3 按键电路在单片机的P1.0、P1.1、P1.2三个I/O口接三个简易按键,通过不断检测按键状态,识别按键的按下顺序和次数即可实现时间的任意修改。

按键电路如图2.4所示。

2.2.4 1602液晶显示模块电路本设计是通过对1602液晶显示屏的控制来实现时间的显示。

1602液晶显示模块的驱动如下所述:图2.4 1602液晶屏实物图1602采用标准的16脚接口,其中:第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7为8位双向数据线第15~16脚:空脚1602显示屏的时序图如图2.5。

图2.5 1602时序图1602液晶显示屏和单片机的连线图如图2.6所示。

图2.6 1602和单片机连线图第三章程序设计及其调试3.1 程序设计程序设计如下:#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit lcdrs=P2^0;sbit lcswr=P2^1;sbit lcden=P2^2;sbit s1=P1^0;sbit s2=P1^1;sbit s3=P1^2;sbit rd=P3^7;uchar count,s1num;char miao,shi,fen;uchar code table[]=" 2011-6-14 TUN";uchar code table1[]=" 00:00:00";void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--); }void write_com(uchar com) {lcdrs=0;lcswr=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_date(uchar date) {lcdrs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){uchar num;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<15;num++){write_date(table[num]);delay(5);}write_com(0x80+0x40);for(num=0;num<12;num++){write_date(table1[num]);delay(5);}TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void write_sfm(uchar add,uchar date) {uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}void keyscan(){rd=0;if(s1==0){delay(5);if(s1==0){ s1num++;while(!s1);if(s1num==1){TR0=0;write_com(0x80+0x40+10);write_com(0x0f);}}if(s1num==2){write_com(0x80+0x40+7);}if(s1num==3){write_com(0x80+0x40+4);}if(s1num==4){s1num=0;write_com(0x0c);TR0=1;}}if(s1num!=0){if(s2==0){delay(5);if(s2==0){while(!s2);if(s1num==1){miao++;if(miao==60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2){fen++;if(fen==60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3){shi++;if(shi==24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);}}}if(s3==0){delay(5);if(s3==0){while(!s3);if(s1num==1)miao--;if(miao==-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2){fen--;if(fen==-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3){shi--;if(shi==-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);}}}}}void main(){init();while(1){keyscan();}}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==18){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}write_sfm(4,shi);}write_sfm(7,fen);}write_sfm(10,miao);}}3.2 实验调试实验过程中出现了很多的问题,经过反复的程序修改和调试,最终完成了本设计的要求,实现了电子时钟功能。

在电路焊接前,通过protues单片机仿真软件多次调试和仿真,得出了正确的实验结果。

Protues仿真图如图3.1所示。

图3.1 protues仿真图结论经过两周的课程设计,不断的测试和分析,最终完成了电子时钟的设计和制作。

在实验的设计及仿真测试时,当没有得出正确的实验现象是,必须冷静、沉着的思考问题的来源,切勿太过紧张。

在电路的焊接过程,须仔细再仔细,案部分焊接导线,切勿乱了头绪。

这样才能在电路制作过程中减少许多不必要的错误。

本次设计组要是程序设计部分,在程序设计过程中,出现了很多的问题,经过和组员的多次讨论和研究、,并参阅了一些电子资料,解决的很多难题。

此课程设计主要考察了对单片机技术原理及程序设计基础等知识。

理论结合实践,使得在平时学习的单片机技术知识有了一个新的认识。

此次设计的电子时钟是一个典型的单片机使用实例。

通过本次设计,使得对单片机技术有了进一步的认识,并且对此产生了浓厚的兴趣,为以后的学习打下了坚实基础。

通过和组员的共同努力,成功的完成此次课程设计,在排除问题过程中,体验了程序设计及电路设计制作的艰辛,更能够体会到成功的喜悦。

参考文献[1] 张先庭.单片机原理、接口和C51使用程序设计.国防工出版社.2011[2] 吴立新.实用电子技术手册.机械工业出版社.2003[3] 胡汉才.单片机原理及其接口技术.北京:清华大学出版社,2004.附录图1 实验电路PCB图。

相关主题