单片机课程设计说明书-数字时钟设计.doc

上传人:来看看 文档编号:3262704 上传时间:2019-08-06 格式:DOC 页数:18 大小:292.02KB
返回 下载 相关 举报
单片机课程设计说明书-数字时钟设计.doc_第1页
第1页 / 共18页
单片机课程设计说明书-数字时钟设计.doc_第2页
第2页 / 共18页
单片机课程设计说明书-数字时钟设计.doc_第3页
第3页 / 共18页
单片机课程设计说明书-数字时钟设计.doc_第4页
第4页 / 共18页
单片机课程设计说明书-数字时钟设计.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《单片机课程设计说明书-数字时钟设计.doc》由会员分享,可在线阅读,更多相关《单片机课程设计说明书-数字时钟设计.doc(18页珍藏版)》请在三一文库上搜索。

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系列的计数器为

7、三个16位计数器。51系列的中断源为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为读写信号线,高电平时进行读操作,低电平时进行写

9、操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当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/

10、CR/L*6置功能00001DLNF*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:屏幕上所有文字是否左移或者右移。高电平表示有效,低

11、电平则无效。指令4:显示开关控制。 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 闪烁 减一(

13、05调到04)按下K2 加一(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

16、,1,2,3,4,5,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

17、command);/写指令函数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(0x

18、06);/设定输入方式,增量不移位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

19、_E=0;delay_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+) /显示

20、时间write_date(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_da

21、te(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 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);wri

22、te_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+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

23、!=0)|year%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(tabl

24、ege);write_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);w

25、rite_date(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

26、(0x0f);break;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

27、(0x0f);break;/时间停止运行 确定调整时间的位置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(

28、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

29、+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;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

30、7:week=num1;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);

31、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);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

32、_com(0x80+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;

33、case 2:fen=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_co

34、m(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;case 6:year=num1;shi=year/10;ge=year%10;write_com(0x80+0x04);write_date(tablege);write_

35、com(0x80+0x03);write_date(tableshi);break;case 7:week=num1;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 4:write_com(0x80+0x0c);write_date(T);delay(5);write_date(H);delay(5)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1