单片机课程设计说明书数字时钟设计_第1页
单片机课程设计说明书数字时钟设计_第2页
单片机课程设计说明书数字时钟设计_第3页
单片机课程设计说明书数字时钟设计_第4页
单片机课程设计说明书数字时钟设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、目录1.引言21.1设计任务与要求21.2数字钟得实用价值和理论意义21.3设计所用器件简介31.3.1 单片机简介31.3.2 1602lcd的基本参数及引脚功能32.设计内容73程序设计及硬件电路83.1原理图(protues)83.2原理图(protel)84.仿真结果95.收获、体会和建议116.参考文献117.附:源程序121.引言近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以

2、及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。数字钟是采用数字电路实现对时,分,秒数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先

3、的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。1.1设计任务与要求1.利用at89c51定时器设计一个电子时钟;2.显示格式位 “xx xx xx”,从左向右分别是:时、分、秒;3.显示部分用1602lcd显示屏;4.具有四个调整键k0,k1,k2,k3;5.按下相应的键可以调整时,分,秒;6.调整到哪一位哪一位闪烁;7.在1602上方显示“年,月,日,星期”。1.2数字钟得实用价值和理论意义数字钟是采用数字电路

4、实现对时,分,秒数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。1.3设计所用器件简介1.3.1 单片机简介mcs51是指由美国intel公司(对了,就是大名鼎

5、鼎的intel)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼mcs51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。intel公司将mcs51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,当然,功能或多或少有些改变,以满足不同的需求,其中89c51就是这几年在我国非常流行的单片机,它是由美国atmel公司开发生产的。以后我

6、们将用89c51、89s51来完成一系列的实验。mcs-51系列单片机mcs-51系列单片机分为两大系列,即51子系列与52子系列。51子系列:基本型,根据片内rom的配置,对应的芯片为8031、8051、8751、895152子系列:增强型,根据片内rom的配置,对应的芯片为8032、8052、8752、8952这两大系列单片机的主要硬件特性如下表:上表中可以看到,8031、8031、8032、80c32片内是没有rom的,对应着上表看,我们可以发现,51系列的单片机的ram大小为128b,52系列的ram大小为256b,51系列的计数器为两个16位的,52系列的计数器为三个16位计数器。5

7、1系列的中断源为5个,52系列的中断源为6个。1.3.2 1602lcd的基本参数及引脚功能1602lcd分为带背光和不带背光两种,基控制器大部分为hd44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图10-54所示:图10-54 1602lcd尺寸图1602lcd主要技术参数:显示容量:162个字符芯片工作电压:4.55.5v工作电流:2.0ma(5.0v)模块最佳工作电压:5.0v字符尺寸:2.954.35(wh)mm引脚功能说明1602lcd采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:编号符号引脚说明编号符号引脚说明

8、1vss电源地9d2数据2vdd电源正极10d3数据3vl液晶显示偏压11d4数据4rs数据/命令选择12d5数据5r/w读/写选择13d6数据6e使能信号14d7数据7d0数据15bla背光源正极8d1数据16blk背光源负极引脚接口说明表第1脚:vss为地电源。第2脚:vdd接5v正电源。第3脚:vl为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10k的电位器调整对比度。第4脚:rs为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:r/w为读写信号线,高电平时进行读操作,低电平时进行写操作。当rs和r/w

9、共同为低电平时可以写入指令或者显示地址,当rs为低电平r/w为高电平时可以读忙信号,当rs为高电平r/w为低电平时可以写入数据。第6脚:e端为使能端,当e端由高电平跳变成低电平时,液晶模块执行命令。第714脚:d0d7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。1602lcd的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表所示:序号指令rsr/wd7d6d5d4d3d2d1d01清显示00000000012光标返回000000001*3置输入模式00000001i/ds4显示开/关控制0000001dcb5光标或字符移位000001s/cr/l*6置功能0

