您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于单片机的电子时钟设计报告(LCD显示)
单片机原理及应用课程设计任务书题目:电子时钟(LCD显示)1、设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:使用字符型LCD显示器显示当前时间。显示格式为“时时:分分:秒秒”。用3个功能键操作来设置当前时间。功能键K1~K4功能下。K1—设置小时。K2—设置分钟。K3—设置秒。程序执行后工作指示灯LED发光,表示程序开始执行,LCD显示“23:59:00”,然后开始计时。2、工作原理本课题难点在于键盘的指令输入,由于每个按键都具有相应的一种功能,程序中有较多的循环结构用以判断按键是否按下,以及判断按键是否抬起,以及LCD显示器的初始化。3、参考电路硬件设计电路图如下图所示:硬件电路原理图单片机原理及应用课程设计任务书题目:电子时钟(LCD显示)1、设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:使用字符型LCD显示器显示当前时间。显示格式为“时时:分分:秒秒”。用3个功能键操作来设置当前时间。功能键K1~K4功能下。K1—设置小时。K2—设置分钟。K3—设置秒。程序执行后工作指示灯LED发光,表示程序开始执行,LCD显示“23:59:00”,然后开始计时。2、工作原理本课题难点在于键盘的指令输入,由于每个按键都具有相应的一种功能,程序中有较多的循环结构用以判断按键是否按下,以及判断按键是否抬起,以及LCD显示器的初始化。3、参考电路硬件设计电路图如下图所示:硬件电路原理图基于AT89C51单片机的电子时钟设计报告一、设计要求与目的1)设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间。2)、使用字符型LCD显示器显示当前时间。显示格式为“时时:分分:秒秒”。3)、用3个功能键操作来设置当前时间。4)、熟悉掌握proteus编成软件以及keil软件的使用二、本设计原理本设计以AT89C51单片机为核心,通过时钟程序的编写,并在LCD显示器上显示出来。该编程的核心在于定时器中断及循环往复判断是否有按键操作,并对每个按键的操作在LCD显示器上作出相应的反应。由于LCD显示器每八位对应一个字符,故把秒、分、时的个位和十位分开表示。该课题中有三个控制开关KM1、KM2、KM3分别控制时、分、秒的调整,时间按递增的方式调整,每点一次按钮则相应的时间个位加以,且时间调整不干扰其他为调整时间的显示。三、硬件设计原理(电路)硬件电路原理图四、软件设计(流程图)设置T0为方式1设中断次数为20清计时单元开中断启动T0调用显示子程序按键程序调用按键显示子程序时钟主程序流程LCD显示保护现场设置计数初值设置T0为方式1设中断次数为20清计时单元开中断启动T0调用显示子程序按键程序调用按键显示子程序时钟主程序流程1S到?(40H)=10?0(40H)(40H)+1(40H)(41H)+1(41H)(46H)=4?0(46H)(0)(47H)恢复现场返回NN中断服务流程图(41H)=5?0(41H)(43H)=10?0(43H)(43H)+1(43H)(44H)+1(44H)(44H)=5?0(44H)(46H)+1(46H)(47H)=2?(46H)+1(46H)NN(46H)=10?0(46H)(47)+1(47)NN五、仿真结果与结论5.仿真结果与结论初始运行显示效果如下:用按键调节时分秒从而设置时间:结论:采用12MHZ晶振采用方式1定时,选取50ms采用20次中断达到一秒,采用查表方式控制LCD显示。根据仿真结果可知该编程及硬件电路符合要求。附录程序设计如下:KM1BITP1.0KM2BITP1.1KM3BITP1.2RSEQUP2.0RWEQUP2.1EEQUP2.2IN_0EQUP0SECLEQU40H;秒低位SECHEQU41H;秒高位MH1EQU42H;冒号MINLEQU43H;分低位MINHEQU44H;分高位MH2EQU45H;冒号HOURLEQU46H;时低位HOURHEQU47H;时高位ORG0000HAJMPMAINORG000BHAJMPINTT_0MAIN:MOVR2,#20ACALLINIT_LCD;初始化液晶MOVR5,#00HMOVIN_0,#84H;写入显示起始地址(第一行第五个位置)ACALLENABLEMOVTH0,#3CH;50MSMOVTL0,#0B0HMOVTMOD,#01HACALLSJCZSETBEASETBET0SETBTR0LCALLA1START1:LCALLWDATA1LCALLWDATA2AJMPSTART1;*******控制键*******A1:LCALLWDATA2LCALLWDATA1JNBKM1,S1JNBKM2,S2JNBKM3,S3AJMPA1;*****调整小时*****S1:LCALLDELAYLJBKM1,A1MOVA,HOURHCJNEA,#02H,ST1MOVA,HOURLCJNEA,#03H,ST2MOVHOURH,#00HMOVHOURL,#00HAJMPJ1ST1:MOVA,HOURLCJNEA,#09H,ST2INCHOURHMOVHOURL,#00HAJMPJ1ST2:INCHOURLAJMPJ1J1:JBKM1,S1LCALLWDATA1AJMPJ1;*****调整分钟*****S2:LCALLDELAYLJBKM2,A1MOVA,MINHCJNEA,#05H,ST3MOVA,MINLCJNEA,#09H,ST4MOVMINH,#00HMOVMINL,#00HAJMPJ2ST3:MOVA,MINLCJNEA,#09H,ST4INCMINHMOVMINL,#00HAJMPJ2ST4:INCMINLAJMPJ2J2:JBKM2,S2LCALLWDATA1AJMPJ2;*****调整秒*****S3:LCALLDELAYLJBKM3,A1MOVA,SECHCJNEA,#05H,ST5MOVA,SECLCJNEA,#09H,ST6MOVSECH,#00HMOVSECL,#00HAJMPJ3ST5:MOVA,SECLCJNEA,#09H,ST6INCSECHMOVSECL,#00HAJMPJ3ST6:INCSECLAJMPJ3J3:JBKM3,S3LCALLWDATA1AJMPJ3;****设定显示初值***SJCZ:MOV40H,#0;显示初值是23:59:00MOV41H,#0MOV42H,#10MOV43H,#9MOV44H,#5MOV45H,#10MOV46H,#3MOV47H,#2RETINTT_0:PUSHPSWPUSHACC;T0定时器中断MOVTL0,#0B0H;送定时初值MOVTH0,#3CHDJNZR2,TTMOVR2,#20INCSECL;秒记数,到60S就清0MOVA,SECLCJNEA,#0AH,TTINCSECHMOVSECL,#00HMOVA,SECHCJNEA,#06H,TTMOVSECH,#00HINCMINL;分记数,到60分请0MOVA,MINLCJNEA,#0AH,TTMOVMINL,#00HINCMINHMOVA,MINHCJNEA,#06H,TTMOVMINH,#00HINCHOURL;时记数,到24时清0MOVA,HOURLCJNEA,#04H,TT2MOVA,HOURHCJNEA,#02H,TT1MOVHOURL,#00HMOVHOURH,#00HAJMPTTTT2:CJNEA,#0AH,TTMOVHOURL,#00HINCHOURHAJMPTTTT1:CJNEA,#02H,TTMOVHOURL,#00HMOVHOURH,#00HAJMPTTTT:POPACCPOPPSWRETI;****液晶初始化****INIT_LCD:ACALLDELAYL;延时,等待LCD完成电源的启动MOVIN_0,#01H;清屏并光标复位ACALLENABLEMOVIN_0,#38H;设置显示模式:8位2行5x7点阵ACALLENABLEMOVIN_0,#0CH;显示器开、光标关、光标不闪烁ACALLENABLEMOVIN_0,#06H;文字不动,光标自动右移ACALLENABLEMOVIN_0,#0C0H;写入显示起始地址(第二行第一个位置)ACALLENABLERET;****写数据程序****WDATA1:MOVIN_0,#84H;写入显示起始地址(第一行第五个位置)ACALLENABLEMOVR1,#08HMOVR0,#47HWDATA_1:MOVA,@R0MOVDPTR,#TABLEMOVCA,@A+DPTRMOVIN_0,A;写入数据SETBRSCLRRWCLREACALLCHECKBUSYSETBE;忙检测DECR0DJNZR1,WDATA_1MOVR1,#08HRETWDATA2:MOVIN_0,#0C0H;写入显示起始地址(第二行第一个位置)ACALLENABLEMOVR1,#10HMOVR0,#00HMOVDPTR,#TABWDATA_2:MOVA,R0MOVDPTR,#TABMOVCA,@A+DPTRMOVIN_0,A;写入数据SETBRSCLRRWCLREACALLCHECKBUSYSETBE;忙检测INCR0DJNZR1,WDATA_2MOVR1,#08HRET;****显示符号表****TABLE:DB30H,31H,32H,33H,34H,35H;012345DB36H,37H,38H,39H,3AH,80H,2EH;6789:空格.TAB:DBMADEINCHINA;******写指令****ENABLE:CLRRS;写入控制命令的子程序CLRRWCLREACALLCHECKBUSYSETBERETCHECKBUSY:MOVIN_0,#0FFH;判断液晶显示器是否忙的子程序CLRRSSETBRWCLRENOPSETBEJBP0.7,CHECKBUSY;如果P0.7为高电平表示忙就循环等待RETDELAYL:MOVR7,#100;延时程序D1:MOVR6,#200DJNZR6,$DJNZR7,D1RETEND
本文标题:基于单片机的电子时钟设计报告(LCD显示)
链接地址:https://www.777doc.com/doc-4863653 .html