




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.安徽科技学院机电与车辆工程学院软件综合实训设计说明书题 目: 姓名(学号) 专 业: 班 级: 指 导 教 师 : 2013 年 月 日.摘 要本课程设计介绍了数字电子钟的系统设计。系统具有时间设置及显示、闹钟等功能。系统以 at89c52为核心,主要进行基于lcd1602型数字电子钟的研究。系统带有液晶显示器,配合按键提供友好的用户界面,操作简单,该数字钟能长期、连续、可靠、稳定的工作。系统软件设计包括单片机计算机两部分的编程。计算机软件编程主要实现参数设置、串行口数据接收、指令发送以及数据的显示和存储。单片机软件编程主要实现键盘、液晶显示等各模块的功能,采用c语言编程。 关键词 数字钟;单片机;液晶显示目 录1 设计任务及要求3 2 硬件系统的设计53 软件系统的设计7 4 程序清单 121设计任务及要求1.1 设计任务 我们的生活离不开时间,可以说时钟就是我们生存的一部分。此次设计数字钟就是为了了解数字钟的原理,从而学会制作数字钟。本次课程设计通过理论设计和实物制作解决相应的实际问题,巩固和运用在单片机技术中所学的理论知识和实验技能,掌握单片机应用系统的一般设计方法,提高设计能力和实践动手能力,为以后从事电子电路设计、研发电子产品打下良好的基础。1.2 功能要求以指定的硬件结构为平台,设计一个数字电子时钟的软件,使系统 具有以下功能:1、计时功能:通过lcd1602(16字 x2行)显示时间。显示格式,第一行中心位置显示字符“ hh-mm-ss”第二行中心位置显示当前时间,格式为hh-mm-ss(即,时-分-秒,各占两位,中间以符号“-”间隔);2、时间校准功能:设置4 个按键 , 分别为“校时”键、“上翻”键、“下翻”键、“确定”键。校准流程如下图所示。注意,校准时,lcd第一行显示字符:“adjust”+“被调整的物理量”(hh或mm或ss),第二行显示被调整量的当前值。3、起闹功能:闹钟设置流程如下图所示。当设定闹钟时间到时,蜂鸣器响。注意,设定闹钟时,lcd第一行显示字符:“alert set”+“被调整的物理量”(hh或mm或ss),第二行显示被设置量的当前值.1.3 总体方案及工作原理本设计中采用at89c52芯片及lcd1602液晶显示器,一些独立式按键构成一个简单的数字电子钟。设计中是采用单片机的内部定时器进行定时,没有用到专门的时钟芯片,因此具有一定的难度,总设计框图如图1.1所示。整个电子钟的工作原理是:在正常的供电状态下,首先利用单片机定时,到了相应的时间由单片机将所需要显示的数据送到液晶显示器的输入口,当有键按下时则进入相应的按键调整状态,进行按键调整。图1.1 数字电子钟总设计图2 硬件系统的设计2.1 硬件系统的模块 本课程设计中硬件电路主要由单片机最小系统,外部扩展键盘,工作电源,液晶显示及蜂鸣器构成,下面就具体介绍其各部分的功能。2.1.1 单片机最小系统(1) 时钟电路单片机的时钟电路由振荡电路和分频电路组成。其中振荡电路由反相器以及并联外接的石英晶体和电容构成,用于产生振荡脉冲。而分频电路则用于把振荡脉冲分频,以得到所需要的时钟信号。时钟电路是单片机系统的心脏,它控制着单片机的工作节奏。本设计采用内部时钟方式,12mhz的石英晶体振荡器。(2) at89s52单片机at89s52是一种带8k字节闪烁可编程可擦除只读存储器(fperomfalsh programmable and erasable read only memory)的低电压,高性能cmos8位微处理器,俗称单片机。at89s单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。2.1.2 按键模块此键盘是为设置时间而设计的人机交互装置。虽然矩阵键盘操作方便,但其硬件电路和软件都较复杂,考虑各方面因素,最终决定采用独立键盘,这样的话只需四个按键即可。其中,按下s1键进入时间设置方式,此时默认设置秒,按s2键进行加1设置,按s3键进行减1设置,再次按下s1键进入分设置,以此类推,直至年设置完成后再次按下s1键,进入正常模式。s4为闹钟键,可进行闹钟的设置。2.1.3 lcd显示模块lcd1602字符型通常有14条引脚线或16条引脚线的lcd,多出来的2条线是背光电源线vcc(15脚)和地线gnd(16脚)。在本设计里面所用到的是16脚的lcd,其引脚的定义及功能如表2.1所示。表2.1 字符型lcd1602的引脚定义 引脚号引脚名电平输入/输出作用1vss电源地2vcc电源(+5v)3vee对比度调节电压4rs0/1输入0=输入指令1=输入数据5r/w0/1输入0=向lcd写入指令或数据1=从lcd读取信息6e1,10输入使能信号,1时读取信息,10(下降沿)执行指令7db00/1输入/输出数据总线line0(最低位)8db10/1输入/输出数据总线line19db20/1输入/输出数据总线line210db30/1输入/输出数据总线line311db40/1输入/输出数据总线line412db50/1输入/输出数据总线line513db60/1输入/输出数据总线line614db70/1输入/输出数据总线line7(最高位)15a+vcclcd背光源正极16k接地lcd背光源负极其中,单片机的p0口与lcd1602的8个数据口相连,p3.0,p3.1,p3.2分别接lcd1602的rs,r/w,e端相连,由于单片机芯片的p0口一般没有加上拉电阻,因此当液晶显示器的数据口线接在单片机89s52芯片的p0口时需要在p0口加上拉,以确保p0口刚开始是高电平。如果要使lcd1602有背光源,则需要将lcd1602的16引脚接地,将lcd1602的15引脚接vcc,此时液晶显示器则在有背光源的情况下工作。本次设计中要是此lcd1602显示两行,第一行显示年、月、日等信息,第二行显示电子时钟的时、分、秒等。2.1.4 蜂鸣器模块在本设计中设计了闹钟因此需要一个发声装置,这里选用了一个蜂鸣器作为发声装置,在此发声装置中我采用了一个三极管做为蜂鸣器的驱动器,将扬声器连至一个三极管,然后通过三极管的基极连至单片机的 p1.3。2.1.4 工作电源单片机正常工作时的,需要外部电源提供正常的工作电源这里我所采用的是利用usb接口技术,从电子计算机的usb接口提供给单片机正常工作所需要的外部电源。 2.2 数字电子钟的原件清单该数字电子钟用到的元器件 1 at89s522 lcd16023 开关4 蜂鸣器5 三极管3 软件系统的设计3.1 单片机的使用情况本设计用到了单片机的定时器的功能,此外用到了单片机的中断功能,在数据的显示时所采用的是查表的方法,因此需要将表格、数据存到单片机的程序存储器中去。由于电子钟需要可以进行调节,因此,需要在单片机的p口上加上按键,本设计采用独立式键盘,直接接在p1口上。用到的液晶显示器接到了单片机的p0口线上,此外用到了一个蜂鸣器接到了单片机的p1.3口线上。3.2 软件系统的模块3.2.1 定时模块在本设计中用到了几个定时模块,第一个定时是用于定时一秒的,用到了单片机的定时器tr0,在定时的过程中采用的是查询的方式,查询定时时间是否到的。定时器所采用第二个定时是用于定时按键的抖动时间,因为当按键时都会出现电压抖动,但对键盘工作有影响的是键闭合时的抖动,所以为了确保键扫描的正确性,每当扫描到有闭合键时,都要进行去抖动处理。本设计中采用的是软件去抖动的方法,抖动的定时采用的软件的延时进行定时的。第三个定时的功能是在液晶显示时的延时时间,即在液晶显示时是采用查表的方法进行显示的,因此需要用到一定的延时,使得我们能够看的清楚所显示的内容,在这里用到的延时也是采用软件的延时。3.2.2 按键操作模块在本次课程设计中,我用到了四个独立式键盘进行按键的操作。因为本数字电子钟的功能比较多,而只用到了四个键,因此在键盘的操作时采用的是层层递进的方法,一步一步往下操作的,设置了键的名称为s1键、s2键、s3键、s4键,在软件设计中是在s1键按下了之后才会有s2键、s3键的操作,键与键之间的功能采用层层套用使得程序看起来更加清晰明了。3.2.3 液晶显示模块lcd1602内部控制器共有11条控制指令,如表3.1所示表3.1 lcd1602控制命令表序号指令rsr/wd7d6d5d4d3d2d1d01清显示00000000012光标返回000000001*3置输入模式00000001i/ds4显示开关控制0000001dcb5光标或字符移位000001s/lr/l*6置功能00001dlnf*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01bf计数器地址10写数到cgram或ddram10要写的数据内容11从cgram或ddram读数11读出的数据内容1602的液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的,其中表格中的“1”为高电平,“0”为低电平。指令1是清显示,指令码01h,光标复位到地址00h位置;指令2是光标复位,光标返回到地址00h;指令3是光标和显示模块设置i/d,光标移动方向,高电平右移,低电平左移,其中s表示所有文字是否左移或者右移,当s为高电平则表示有效,为低电平表示无效;指令4是显示开关控制,当d为高电平时表示开显示,低电平则表示关显示,当c为高电平时表示有光标,低电平是则无光标,当d为高电平时表示光标闪烁,为低电平时表示光标不闪烁;指令5是光标或显示移位,当为高电平时表示移动显示文字,低电平时表示移动光标;指令6是功能设置命令,当dl为高电平时表示4位总线,为低电平时表示8位总线,当n为低电平时表示单行显示,为高电平时表示双行显示,当f为低电平时表示57的点阵字符,为高电平时表示510的点阵字符;指令7是字符发生器ram地址设置;指令8是ddram地址设置;指令9是读忙信号和光标地址,当bf为高电平时表示忙,此时不能接受命令或者数据,为低电平时则表示不忙;指令10是写数据;指令11是读数据。lcd1602显示器的11条指令在上面已经做了一定的讲述,与hd44780相兼容的芯片的时序表如表3.2所示表3.2 基本操作时序表读状态输入rs=l,r/w=h,e=h输出d0-d7=状态字写指令输入rs=l,r/w=l,d0-d7=指令码,e=高脉冲输出无读数据输入rs=h,r/w=h,e=h输出d0-d7=数据写数据输入rs=h,r/w=l,d0-d7=数据,e=高脉冲输出无在本设计中用到了液晶显示器的双行显示,这个数字电子钟能够显示年、月、日,还能显示时、分、秒。在液晶显示时,我采用的是先将光标定位到要送数据的地址,然后将数据送到要显示的地方。在整个显示过程中,有开机时要显示欢迎语,结束时要显示结束语,我所采用的都是应用查表的方法,然后将光标逐次右移,将数据依次送到液晶显示口线上,然后逐次显示。当关机时,我调用了一个清屏的指令。3.2.4 闹钟模块该数字电子钟具有调节闹铃的功能,在按键时设置了闹钟按键,在调好闹钟之后,当到了定时的时间之后,蜂鸣器会鸣叫.3.3 程序流程图3.3.1 整体设计的流程图在此次设计的过程中,我是采用模块的设计方法,一个一个实现功能,可以说如果完成了一个任务的程序框图,就是完成了整个设计任务的百分之三十左右,在本次课程设计的过程中,我都是采用这种思想进行数字电子钟的设计的。因此,在设计的过程,让我能够很轻易的就抓住了主要的设计核心。整体的设计框图如图3.1所示图3.1 整体设计流程图4.2 仿真结果4.2.1 仿真软件的介绍在仿真时用到了两个软件,第一个是keil,第二个是protues,本次仿真是将两个软件结合起来进行的。proteus 软件所提供了30多个元件库,数千种元件。元件涉及到数字和模拟、交流和直流等。对于一个仿真软件或实验室, 测试的仪器仪表的数量、 类型和质量, 是衡量实验室是否合格的一个关键因素。在proteus软件包中,不存在同类仪表使用数量的问题。proteus还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似但功能更多。proteus isis是英国labcenter公司开发的电路分析与实物仿真软件。它运行于windows操作系统上,可以仿真、分析(spice)各种模拟器件和集成电路,该软件的特点是:实现了单片机仿真和spice电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、rs232动态仿真、i2c调试器、spi调试器、键盘和lcd系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、avr系列、pic12系列、pic16系列、学习了这么多年,我深深的体会到了一点就是如果老师能够采用换位的思想进行教学的话,会使得教学更加容易。比如有些老师在教学时采用囫囵吞枣式的讲述,该重点讲述的不能讲清楚,而就那些抽象的东西讲来讲去,这是很多学生所不能接受的。当然要把一个问题完完全全的讲述清楚是要花费很多时间的,那么短短的一堂课又能讲几个问题呢?我觉得对于一个经典的问题如果能够让大家完完全全弄懂是很有收获的。也就是说并不是说每一个问题都要给大家讲清楚的,只要把那些经典的问题讲清楚,然后进行一下拓展的话,这将是一笔巨大的收获。讲了这么多还是要回到单片机技术中的“技术”两个字上来,我觉得现在的大学生学习东西之后,不知道学了这个东西应该去干什么。就这一门课,首先它是一门技术,因此是应用到我们的实际生活中去的,而对于我们学习自动化的学生,又具体到了哪一方面呢?如果能够让大家明白学习这门技术之后的走向,可以使得大家学习得更有目的性。 总之,我觉得更重要是理论与实际的结合,更何况是一门技术性的学科,就更加离不开实践。以认知应用开发过程为先导,先动手实践、再理论学习、以一个完整的单片机应用电路来打开单片机的学习之门。 号召同学们购买实验板,强化单片机训练,在我们的日常作业多做一些动手的作业时很有好处的,像对protel、keil、protues软件的操作时非常必要的。不过我觉得在这些实际作业中也不要限制大家的思维,这样更有利用大家对软件的操作空间,也就更加能够提高大家对软件的掌握能力。对于我们这一代人创新的能力可以说几乎是看不到的,这主要是我们从小就被固定化,无论什么东西都是要按照一个固定的模块来进行,虽然说这样可以是大家少走弯路,但是这就使得思维固定化了。程序清单:#include#define uchar unsigned char#define uint unsigned intuchar code table= hh-mm-ss; /设定开始显示的字符uchar code table1= 00-00-00; /设定开始显示的时间uchar code table2= adjust+hh;uchar code table3= adjust+mm;uchar code table4= adjust+ss;uchar code table5=alert set+hh;uchar code table6=alert set+mm;uchar code table7=alert set+ss;sbit wr=p26; / 1602液晶的读/写端sbit lcden=p27; / 1602液晶使能端sbit lcdrs=p25; / 1602液晶命令/数据端 sbit key1=p14; / 声明s1按键sbit key2=p15; / 声明s2按键sbit key3=p16; / 声明s3按键sbit key4=p17; / 声明s4按键sbit beep=p13; / 声明蜂鸣器uchar num1,shi=12,fen=00,miao=00,shi1,fen1,miao1,keynum1;/定义时分秒变量 /定义年变量void delayms(uint x) /定义带参数延时函数uint i,j;for(i=x;i0;i-) for(j=110;j0;j-);void write_com(uchar com) /1602液晶写指令函数wr=0;lcdrs=0;p3=com;delayms(1);lcden=1;delayms(1); lcden=0;void write_date(uchar date) /1602液晶写数据函数 wr=0;lcdrs=1;p3=date;delayms(1);lcden=1;delayms(1);lcden=0;void write_addate1(uchar add,uchar date)/定义显示时、分、秒函数uchar shi,ge;shi=date/10;ge=date%10;write_com(add+0x80);write_date(0x30+shi); write_date(0x30+ge);void init () /定义初始化函数 tmod=0x01; / 定时器0工作方式为16位th0=(65536-45872)/256; / 装初值tl0=(65536-45872)%256;ea=1; / 开总中断et0=1; /开定时器0中断write_com(0x38); / 设置16*2显示,5*7点阵,8位数据口write_com(0x06); / 写一个字符后地址指针加1write_com(0x0c); /设置开显示,不显示光标write_com(0x01); / 显示清0,数据清0write_com(0x80); / 使指针指向第1行第1列void keyscan() / 定义按键函数uchar keynum;if(key1=0) /s1按键被按下delayms(3); /去抖延时if(key1=0) /确认s1按键被按下,进入调时间模式keynum+;while(!key1); /松手检测 if(keynum=1) /s1按下一次 uchar num;tr0=0;/关闭定时器0write_com(0x80);for(num=0;num15;num+)write_date(table2num); /指针指向第1行2列 write_com(0xc4); /指针指向时write_com(0x0f); /开启光标显示,光标闪烁if(keynum=2)uchar num;write_com(0x80);for(num=0;num15;num+)write_date(table3num); /指针指向第1行2列 write_com(0xc7); /光标跳到分if(keynum=3) uchar num;write_com(0x80);for(num=0;num15;num+)write_date(table4num); /指针指向第1行2列 write_com(0xca); /光标跳到秒 if(keynum=4)keynum=0; /退出调时间模式tr0=1; /开启定时器0write_com(0x0c); /关闭光标显示 if(keynum) /当进入调时间模式时if(key2=0) /s2按键按下delayms(3); /去抖延时 if(key2=0) if(keynum=1) shi+; /s2每按下一次时加1if(shi=24)shi=0; /加满还原write_addate1(0x44,shi); /显示时write_com(0xc4); /写完数据指针指向时原来位置if(keynum=2) fen+; /s2每按下一次分加1if(fen=60) fen=0; /加满还原write_addate1(0x47,fen); /显示分write_com(0xc7); /写完数据指针指向分原来位置if(keynum=3)miao+; /s8每按下一次秒加1if(miao=60)miao=0; /加满还原write_addate1(0x4a,miao); /显示秒write_com(0xca); /写完数据指针指向秒原来位置while(!key2); /松手检测 if(key3=0) delayms(3); if(key3=0) if(keynum=1)shi-;if(shi=-1)shi=23;write_addate1(0x44,shi);write_com(0xc4);if(keynum=2)fen-;if(fen=-1)fen=59;write_addate1(0x47,fen);write_com(0xc7);if(keynum=3) miao-;if(miao=-1)miao=59; write_addate1(0x4a,miao);write_com(0xca);while(!key3); /松手检测 if(key4=0) /s4被按下进入调闹钟模式 delayms(3); if(key4=0)keynum1+;while(!key4);if(keynum1=1)uchar num;tr0=0;/关闭定时器0 write_com(0x01); /清屏,指针清0write_com(0xc6); /在时分之间显示-write_date(-);write_com(0xc9); /在分秒之间显示- write_date(-); write_com(0x80); for(num=0;num15;num+) write_date(table5num); /指针指向第1行2列 write_com(0xc4); /光标指向时 write_com(0x0f); /开启光标显示,光标闪烁 if(keynum1=2) uchar num; write_com(0x80); for(num=0;num15;num+) write_date(table6num); /指针指向第1行2列 write_com(0xc7); /光标指向分if(keynum1=3) uchar num;write_com(0x80);for(num=0;num15;num+) write_date(table7num); /指针指向第1行2列 write_com(0xca); /光标指向秒 if(keynum1=4)uchar num;keynum1=0; /退出调时间模式 tr0=1;write_com(0x80);for(num=0;num15;num+) write_date(tablenum); /指针指向第1行2列/开启定时器0 write_com(0x0c); /关闭光标 if(keynum1)if(key2=0) /s2按下加1 delayms(3); if(key2=0) if(keynum1=1) shi1+; if(shi1=24) shi1=0; write_addate1(0x44,shi1); write_com(0xc4);if(keynum1=2) fen1+; if(fen1=60) fen1=0; write_addate1(0x47,fen1); write_com(0xc7);if(keynum1=3) miao1+; if(miao1=60) miao1=0; write_addate1(0x4a,miao1); write_com(0xca); while(!key2); if(key3=0) /s3每按一次减1 delayms(3);if(key3=0) if(keynum1=1) shi1-;if(shi1=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人购房合同解除及终止条件
- 海运货物保险代理服务合同范本
- 专业遴选测试题及答案
- 边城课件课教学设计
- 幼儿园管理家园合作课件
- 消防安全服务培训班通知课件
- 2025至2030中国海藻酸锂行业项目调研及市场前景预测评估报告
- 2025年智能可穿戴设备无人机飞行安全监测技术创新解析
- 2025至2030中国工业真空阀行业项目调研及市场前景预测评估报告
- 2025至2030中国毛绒布料玩具行业发展趋势分析与未来投资战略咨询研究报告
- 2025年芜湖市鸠江区村级后备干部集中招录工作101名考试参考题库及答案解析
- 2025年少先队大队委笔试试卷及答案
- 瑞达利欧原则课件
- 2025一建《建设工程项目管理》冲刺361题
- 抖音账号实名认证承诺函模板
- 第一章 勾股定理 单元测试卷(含部分解析)-2025-2026学年北师大版八年级数学上册
- 2025年四川省高等职业教育单独考试招生语文试卷
- (2025年标准)以捐代购协议书
- 颈部引流管的护理
- 2025至2030中国门诊外科中心行业项目调研及市场前景预测评估报告
- 中医护理拔罐技术应用
评论
0/150
提交评论