10、0001dlnf*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01bf计数器地址10写数到cgram或ddram)10要写的数据内容11从cgram或ddram读数11读出的数据内容控制命令表1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01h,光标复位到地址00h位置。指令2:光标复位,光标返回到地址00h。指令3:光标和显示模式设置 i/d:光标移动方向,高电平右移,低电平左移 s:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:

11、显示开关控制。 d:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 c:控制光标的开与关,高电平表示有光标,低电平表示无光标 b:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 s/c:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 dl:高电平时为4位总线,低电平时为8位总线 n:低电平时为单行显示,高电平时双行显示 f: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器ram地址设置。指令8:ddram地址设置。指令9:读忙信号和光标地址 bf:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平

12、表示不忙。指令10:写数据。指令11:读数据。与hd44780相兼容的芯片时序表如下:读状态输入rs=l,r/w=h,e=h输出d0d7=状态字写指令输入rs=l,r/w=l,d0d7=指令码,e=高脉冲输出无读数据输入rs=h,r/w=h,e=h输出d0d7=数据写数据输入rs=h,r/w=l,d0d7=数据,e=高脉冲输出无2.设计内容atc89c51单片机lcd1602显示器按键k0 k1 k2 k3 位驱动 3程序设计及硬件电路程序流程图3.1原理图(protues)3.2原理图(protel)4.仿真结果上电后按下k0开始运行:按下k3秒闪烁按下k1 闪烁 减一(05调到04)按下k

13、2 加一(04调到05)根据按下k0的次数可以改变闪烁的位置进行分,时,年,月,日,星期的调整调整分调整时调整年调整月调整日调整星期5.收获、体会和建议单片机数字钟可以说是一个较小的系统,开始时我们觉得通过c语言较容易实现,确实,只实现一个能够正常走时并且能够校时的数字钟是比较容易的。但我们想错了,毕竟是第一次从总体角度来考虑地完成一个小系统,好多的实际性的问题我们没有考虑,所以造成我们最终设计的数字钟精度不高,并且存在好多问题,当然问题多了对我们来说是好事,这样我们在解决更多问题时学会更多解决问题的方法,对我们也算是长长经验吧。通过这次对数字钟的设计,让我了解了设计电路的程序,也让我了解了关

14、于数字钟的原理与设计理念,要设计一个完整的电路总要经过多次的失败才能成功的,在设计中,遇到了许多匪夷所思的问题,一个人就是想破脑子也做不出来,这时候,就需要去询问老师、和同学探讨,共同解决出现的问题,也许就是因为老师的一句提醒、同学的探讨中就会豁然开朗。从这次设计中我也觉得自己还对单片机的功能了解只是个皮毛,单片机强大的功能还等着我们去开发。通过这次设计,不仅使我学到了知识,让我对电路设计有了大概的了解;其次,还体会到了团队精神。总而言之,这次设计是成功的。6.参考文献1 杨文龙.单片机原理及应用.西安:西安电子科技大学出版社,19932 李朝青.单片机原理及接口技术.北京:北京航空航天大学出

15、版社,20033 胡汉才.单片机原理及系统设计.北京:清华大学出版社,20034 杨忠煌,黄博俊,李文昌.单芯片8051实务与应用.北京:中国水利水电出版社,20017.附:源程序#include #define uchar unsigned char#define uint unsigned int uchar code table1= 2011-00-00-mon;/星期一 mon 星期二 tue 星期三 wed 星期四 thu 星期五 fri 星期六 sat 星期天 sun uchar code table2= 00:00:00 ;uchar code table=0,1,2,3,4,5

16、,6,7,8,9;uchar num,count,miao,fen,xiao,week,day,month,year,shi,ge,flag,num1;sbit lcd_rw=p37;sbit lcd_rs=p35;sbit lcd_e=p34;sbit k1=p10;/选择sbit k2=p11;/增加sbit k3=p12;/减少sbit k4=p13;/开始void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/lcd显示void init(void);/初始化函数void write_com(uchar command);/

