收藏 分享(赏)

proteus_仿真大作业--数字时钟.doc

上传人:dreamzhangning 文档编号:2746420 上传时间:2018-09-26 格式:DOC 页数:25 大小:338.50KB
下载 相关 举报
proteus_仿真大作业--数字时钟.doc_第1页
第1页 / 共25页
proteus_仿真大作业--数字时钟.doc_第2页
第2页 / 共25页
proteus_仿真大作业--数字时钟.doc_第3页
第3页 / 共25页
proteus_仿真大作业--数字时钟.doc_第4页
第4页 / 共25页
proteus_仿真大作业--数字时钟.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、实 验 报 告Proteus仿真大作业课题:数字时钟实验报告系部:电子工程系班级:xxxx姓名:xxx指导老师:xxx2011.6.102前 言数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用。另外数字钟还具备秒表和闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。单片机 AT89C51 在 Proteus 软件中实现数字时钟的定时、时间调整、闹正设置等功能。具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。时钟电路在

2、计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间。Protues 软件不仅具有其它 EDA 工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus 是世界上著名的 EDA 工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到 PCB 设计,真

3、正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB 设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086 和 MSP430等,它也支持 IAR、Keil 和 MPLAB 等多种编译器。本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机 AT89C51 芯片和 LED1602 液晶显示屏为核心,辅以必要的电路,构成了一个单片机电子时钟。3目录第一章 电子时钟、单片机简介 41、电子时钟工作原理 42、单片机简介 4第二章 数字时钟电路设计 52

4、.1 设计要求 .52.2 数字电路模块图: .62.362.2 模块简介: .62.3 系统功能操作实现 .72.4 方案设计元件清单 .8第三章 Protues 仿真电路 .93.1 绘制数字时钟电路 Protues 仿真原理图: .93.1.1 启动 ISIS 7 Professional 软件 .93.1.2 仿真电路绘制 93.1.3 数字时钟原理图 103.1.4 电路检测 113.2 软件设计: .123.2.1 运行 keil 软件编写程序 123.2.2 编译、连接 123.2.3 将程序烧入单片机 133.2.4、程序运行 13附录 14程序: 14总结 24参考资料 25

5、4第一章 电子时钟、单片机简介1、电子时钟工作原理电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活补课缺少的工具。现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED 显示器代替指针显示进而显示时间,减小了计时误差,这种表具有年、月、时、分、秒以及星期、温度等显示功能,还可以进行时和分的校对以及定时闹钟

6、功能,片选的灵活性好。该电子时钟由 89C51,BUTTON,7SES 六段数码管等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。而电路中唯一的一个控制键却拥有多种不同的功能,按下又松开,可以实现屏蔽数码管显示的功能,达到省电的目的;直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一。2、单片机简介1972 年,美国 Intel 公司首先推出 8 位微处理器 8008,并于 1976 年 9 月率先推出 MCS-48 系列

7、单片机。在这以后,8 位单片机纷纷面市。例如,莫斯特克和仙童公司合作生产的 3870 系列,摩托罗拉公司生产的 6801 系列等。随着集成电路工艺水平的提高,一些高性能的 8 位单片机相继问世。例如,1978 年5摩托罗拉公司的 MC6801 系列及齐洛格公司的 Z8 系列,1979 年 NEC 公司的UPD78XX 系列。这类单片机的寻址能力达 64KB,片内 ROM 容量达 4-8KB,片内除带有并行 IO 口外,还有串行 IO 口,甚至还有 AD 转化器功能。8 位单片机由于功能强,被广泛用于自动化装置、智能仪器仪表、智能接口、过程控制、通信、家用电器等各个领域。单片机全称为单片机微型计

8、算机(Single Chip Microsoftcomputer)。从应用领域来看,单片机主要用来控制,所以又称为微控制器(Microcontroller Unit)或嵌入式控制器。单片机是将计算机的基本部件微型化并集成在一块芯片上的微型AT89C51 是一个低功耗,高性能 CMOS 8 位单片机,片内含 4k Bytes ISP(In-system programmable)的可反复擦写 1000 次的 Flash 只读程序存储器,器件采用 ATMEL 公司的高密度、非易失性存储技术制造,兼容标准 MCS-51 指 令 系 统 及 80C51 引脚结构,芯片内集成了通用 8 位中央处理器和

9、ISP Flash 存储单元,功能强大的微型计算机的 AT89C51 可为许多嵌入式控制应用系统提供高性价比的解决方案。综上所诉,数字时钟设计方案采用单片机机型:AT89C51;计时方案设计采用单片机内部计数/定时功能,利用软件控制单片机实现数字时钟时间设置功能;显示方案中利用单片机并行 I/O 端口,实现 LED 动态显示;第二章 数字时钟电路设计2.1 设计要求设计并制作出具有以下功能的数字钟:(1)自动计时,由六位 LED 显示器显示时、分、秒(2)具备校准功能,可以设置当前时间。(3)具备定时启闹功能,可以设置启闹时间,启闹 10s 后自动关闭闹铃62.2 数字电路模块图:2.3 2.

