基于单片机的液晶显示可调电子时钟_第1页
基于单片机的液晶显示可调电子时钟_第2页
基于单片机的液晶显示可调电子时钟_第3页
基于单片机的液晶显示可调电子时钟_第4页
基于单片机的液晶显示可调电子时钟_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

..设计题目:基于单片机的可调电子时钟院系:电气工程系专业:年级:__指导西南交通大学峨眉校区2015年5月15日一原理:1.1单片机最小系统接线图原理:图1单片机最小系统是在以MCS-51单片机为基础上扩展,使其能更方便地运用于测试系统中不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被测试的技术指标,从而能够大大提高产品的质量和数量。单片机以其功能强、体积小、可靠性高、造价低和开发周期短等优点,称为在实时检测和自动控制领域中广泛应用的器件,在工业生产中称为必不可少的器件,尤其是在日常生活中发挥的作用也越来越大。本课题设计主要利用MCS-51单片机I/O口,蜂鸣器,键盘。适合于我们学生用于单片机的学习掌握和一些各种科研立项等的需求。因此,研究单片机最小系统有很大的实用意义。1.2LCD1602接线图:图21.2.1LCD1602的工作原理:1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别。1.2.21602LCD主要技术参数:显示容量:16×2个字符芯片工作电压:4.5—5.5V工作电流:2.0mA<5.0V>模块最佳工作电压:5.0V字符尺寸:2.95×4.35<W×H>mm1.2.3引脚功能说明:第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生"鬼影",使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。1.2.4控制命令表:指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标1.3独立键盘接线图:图3P1口作为一般的输入输出口使用,如图所示:只要有按键按下,那么相应管脚的数值就会发生改变,这就是我们判断按键是否按下的原理,其中需要注意的就是由于单片机芯片运算速度快,在按键按下的时候由于按键具有抖动现象,所以我们必须要注意消抖,这是程序能够正确运行的关键,不能大意。二系统接线图原理:图4单片机应用系统是指微处理器用于工业测量控制功能所必备的硬件结构系统。在这幅图中,有复位电路,石英晶体振荡电路即时钟电路,两个独立键盘电路,IO接口电路,LCD1602接线电路。过程输入/输出通道包括模拟量输入/输出通道和开关量输入/输出通道两大部分。对模拟量信号的采集,需要经过模拟量输入通道的A/D转换器转换成数字信号,再通过接口送入微处理器进行加工处理、分析运算等。各部分的组合,就构成了硬件接线原理图,到达这一步,硬件设计就完成了,接下来的工作就是编程。三程序流程图:图5程序流程图用于程序的编写,是设计的核心。其中,开始阶段包含了各变量的赋值,各IO口的赋值,以及数组等的初始化。检测有无按键按下这个板块是核心也是难点,我们必须要注意消斗和松手检测。计算键值这个板块主要在于数值的计算,这需要自己完成,而计算机不能帮你完成,因此需要对二进制数与十六进制之间进行转化,所以要细心。送值显示是利用LCD1602来完成的,所以重点在编程。四程序:#include<reg51.h>#include<stdio.h>sbitk1=P1^1; //位申明,根据硬件接线电路对必要的位进行定义,下同sbitk2=P1^5;sbitk3=P1^7;sbitrs=P3^1;sbiten=P3^5;unsignedintnum,m,n,i,j,h,d; //定义几个必要的变量unsignedchartab[]="15:15:15";//定义一个数组unsignedchartab1[]="Itnoteasy";//定义一个数组,简要说明此次编程的感受voiddelay<intx>//粗略延时函数,延时时间约为x毫秒{ inty; while<--x> { for<y=0;y<115;++y>; }}voidwtc<unsignedcharord>//LCD写命令函数{ rs=0; en=1; P2=ord; delay<1>; en=1; delay<2>; en=0;}voidwtd<unsignedchardta>//LCD写数据函数{ rs=1; en=0; P2=dta; delay<1>; en=1; delay<5>; en=0;}voidini<> //初始化函数,对相关数据以及变量等初始化{ wtc<0x38>; //显示设置 wtc<0x0c>; //光标设置 wtc<0x06>;//显示方式设置 wtc<0x01>; //清屏 wtc<0x80>; //初始化地址 TH0=<65536-50000>/256; //定时50ms时,对定时器装初值 TL0=<65536-50000>%256; //同上 m=5; j=0; d=0; TMOD=0x01; //定时器方式等设置 EA=1; ET0=1; TR0=1; tab[3]=1; tab[4]=5; tab[6]=1; tab[7]=5; tab[9]=1; tab[10]=5; n=tab[3]*10+tab[4];}voiddispl<unsignedintaddr,unsignedchardt> //LCD命令和数据显示函数,负责在指定位置显示指定数据{ wtc<0x80+addr>; //指定地址 wtd<0x30+dt>; //显示数据}voidshix<> //时间显示函数,在指定位置显示时,分,秒{ displ<4,tab[4]>; displ<3,tab[3]>; displ<7,tab[7]>; displ<6,tab[6]>; displ<10,tab[10]>; displ<9,tab[9]>;}voidjishi<>//计时函数,清0定时器的计量值同时改变对应时,分,秒的值{ if<num==20> { num=0; ++tab[10]; if<tab[10]>9> { tab[10]=0; ++tab[9]; if<tab[9]>5> { tab[9]=0; ++tab[7]; if<tab[7]>9> { tab[7]=0; ++tab[6]; if<tab[6]>5> { tab[6]=0; ++tab[4]; ++n; if<n>23> { n=0; tab[4]=0; tab[3]=0; } if<tab[4]>9> { tab[4]=tab[4]-10; } } } } } }}voidkeyj<> //数值加键判别函数,实现相应数值的加{ if<k2==0> { delay<5>; if<k2==0> { while<!k2>; //消抖 if<d==1> { ++tab[4]; ++n; if<n>23> { tab[4]=0; tab[3]=0; n=0; } if<tab[4]>9> { ++tab[3]; } if<tab[4]>9> tab[4]=tab[4]-10; } if<d==2> { ++tab[7]; if<tab[7]>9> { tab[7]=0; ++tab[6]; if<tab[6]>5> tab[6]=0; } } if<d==3> { ++tab[10]; if<tab[10]>9> { tab[10]=0; ++tab[9]; if<tab[9]>5> tab[9]=0; } } wtc<0x0c>; //关光标 shix<>; } }}voidkeyg<> //功能键判别函数,实现按键的判定以及完成相应需要完成的工作{ if<k1==0> { delay<5>; if<k1==0> { while<!k1>; //消抖 ++j; ++d; m=1; TR0=0; //关闭定时器 if<j>3> { wtc<0x0c>; j=0; d=0; m=5; TR0=1; } if<j==1> { wtc<0x84>; wtc<0x0f>; } if<j==2> { wtc<0x80+7>; wtc<0x0f>; } if<j==3> { wtc<0x80+10>; wtc<0x0f>; //光标闪烁 } } } keyj<>;}voidmain<> //主函数,负责各个子函数的调用{ unsignedinti; ini<>; wtc<0x01>; for<i=0;i<15;++i> wtd<tab[i]>; wtc<0x80+0x40>; for<i=0;i<15;++i> wtd<tab1[i]>; while<1> { keyg<>; if<m==5> { shix<>; jishi<>; } }}voidtim0<>interrupt1//中断函数{ TH0=<65536-50000>/256; TL0=<65536-50000>%256; ++num; //计数}五仿真结果运行图5.1:图6图6为没有按键按下时,时钟正常运行时的结果图,该图正确反映了时间的走动,完成了准确计时并且显示相应时间的任务,达到了此次课程设计的基本内容和基本要求之一,同时也是此次课程设计的第一个成功点。5.2:图7图7为功能键在一轮循环中,第一次按下后的结果显示,此时定时器停止计时,并且光标在小时的个位开始闪烁,很明显,这是提醒我们调节时间,同时也是为调整时间按键做准备,以及为下一个需要调整的值做准备。5.3:图8图8为功能键在一轮循环中第二次按下后的结果显示,其目的和用意同图7,当然,当我们再次按下功能键后,光标会在秒的个位显示,这里就不再重复显示了,当我们在一轮循环中第四次按下功能键后,光标会停止闪烁,并接着计时。5.4:图9图9为数值加键按下后调整时间时的图,此时,每按一下数值加键,光标显示位置的数会加1,这一步就实现了时钟可调这一要求,当在一轮循环中,我们第四次按下功能键后,定时器恢复并继续计时,到此,可调电子时钟的设计完成。六课程设计心得体会:通过此次课程设计,使我更加扎实的掌握了有关单片机方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,我不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行"过而能改,善莫大焉"的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深

温馨提示

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

评论

0/150

提交评论