17、写指令函数void write_date(uchar dat);/写数据函数void lcd_disp_char(uchar x,uchar y,uchar dat);/在某个屏幕位置上显示一个字符,x(0-16),y(1-2)/void lcd_check_busy(void);/检查忙函数。我没用到此函数,因为通过率极低。void delay_n40us(uint n);/延时函数/*/*初始化函数*void init(void)write_com(0x38);/设置8位格式,2行,5x7write_com(0x0c);/整体显示,关光标,不闪烁write_com(0x06);/设定输入方

18、式,增量不移位write_com(0x01);/清除屏幕显示delay_n40us(100);/实践证明,用for循环200次就能可靠完成清屏指令。/*/*写指令函数*void write_com(uchar dat)p2=dat;lcd_rs=0;/指令lcd_rw=0;/写入lcd_e=1;/允许lcd_e=0;delay_n40us(1);/实践证明,我的lcd1602上,用for循环1次就能完成普通写指令。/*/*写数据函数*void write_date(uchar dat)p2=dat;lcd_rs=1;/数据lcd_rw=0;/写入lcd_e=1;/允许lcd_e=0;delay

19、_n40us(1);/*/*延时函数*void delay_n40us(uint n) uint i; uchar j; for(i=n;i0;i-) for(j=0;j2;j+); /在这个延时循环函数中我只做了2次循环, /实践证明我的lcd1602上普通的指令只需1次循环就能可靠完成。/void main()init();write_com(0x80); /初始化for(num=0;num15;num+)/显示年月日write_date(table1num);delay(5);write_com(0x80+0x40);for(num=0;num15;num+) /显示时间write_da

20、te(table2num);delay(5);while(1)if(count=20)/计时的数count=0;miao+;if(miao=60)miao=0;fen+;if(fen=60)fen=0;xiao+;if(xiao=24)xiao=0;week+;if(week=8)week=0;switch(week)case 1:write_com(0x80+0x0c);write_date(m);delay(5);write_date(o);delay(5);write_date(n);break;case 2:write_com(0x80+0x0c);write_date(t);dela

21、y(5);write_date(u);delay(5);write_date(e);break;case 3:write_com(0x80+0x0c);write_date(w);delay(5);write_date(e);delay(5);write_date(d);break;case 4:write_com(0x80+0x0c);write_date(t);delay(5);write_date(h);delay(5);write_date(u);break;case 5:write_com(0x80+0x0c);write_date(f);delay(5);write_date(r)

22、;delay(5);write_date(i);break;case 6:write_com(0x80+0x0c);write_date(s);delay(5);write_date(t);delay(5);write_date(a);break;case 7:write_com(0x80+0x0c);write_date(s);delay(5);write_date(u);delay(5);write_date(n);break;day+;if(month%2=0&day=31)|(month%2=1&day=32&month!=2)|(year%4=0&year%100!=0)|year%

23、400=0)&month=2&day=30)|(!(year%4=0&year%100!=0)|year%400=0)&month=2&day=29)/判断每月有多少天day=0;month+;if(month=13)month=1;year+;shi=year/10;ge=year%10;write_com(0x80+0x04);write_date(tablege);write_com(0x80+0x03);write_date(tableshi);shi=month/10;ge=month%10;write_com(0x80+0x07);write_date(tablege);write

24、_com(0x80+0x06);write_date(tableshi);shi=day/10;ge=day%10;write_com(0x80+0x0a);write_date(tablege);write_com(0x80+0x09);write_date(tableshi);shi=xiao/10;ge=xiao%10;write_com(0x80+0x45);write_date(tablege);write_com(0x80+0x44);write_date(tableshi);shi=fen/10;ge=fen%10;write_com(0x80+0x48);write_date(

25、tablege);write_com(0x80+0x47);write_date(tableshi);shi=miao/10;ge=miao%10;write_com(0x80+0x4b);write_date(tablege);write_com(0x80+0x4a);write_date(tableshi);/显示目前的年月日和具体时间if(k1=0) /按键k1按下delay(10);if(k1=0)tr0=0;flag+;num1=0;if(flag=8)flag=1;switch(flag)case 1:write_com(0x80+0x4b);write_com(0x0f);bre