10、2 模块简介:(1)主程序函数 main:完成系统初始化,包括时钟、闹铃初始参数及初始标志的设定;I/O 端口、定时/计数器初始状态的设定:更新显示时间,循环扫描按键,根据案件分别进行闹铃和时钟的设置管理。(2)LED 显示函数 dispiay:根据显示单元首地址显示时钟(或闹铃)时间,实现 6 位 LED 的动态显示功能。(3)键盘检测函数 keytest 和查键值函数 search:这两个函数都属于键盘扫描模块,函数 keytest 判断是否有按键输入,函数 search 识别并返回行列主程序函数LED显示函数键盘检测函数查键值函数时钟设置函数闹钟设置函数闹钟判断启动函数定时器中断函数加

11、1修改功能函数7式按键的键号。(4)时钟设置函数 ftion0:根据用户按下 0#键的次数,依次选择设置时钟的秒、分、时的修改标志位。加 1 修改功能函数将根据该标志位进行时钟时间的设置修改。(5)闹铃设置函数 ftion1:根据用户按下:1#键的次数,依次选择设置闹铃的分、时的修改标志位。加 1 修改功能函数将根据该标志位进行时钟闹铃的设(6)加 1 修改功能函数 cum:用户按下 2#键后,根据时钟和闹铃设置函数设置的标志位将时钟(或闹铃)相应的时、分、秒计数单元加 1。(7)闹铃判断启动函数 alarm:半段闹铃启动时间到否,若时间到,则启动闹铃,延时 10s 后自动关闹铃,并清除闹铃设

12、置标志。(8)定时器中断函数 clock:定时修改时钟参数中断服务子程序。综上各模块功能,数字时钟设计方案采用单片机机型:AT89C51;计时方案设计采用单片机内部计数/定时功能,利用软件控制单片机实现数字时钟时间设置功能;显示方案中利用单片机并行 I/O 端口,实现 LED 动态显示;2.3 系统功能操作实现(1)键盘功能定义。系统采用 4*3 矩阵键盘。共计 12 个按键任务中使用了三个按键,0#、1#和 2#键,其余按键为系统功能扩展预留。0#键:时钟参数表修改功能选择键。按一次修改秒,按二次修改分,按三次修改小时,按四次确认修改完毕。1#键:闹铃时间设置功能选择键。按一次修改分,按两次

13、修改小时,按三次确认修改完成。2#键:增 1 功能键,每按一次该键,根据 0#、1#键的选择结果将相应单元内容加 1。修改“小时”时,加到 23 后再加 1“清零” ;修改“分”时,加到 59 后再加 1“清零” 。8(2)显示定义。6 位 LED 从左到右依次显示时、分、秒,采用 24 小时计时。(3)系统工作流程设计时间显示:上电后,系统自动进入时钟显示,从 00:00:00 开始计时。时间调整:按下 0#键,系统停止计时,进入时间设定状态,保持原有显示。按一次修改秒表,按二次修改分,按三次修改小时,直至按四次确认修改完成,系统由设定后的时间开始计时显示。闹铃设置/启闹/停闹:按下 1#键

14、,数码管显示 00:00:00,进入闹铃设置状态。等待键入启闹时间,按一次设置分,按两次设置小时,按三次确认设置完毕。将启动定时启闹功能,并恢复时间显示。当定时时间到,蜂鸣器鸣叫 10s后停闹。在闹铃设置过程中,系统继续计时。在时间调整和闹铃设置状态下,均可以按 2#键,采用增 1 方式修改相应的参数。2.4 方案设计元件清单元件名称 数量 参数 名称 所属库单片机 1 AT89C51 AT89C51 MCS8051按钮 1.2*1.2 12 BUTTON ACTIVE晶振 1 12MHZ CRYSTLE DEVICE8 200/0.25W1 1K/0.25W电阻3 5.1K/0.25RES

15、DEVICE电阻排 1 10K RESPACK-8电解电容 1 10uF/16V GENELECT10U16V CAPACITORS9瓷片电容 2 30pF CERAMIC33P CAPACITORS或非门 1 - 71LS02 DEVICE蜂鸣器 1 - BUZZER ACTIVE第三章 Protues 仿真电路3.1 绘制数字时钟电路 Protues 仿真原理图:3.1.1 启动 ISIS 7 Professional 软件元件的加载:找到原件后双击原件即可完成加载原件。3.1.2 仿真电路绘制放置元件调整原布局连线绘制总线放置网络标号10网络标号放置如下图所示。3.1.3 数字时钟原理图

