LCD1602单片机数字钟设计(含附件)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

图1.1.1器件设计图基于单片机89C52的液晶数字钟设计摘要设计采用定时计数器工作方式1进行数值上的累加,经过延时程序,lcd1602驱动程序和时间格式转换程序,实现了数字钟的正常运转以及显示。添加整点报时,用1个if语句设置整点条件调用蜂鸣器程序实现功能;添加闹钟功能,通过当前时间与闹钟时间的对比促使蜂鸣器发声。关键词定时计数器LCD1602闹钟单片机89C521.电路设计1.1主体设计1.1.1设计原理P1(0.1.2.3)如器件设计图所示,这是器件摆放的位置图。Lcd1602的DB端接单片机的P0端,使用P0端要外接上拉电阻,这里放置10k阻值的排阻。蜂鸣器需要三极管放大后方可使用。开关用四脚独立按键,接P1端。使用12MHz的晶振。At89c525个四脚独立键(有复位)LCD1602晶振蜂鸣器1.2各部分设计1.2.1时钟设计单片机的时钟有两种方式产生,分别是内部方式和外部方式。设计采用内部方式。产生时钟的是振荡电路。由一个12MHz的晶振和两个30pF的串联着的电容并联在一起,形成谐振电路。晶振和电容大小涉及电路振荡频率的稳定性和大小,以及起振响应速度。1.2.2复位设计复位有两种,区别在于是否有开关。按一次开关,电位变化形成一次脉冲,使单片机复位。采用10k电阻和10uF的电解电容。1.2.3按键设计有三种模式,分别是工作模式,当前时间设置模式,闹铃时间设置模式。(1)工作模式。就是正常数字钟功能,有整点报时功能。(2)当前时间设置模式。1键进入该模式,之后,1键调时,2键调分,3键确认。(3)闹铃时间设置模式。3键进入该模式,之后,1键调时,2键调分,3键确认,4键打开闹铃。工作模式2键可以查看闹铃时间。1.2.4lcd1602设计Lcd1602的DB端接单片机的P0端,2和15脚接5v,其他的接地。加10k排阻,程序正确,电路无差错,可正常使用。1.2.5蜂鸣器设计蜂鸣器通过三极管放大后使用,作用有闹铃和整点报时的发声。三极管采用pnp型规格。图1.3仿真图图1.4PCB设计1.3软件仿真Proteus7.5设计仿真用到的器件在此版本软件上都能找到。仿真实现了,证明程序无错,可以使用。开关BUTTON,单片机AT89C51,晶振CRVSTAL,电容CAP,电解电容CAP-POL,电阻RES,排阻RES-PACK-8,液晶LMD16L,pnp三极管,蜂鸣器用扬声器代替SPEAKER。连接好线路,调好器件电压5v,就可以下载程序,仿真成功实现了。1.4硬件AltiumDesigner10硬件需要此软件绘制电路印制图。器件封装有自带的,也需要自己绘制,建议封装均检查一遍。3.硬件分析3.1硬件的使用按键采用的是四脚独立按键,实质上用到的是两个引脚两个距离比较窄的脚。复位电路中电解电容的使用,不是限制电流的大小,而是控制复位时间,晶振要靠近51芯片3.2调试先仿真后做实物,遇到的问题较少。调试过程,先检查最小系统,包括晶振电路,复位电路。复位时发现,若用瓷片电容,则调换为电容接地,电阻接5V。注意1602接排阻。实物检测1.上电后,正常液晶显示,并报时。2.设置时间,按1键进入,按1键调时,2键调分,3键完成。3.设置闹钟,按1键进入,按1键调时,2键调分,3键完成,4键打开。4.到整点响铃,闹钟时间到响铃。2键可查看闹钟时间。功能全部实现,除复位键,每个键两个功能。5.结论设计主要是程序上的运用,辅以相应的器件。用到的器件都是常见,所以操作上并不难。仿真用来查看程序缺漏,减少实物制作过程的失败率,以及防止设计偏离方向。硬件设计上,分部好地线和火线,火线内部,地线外部,两根主线的设计方便器件正确插入。焊接是最后的工序,容易出错,先前工序无错,也容易找出错的地方。论文讲了项目的程序思想,电路原理,器件的选择以及需要注意的事项。6.程序#includereg52.h#includeintrins.h#defineuintunsignedint#defineucharunsignedchar#defineLCD1602_DBP0//定义1602的DB口为P0口ucharcodetable[]=CurrentTime;//当前时间ucharcodetable1[]=00:00:00;ucharkey1Flag=0;//定义按键关闭符ucharkey2Flag=0;ucharkey3Flag=0;ucharkey4Flag=0;uchartemp=0;ucharsec=0;//秒ucharmin=0;//分ucharhour=0;//小时ucharclkHour=0;//闹钟小时ucharclkMin=0;//分ucharclkFlag=0;//定义闹钟关闭符ucharbeepNum=0;//声音sbitLCD1602_RS=P2^0;//指令1/数据0选择端sbitLCD1602_RW=P2^1;//读1写0选择端sbitLCD1602_E=P2^2;//读1写0使能端sbitKey1=P1^0;//定义键位符sbitKey2=P1^1;sbitKey3=P1^2;sbitKey4=P1^3;sbitSpeaker=P2^5;//定义蜂鸣器voidDelay1ms()//@12.000MHz{uchari,j;i=12;j=169;do{while(--j);}while(--i);}voidDelay20ms()//@12.000MHz{uchari,j,k;_nop_();_nop_();i=1;j=234;k=113;do{do{while(--k);}while(--j);}while(--i);}voidBeep()//蜂鸣器警报{Speaker=0;Delay20ms();Speaker=1;}voidLcdWaitReady(){ucharsta;LCD1602_DB=0xFF;LCD1602_RS=0;LCD1602_RW=1;do{LCD1602_E=1;sta=LCD1602_DB;LCD1602_E=0;}while(sta&0x80);}voidLcdWriteCmd(ucharcmd){LcdWaitReady();LCD1602_RS=0;LCD1602_RW=0;LCD1602_DB=cmd;LCD1602_E=1;LCD1602_E=0;}voidLcdWriteDat(uchardat){LcdWaitReady();LCD1602_RS=1;LCD1602_RW=0;LCD1602_DB=dat;LCD1602_E=1;LCD1602_E=0;}voidLcdSetCursor(ucharx,uchary)//时间设置{ucharaddr;if(y==0)addr=0x00+x;elseaddr=0x40+x;LcdWriteCmd(addr|0x80);}voidLcdShowStr(ucharx,uchary,uchar*str){LcdSetCursor(x,y);while(*str!='\0'){LcdWriteDat(*str++);}}voidInitLcd1602(){LcdWriteCmd(0x38);LcdWriteCmd(0x0C);LcdWriteCmd(0x06);LcdWriteCmd(0x01);}voidWriteAddress(ucharx){LcdWriteCmd(0x80+x);}voidDisplayMinTens()//显示分十位{WriteAddress(0x49);LcdWriteDat((min/10)+'0');Delay1ms();}voidDisplayMinUnits()//显示分个位{WriteAddress(0x4A);LcdWriteDat((min%10)+'0');Delay1ms();}voidDisplayHourTens()//显示时十位{WriteAddress(0x46);LcdWriteDat((hour/10)+'0');Delay1ms();}voidDisplayHourUnits()//显示时个位{WriteAddress(0x47);LcdWriteDat((hour%10)+'0');Delay1ms();}voidDisplayClkMinTens()//显示闹钟分十位{WriteAddress(0x49);LcdWriteDat((clkMin/10)+'0');Delay1ms();}voidDisplayClkMinUnits()//显示闹钟分个位{WriteAddress(0x4A);LcdWriteDat((clkMin%10)+'0');Delay1ms();}voidDisplayClkHourTens()//显示闹钟时十位{WriteAddress(0x46);LcdWriteDat((clkHour/10)+'0');Delay1ms();}voidDisplayClkHourUnits()//显示闹钟时个位{WriteAddress(0x47);LcdWriteDat((clkHour%10)+'0');Delay1ms();}voidDisplayClkSecTens()//显示秒十位{WriteAddress(0x4C);LcdWriteDat((sec/10)+'0');Delay1ms();}voidDisplayClkSecUnits()//显示秒个位{WriteAddress(0x4D);LcdWriteDat((sec%10)+'0');Delay1ms();}voidScanKey4(){if((Key4==0)&(clkFlag==1)){Delay20ms();if((Key4==0)&(clkFlag==1)){clkFlag=0;beepNum=0;key4Flag=0;}}}voidInitTimer0()//初始化定时器0{TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}voidmain(){InitLcd1602();LcdShowStr(0,0,table);LcdShowStr(6,1,table1);InitTimer0();while(1){if(sec==60){sec=0;min++;}if(min==60){min=0;hour++;}if(hour==24){hour=0;}LcdShowStr(0,0,table);DisplayHourTens();DisplayHourUnits();LcdShowStr(8,1,:);DisplayMinTens();DisplayMinUnits();LcdShowStr(11,1,:);DisplayClkSecUnits();DisplayClkSecTens();//==============================================================if((Key1==0)&(key1Flag==0)){//设置当前时间Delay20ms();if((Key1==0)&(key1Flag==0)){TR0=0;InitLcd1602();LcdShowStr(0,0,SetCurrentTime);DisplayHourTens();DisplayHourUnits();LcdShowStr(8,1,:);DisplayMinTens();DisplayMinUnits();key1Flag=1;}}while(key1Flag==1){if(Key1==0){Delay20ms();if(Key1==0){hour++;if(hour==24){hour=0;}DisplayHourTens();DisplayHourUnits();LcdShowStr(8,1,:);DisplayMinTens();DisplayMinU

1 / 26
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功