26、ak;case 2:write_com(0x80+0x48);write_com(0x0f);break;case 3:write_com(0x80+0x45);write_com(0x0f);break;case 4:write_com(0x80+0x0a);write_com(0x0f);break;case 5:write_com(0x80+0x07);write_com(0x0f);break;case 6:write_com(0x80+0x04);write_com(0x0f);break;case 7:write_com(0x80+0x0c);write_com(0x0f);bre

27、ak;/时间停止运行 确定调整时间的位置while(!k1);/消抖if(k2=0)/k2键按下delay(10);if(k2=0)num1+;if(num1=60)num1=0;/60为周期switch(flag)case 1:miao=num1;shi=miao/10;ge=miao%10;write_com(0x80+0x4b);/地址write_date(tablege);/数据write_com(0x80+0x4a);write_date(tableshi);break;case 2:fen=num1;shi=fen/10;ge=fen%10;write_com(0x80+0x48)

28、;write_date(tablege);write_com(0x80+0x47);write_date(tableshi);break;case 3:xiao=num1;shi=xiao/10;ge=xiao%10;write_com(0x80+0x45);write_date(tablege);write_com(0x80+0x44);write_date(tableshi);break;case 4:day=num1;shi=day/10;ge=day%10;write_com(0x80+0x0a);write_date(tablege);write_com(0x80+0x09);wri

29、te_date(tableshi);break;case 5:month=num1;shi=month/10;ge=month%10;write_com(0x80+0x07);write_date(tablege);write_com(0x80+0x06);write_date(tableshi);break;case 6:year=num1;shi=year/10;ge=year%10;write_com(0x80+0x04);write_date(tablege);write_com(0x80+0x03);write_date(tableshi);break;case 7:week=num

30、1;switch(week)case 1:write_com(0x80+0x0c);write_date(m);delay(5);write_date(o);delay(5);write_date(n);break;case 2:write_com(0x80+0x0c);write_date(t);delay(5);write_date(u);delay(5);write_date(e);break;case 3:write_com(0x80+0x0c);write_date(w);delay(5);write_date(e);delay(5);write_date(d);break;case

31、 4:write_com(0x80+0x0c);write_date(t);delay(5);write_date(h);delay(5);write_date(u);break;case 5:write_com(0x80+0x0c);write_date(f);delay(5);write_date(r);delay(5);write_date(i);break;case 6:write_com(0x80+0x0c);write_date(s);delay(5);write_date(t);delay(5);write_date(a);break;case 7:write_com(0x80+

32、0x0c);write_date(s);delay(5);write_date(u);delay(5);write_date(n);break;break;/是时间加while(!k2);if(k3=0)/k3按下delay(10);if(k3=0)if(num1=0)num1=60;num1-;switch(flag)case 1:miao=num1;shi=miao/10;ge=miao%10;write_com(0x80+0x4b);write_date(tablege);write_com(0x80+0x4a);write_date(tableshi);break;case 2:fen

33、=num1;shi=fen/10;ge=fen%10;write_com(0x80+0x48);write_date(tablege);write_com(0x80+0x47);write_date(tableshi);break;case 3:xiao=num1;shi=xiao/10;ge=xiao%10;write_com(0x80+0x45);write_date(tablege);write_com(0x80+0x44);write_date(tableshi);break;case 4:day=num1;shi=day/10;ge=day%10;write_com(0x80+0x0a);write_date(tablege);write_com(0x80+0x09);write_date(tableshi);break;case 5:month=num1;shi=month/10;ge=month%10;write_com(0x80+0x07);write_date(tablege);write_com(0x80+0x06);write_date(tableshi);break;c

温馨提示

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

评论

0/150

提交评论