16、连线后最终数字时钟电路原理图如下113.1.4 电路检测电路连接完毕后,单击运行按钮(如下图)检测电路是否有误,如果电路如果无误进行软件检测。123.2 软件设计:3.2.1 运行 keil 软件编写程序3.2.2 编译、连接133.2.3 将程序烧入单片机3.2.4、程序运行14附录程序:/*数字钟程序*/#pragma SMALL#include #include #define uchar unsigned charsbit P2_7=P27; /定义蜂鸣器控制端口/*函数声明*/void delay(uchar x);void display(uchar *p);uchar keysc

17、an(); /扫描键盘有无键按下uchar search(); /按键识别void alarm(); /闹钟判断启动void ftion0(); /时钟修改void ftion1(); /闹钟修改void cum(); /加 1 修改/*全局变量定义*/uchar clockbuf3=0,0,0; /存放时钟时分秒的十进制数uchar bellbuf3=0,0,0; /存放闹钟时分秒的十进制数uchar msec1; /10ms 中断次数uchar msec2; /1s 循环次数uchar timdata,rtimdata; /时钟和闹钟修改位置标志15uchar count; /闹钟启动后

18、10s 计时单元uchar *dis_p; /显示缓冲区指针bit armbit; /闹钟标志,为 0 闹钟未设定,为 1 已设定bit rtimbit; /闹钟是否启动标志,为 1 已启动bit rhourbit; /闹钟小时修改标志,为 1 正在修改闹钟小时bit rminbit; /闹钟分修改标志,为 1 正在修改闹钟分bit hourbit; /时钟小时修改标志,为 1 正在修改时钟小时bit minbit; /时钟分修改标志,为 1 正在修改时钟分bit secbit; /时钟秒修改标志,为 1 正在修改时钟秒/*主函数*/void main()uchar a;armbit=0; /

19、清零闹钟标志位msec1=0; /设置 10ms 中断次数初值msec2=0; /设置 1s 中断次数初值timdata=0; /时钟内容修改位置记忆单元清零rtimdata=0; /闹钟内容修改位置记忆单元清零count=0; /闹钟启动后保持 10s 计时单元清零TMOD=0x02; /定时器 T0 为工作方式 2TL0=0x06; /定时初始值为 250usTH0=0x06;EA=1; /中断总允许位开启ET0=1; /定时器 0 开中断TR0=1; /启动定时器 T0dis_p=clockbuf; /将时钟值所在地址送入显示指针while(1)16a=keyscan(); /调用键盘扫

20、描子程序if(a=0x0f)display(dis_p); /无键输入调用显示程序if(armbit=1)alarm(); /判断闹钟设定否,若设定则调用闹钟启动函数elsedisplay(dis_p); /调用显示子函数作为延时去抖动a=keyscan();if(a!=0x0f) /没有抖动,表示有键按下a=search(); /调用查键值子函数switch(a)case 0x00:ftion0();break; /是时钟参数修改功能键,调用时钟设置子函数case 0x01:ftion1();break; /是闹钟参数修改功能键,调用闹钟设置子函数case 0x02:cum();break;

21、 /是加 1 功能键,调用加 1 修改功能子函数default:break;void delay(uchar x)17char j;while(x-)for(j=0;j123;j+);/*6 位 LED 显示函数*/void display(uchar *p)uchar buffer=0,0,0,0,0,0;uchar k,i,j,temp;uchar led=0x3f,0x06,0x58,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;buffer0=p0/10;buffer1=p0%10;buffer2=p1/10;buffer3=p1%10;buffer4=p2/1

22、0;buffer5=p2%10;for(k=0;k3;k+)temp=0xfe;for(i=0;i6;i+)P1=0xff; /关显示j=bufferi;P1=ledj; /P1 送断码P0=temp; /P0 对应端口低电平选位temp=1;18delay(5);/每一位显示延时/*键盘扫描函数*/uchar keyscan()uchar c;P0=0xf0;c=P2;c=c /按键行输入为 P2.0-P2.2,屏蔽无关位return(c);/*查键值函数*/uchar search()uchar a,b,c,d,e;c=0xfe; /首列扫描字送变量 ca=0; /首列号送 awhile(

23、1)P0=c; /列扫描字送 P0 口d=P2; /读入 P2 口的行状态if(dbreak; /第 0 行有键按下,第 0 行行首号送 belse if(dbreak; /第 1 行有键按下,第 1 行行首号送 belse if(dbreak; /第 2 行有键按下,第 2 行行首号送 b19a+; /扫描列号加 1c=1; /修改列扫描字,扫描下一列e=a+b; /将行首号与列号相加,求键号dodisplay(dis_p);while(d=keyscan()!=0x07); /等待释放按键return(e);/*闹钟判断启动函数*/void alarm()if(clockbuf0=bell

24、buf0)rtimbit=1; /设置闹钟计时标志,时钟将进行 10s 计时标志elseif(count=10) /判断闹钟保持 10s 时间到否count=0; /清除闹钟保持 10s 计时P2_7=1; /清除闹钟armbit=0; /清闹钟标志,否则闹钟设置将继续有效rtimbit=0;/*时钟设置函数*/void ftion0()20TR0=0; /关定时器rhourbit=0; /禁止闹钟时间参数修改,请闹钟修改标志rminbit=0; dis_p=clockbuf; /将时钟缓冲区首地址送显示指针rtimdata=0; /清闹钟修改位置标志记录timdata+; /将时钟修改记录值

25、加 1switch(timdata)case 0x01:secbit=1;break;/记录值为 1,则将时钟秒修改标志置 1case 0x02:secbit=0;minbit=0;break;/记录值为 2,则将时钟分修改标志置 1case 0x03:minbit=0;hourbit=1;break;/记录值 3,则将时钟时修改标志置 1case 0x04:timdata=0;hourbit=0;TR0=1;break;/按 4 次则清时钟单元修改位置/记录,定时器重新开启default:break;/*闹钟设置函数*/void ftion1()secbit=0; /禁止时钟时间修改minb

26、it=0;hourbit=0;dis_p=bellbuf; /设置闹钟显示标志timdata=0; /清时钟修改位置标志记录rtimdata+; /将闹钟修改记录值加 1switch(rtimdata)21case 0x01:rminbit=1;break;/记录值为 1,将闹钟分修改标志置 1case 0x02:rminbit=0;rhourbit=1;break;/记录值为 2,将时钟分修改标志置 1case 0x03:rtimdata=0;rhourbit=0;/按 3 次则清闹钟单元修改位置记录armbit=1; /设置闹钟已设置标志位dis_p=clockbuf; /恢复时钟显示标志

27、break;default:break;/*加 1 修改功能函数*/void cum()if(secbit=1) /时钟秒修改标志为 1,秒单元内容加 1if(clockbuf2=59) clockbuf2=0;else clockbuf2+;else if(minbit=1)/时钟分修改标志为 1,分单元内容加 1if(clockbuf1=59) clockbuf1=0;else clockbuf1+;else if(hourbit=1) 22/时钟小时修改标志为 1,小时单元内容加 1if(clockbuf0=23) clockbuf0=0;else clockbuf0+;else if(

28、rtimbit=1) /闹钟分修改标志为 1,分单元内容加 1if(bellbuf1=59) bellbuf1=0;else bellbuf1+;else if(rhourbit=1) /闹钟小时修改标志为 1,小时单元内容加 1if(bellbuf0=23) bellbuf0=0;else bellbuf0+;/*定时器中断函数*/void clock() interrupt 1EA=0; /关中断if(msec1!=40)msec1+;elsemsec1=0; /到 10ms 否,不到则 msec1 加 1if(msec2!=100)msec2+; /到 1s 否,不到则 msec2 加

29、1else23if(rtimbit=1)count+;msec2=0;if(clockbuf2!=59)clockbuf2+; /到 1min 否,不到则 clockbuf2加1elseclockbuf2=0;if(clockbuf1!=59)clockbuf1+; /到 1h 否,不到则 clockbuf1加 1elseclockbuf1=0;if(clockbuf0!=23)clockbuf0+; /到 24h 否,不到则 clockbuf0加 1else clockbuf0=0;EA=1; /开中断24总结历时一周的 Protues 仿真大型作业经过自己努力终于告一段落,在这次电子时钟电

30、路大型作业仿真电路设计中自己学到了很多知识,同时对以前自己所学知识也进行了巩固,对知识的掌握更加牢固。一周实训自己进一步认识到 Protues 仿真在电子电路仿真中的重要性,尤其在模拟电路、数字电路、单片机控制电路中应用方面,作为我们主要的专业课程之一,我觉得 Protues 仿真在单片机课程设计很有必要,而且很有意义。在这次课程设计中,运用到了很多以前的专业知识,虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的一大收获。另外,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个

31、清晰的思路和一个完整的的软件流程图;在设计硬件电路时仿真时,不能妄想一次就将整个电路设计好,也可能需要反复修改、不断改进是;程序设计也是如此,都需要反复修改,要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,不能灵活运用。通过这次设计,我懂得了学习的重要性,进一步掌握了解到理论知识与实践25相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。参考资料 张文涛 PROTEUS 仿真软件应用 华中科技大学出版社 王静霞 单片机应用技术 (C 语言版) 电子工业出版社 王东峰 等 单片机 C 语言设计 100 例 电子工业出版社

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

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报